我对遗传算法理解
1、始祖值
2、随机交叉
3、优秀标准
4、精英策略
5、收敛
<?php //始祖值, $a=1; echo "<pre>";print_r ($a);echo "</pre>"; //散列值 $any = array(2,4,7,8,10,12,51,32,11); echo "<pre>";print_r ($any);echo "</pre>"; //交叉并启动精英策略,假设后代的和越大越优秀 foreach ($any as $key=>$value){ $c[] = $value+$a; } echo "<pre>";print_r ($c);echo "</pre>"; $pos = array_search(max($c), $c); echo $c[$pos];//得到一个优秀的后代 $hd = $c[$pos]; $a1=array(); array_push($a1,$c[$pos]);//把优秀的送到精英营里 echo "<pre>";print_r ($a1);echo "</pre>"; //把优秀的从原来的队伍里除名 unset($c[$pos]); echo "<pre>";print_r ($c);echo "</pre>"; //再来一次交叉,这次始祖是52 foreach ($c as $key=>$value){ $c1[] = $value + $hd; } echo "<pre>";print_r ($c1);echo "</pre>"; //再取一个优秀的后代 $pos1 = array_search(max($c1), $c1); echo $c1[$pos1];//得到一个优秀的后代 //第一代是1,到了第三代就是85了。。。。 ?>
初次认识学习,代码肯定是错的----------------用的是遍历,而不是随机,所以最后的值早就在我自己埋下的bug里了,其实,物种的优胜略汰是在随机的交配过程中产生的
遗传算法还具有以下几方面的特点: (1)遗传算法从问题解的串集开始搜索,而不是从单个解开始。这是遗传算法与传统优化算法的极大区别。传统优化算法是从单个初始值迭代求最优解的;容易误入局部最优解。遗传算法从串集开始搜索,覆盖面大,利于全局择优。 (2)遗传算法同时处理群体中的多个个体,即对搜索空间中的多个解进行评估,减少了陷入局部最优解的风险,同时算法本身易于实现并行化。 (3)遗传算法基本上不用搜索空间的知识或其它辅助信息,而仅用适应度函数值来评估个体,在此基础上进行遗传操作。适应度函数不仅不受连续可微的约束,而且其定义域可以任意设定。这一特点使得遗传算法的应用范围大大扩展。 (4)遗传算法不是采用确定性规则,而是采用概率的变迁规则来指导他的搜索方向。 (5)具有自组织、自适应和自学习性。遗传算法利用进化过程获得的信息自行组织搜索时,适应度大的个体具有较高的生存概率,并获得更适应环境的基因结构。 (6)此外,算法本身也可以采用动态自适应技术,在进化过程中自动调整算法控制参数和编码精度,比如使用模糊自适应法[2] 。
http://baike.baidu.com/link?url=fB2PAn8LA6EWFHfgfOx2b7nh86jZp3eHuNMrLqpMv_woSCj-C8JbWwcyuHmJcnsPVijqtQI_zcxOBToIxWrvVq