phpexperts/php-evolver

通用的PHP遗传算法框架。

v1.0.0 2018-08-07 22:47 UTC

This package is auto-updated.

Last update: 2024-09-22 10:47:55 UTC


README

遗传算法 是一类使用自然选择原理,而不是通过求解数学公式来寻找优化和搜索问题的解决方案的机器学习方法。它们在复杂且不易“解决”的情况中特别有效,通常可以作为比神经网络更容易理解的替代方案。

此框架处理开发和使用遗传算法所需的大部分步骤(循环),只需定义预期解决方案的形状以及一个用于评估每个候选方案并促进其比较以朝向最优解迈进的功能。

安装

您可以通过composer安装此包

composer require phpexperts/php-evolver

使用

构建和寻找解决方案

首先创建一个类,该类定义了要解决的问题的通用解决方案。该类必须扩展此包的Solution类,这将强制实现两个方法:genome(),它定义了有效解决方案的形状;和evaluate(),它将计算一个数值,可用于比较解决方案。

use PHPExperts\GAO\Solution;

class MySolution extends Solution
{
    public function genome()
    {
        return [
            ['char', 'ABC'],
            ['float', 0, 1], // upper and lower bounds
            ['integer', -100, 100],
        ];
    }

    public function evaluate($data = null)
    {
        // The smaller the fitness value, the better.
        $this->fitness = (ord($this->chromosomes[0]) + $this->chromosomes[2]) / $this->chromosomes[1];
    }
}

然后实例化和运行优化器,创建一个可能的解决方案初始种群以开始其评估。

$optimiser = new Breeder(new Population(MySolution::class, 100));
$optimiser->run();
foreach ($optimiser->results as $solution) {
    print_r($solution->summary());
}

数据管理器

尽管某些用例可能不需要很多数据来评估候选解决方案,但其他用例可能需要天文数字。这可能是金融市场中寻求交易策略的情况,候选方案将根据许多不同证券的价格演变进行评估,或者在体育交易市场中,可能策略将根据数千个事件的赔率变化进行评估。

DataManager类提供了一些辅助功能,以帮助解决这些挑战。以下是它可以执行的一些操作

$dm = new DataManager();

// loads all files (assumed to be in CSV format) from given directory into an collection
$data = $dm->loadCsvDir('path/to/directory');

// PHP is really slow importing data into arrays - so once done, save the results (as json)
$dm->save('path/to/output/file', $data);

// It can be reloaded later from a json file in a tiny fraction of the time taken by the initial import
$data = $dm->load('path/to/output/file');

// to ensure our solutions works on data not seen during training, we may set aside some data (20% below) just for testing
list($trainingData, $testingData) = $dm->split($data, 0.2);

PHP在构建数组时也相当消耗内存。如果您遇到内存不足错误,以下内容可能有助于您

$dm->setMemoryLimit('1G'); // increases memory for the current process only, accepts values in M or G e.g. 512M or 2Gs

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全

如果您发现任何与安全相关的问题,请通过电子邮件 peterdcoles@gmail.com 联系,而不是使用问题跟踪器。我非常重视安全问题,并将欢迎并迅速回应您的反馈。

鸣谢

https://github.com/ptercoles/genetic-algorithm-optimiser 分支而来

许可

MIT许可证(MIT)。有关更多信息,请参阅 许可文件