ravaelles / php-evolver
一个通用的PHP遗传算法框架。
Requires
- php: ^7.1
- tightenco/collect: ^5.6
Requires (Dev)
- phpunit/phpunit: ^7.0
This package is not auto-updated.
Last update: 2024-09-21 03:15: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
变更日志
有关最近更改的更多信息,请参阅CHANGELOG。
贡献
有关详细信息,请参阅CONTRIBUTING。
安全
如果您发现任何安全相关的问题,请通过电子邮件peterdcoles@gmail.com报告,而不是使用问题跟踪器。我对安全问题非常重视,并将欢迎并迅速回应您的反馈。
致谢
从https://github.com/ptercoles/genetic-algorithm-optimiser分支
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。