我对遗传算法理解

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

posted @ 2016-07-28 09:41  fleam  阅读(554)  评论(0编辑  收藏  举报