进化算法

来源:互联网 发布:深度linux硬盘怎么分区 编辑:程序博客网 时间:2024/05/16 20:28
进化算法概念:以达尔文的进化思想为基础,通过模拟生物进化过程与机制的求解问题的自组织、自适应的人工智能技术。生物进化是通过繁殖、变异、竞争和选择实现的;而进化算法则主要通过选择、重组和变异这三种操作实现优化问题的求解。代码:http://wenku.baidu.com/view/dadb76601ed9ad51f01df2f1.html

1. pop=initpop(popsize,chromlength);
 随机生成一个popsize*chromlength的矩阵。
2. [objvalue]=calobjvalue(pop); 
 对于给出的目标函数,计算目标函数值:
  a.将矩阵pop从第k列分成2个矩阵,将每个矩阵转换为十进制数。最终成为一个popsize*1的矩阵。 
  b.将popsize*1矩阵中的数转换为满足要求的取值范围,两个矩阵即对应变量。
  c.带入目标函数求出目标函数值(popsize*1的矩阵)。
3. fitvalue=calfitvalue(objvalue);
 计算每个个体的适应度
4.[bestindividual,bestfit]=best(pop,fitvalue);
  求出群体中适应度最大的个体及其适应度值 
  a.pop矩阵中的一行对应一个个体,fitvalue对应该个体的适应度值。
  b.找出适应度最大所对应的个体,即pop矩阵中的某一行。
5.针对4步骤找到的最优个体,根据步骤2算出最佳个体的目标函数值。
6. [newpop1]=selection(pop,fitvalue); %选择算子 
  根据步骤3求得的每个个体的适应度,筛选出适应度较高的个体。   
7. [newpop2]=crossover(newpop1,pc);  %交叉算子    
8. [newpop3]=mutation(newpop2,pm); %变异算子
  第7-8步根据第6步产生的新pop矩阵,进行交叉和一定概率的变异。
9. 产生新种群。

循环2-9步500次,找到最优解。得到如下图的曲线,

进化算法


原创粉丝点击