darvin/genetic-algorithm

受查尔斯·达尔文理论启发的PHP库

v1.0.3 2020-03-21 02:08 UTC

This package is auto-updated.

Last update: 2024-09-07 23:14:12 UTC


README

遗传算法

Latest Version on Packagist Quality Score Code Grade License

此包允许您在项目中使用 遗传算法。它将通过依赖生物启发操作(如变异、交叉和选择)来帮助解决优化和搜索问题,从而找到高质量的解决方案。

最简单的算法将每个染色体表示为一个位串。尽管可以使用任何PHP数据类型(浮点数、字符串、布尔值、数组、对象)。

安装

您可以通过composer安装此包

composer require darvin/genetic-algorithm

用法

设置

算法需要设置才能运行,所以让我们从默认设置开始

$config = new \Darvin\GeneticAlgorithm\Settings\DefaultSettings();
$algorithm = new Algorithm($config);

个体生成

一个个体由一组称为基因的参数(变量)组成。假设我们将基因编码在染色体中。

$algorithm->setPart("individual:gene", function (Gene $gene) {
    $characters = str_split('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-+,. ');
    $gene->value($characters[rand(0, count($characters)-1)]);
});

适应度函数

适应度函数决定了个体的适应度(个体与其他个体竞争的能力)。它为每个个体给出一个适应度分数。个体被选为繁殖的概率基于其适应度分数。

$algorithm->setPart("fitness", function (Individual $individual) use ($solution) {
    $fitness = 0;
    for ($i=0; $i < $individual->genomeSize() && $i < count($solution); $i++) {
        $char_diff=abs(ord($individual->getGene($i)->value) - ord($solution[$i]));
        $fitness+=$char_diff;
    }
    return $fitness;
});

事件

您可以设置事件来监听和控制算法。

算法开始
$algorithm->setPart("event:listen:algorithmStart", function (Algorithm $algorithm) {
    echo "Algorithm start.\n";
});
新解决方案
$algorithm->setPart("event:listen:newSolutionFound", function (Algorithm $algorithm) {
    echo "New solution found!";
});

贡献

请参阅CONTRIBUTING以获取更多信息。

安全

如果您发现任何安全问题,请通过电子邮件edeminteractive@gmail.com联系,而不是使用问题跟踪器。

许可证

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