使用遗传算法来解决一个简单的优化问题:找到函数的最小值。
<?php
// 基于遗传算法的优化器
// 目标函数
function targetFunction($x) {
return $x * $x + 3 * $x - 4;
}
// 遗传算法优化器
class GeneticOptimizer {
private $populationSize = 50;
private $mutationRate = 0.1;
private $generations = 100;
public function optimize() {
// 初始化种群
$population = [];
for ($i = 0; $i < $this->populationSize; $i++) {
$population[] = mt_rand(-100, 100); // 随机生成个体
}
// 进化
for ($gen = 0; $gen < $this->generations; $gen++) {
// 计算适应度
$fitness = [];
foreach ($population as $individual) {
$fitness[] = $this->fitness($individual);
}
// 选择
array_multisort($fitness, SORT_ASC, $population);
// 交叉和变异
$nextGeneration = [];
for ($i = 0; $i < $this->populationSize; $i++) {
$parentA = $population[array_rand($population)];
$parentB = $population[array_rand($population)];
$child = ($parentA + $parentB) / 2;
if (mt_rand(0, 100) / 100 < $this->mutationRate) {
$child += mt_rand(-10, 10);
}
$nextGeneration[] = $child;
}
$population = $nextGeneration;
}
// 返回最优解
return min($population);
}
private function fitness($x) {
return abs(targetFunction($x));
}
}
// 使用优化器寻找最小值
$optimizer = new GeneticOptimizer();
$minimum = $optimizer->optimize();
// 输出结果
echo "<h1>基于遗传算法的优化结果</h1>";
echo "<p>函数 f(x) = x^2 + 3x - 4 的最小值:$minimum</p>";
?>