PHP框架,用于执行遗传算法优化

0.1.0 2018-07-04 09:29 UTC

This package is auto-updated.

Last update: 2024-09-17 18:42:24 UTC


README

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

该框架处理了开发和使用遗传算法时所需的大部分步骤(循环),您只需定义期望解决方案的形状和一个评估每个候选解决方案的函数,以促进比较并因此朝着最优解迈进。

安装

您可以通过composer安装此包

composer require petercoles/gao

使用

构建和寻找解决方案

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

use PeterColes\GAO\Solution;

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

    public function evaluate($data = null)
    {
        $this->fitness = (ord($this->chromosomes[0]) + $this->chromosomes[2]) / $this->chromosomes[1];
    }
}

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

$optimiser = new Optimiser(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发送电子邮件,而不是使用问题跟踪器。我非常重视安全问题,并将欢迎并迅速回应您的反馈。

致谢

许可证

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