计算智能作业三:遗传算法计算问题
1.问题描述:
求下述二元函数的最大值:
S.t.
2.程序结构:
(1)变量:
C:是一个1*6数组,每个数组里面是一个6位二进制数,它是遗传算法中的染色体。
new_c:每一轮的新变量c。
first_c:初始群体矩阵。
sur_value:个体适应值的概率值,为0-1之间的数,所有概率值和为1。
survived:经过选择运算后产生的个体基因型组合。
intersect_c :经过交叉运算后产生的个体基因型组合。
mutation_c:经过变异运算后产生的个体基因型组合。
f:最后计算得到的最大值
(2)程序里面的方程
function out = value_function( ci ):价值函数(自适应度函数),即
。
function [ sur_value ] = calc_value( c ):计算群体中每一个个体的适应度的值
function survived = surviver( sur_value ):利用概率选择函数
function [ intersect_c ] = intersect( new_c ):交叉运算
function [ mutation_c ,mutation_value] = mutation( intersect_c ):变异运算
3.源程序
(1)遗传算法的主程序
主程序包括初始群体产生,最终结果展示,即各函数之间的调用关系。
● 个体编码
遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为无符号二进制整数。这个二进制整数位个体的基因型。
因为x1, x2 为 0 ~ 7之间的整数,所以分别用3位无符号二进制整数来表示,将它们连接在一起所组成的6位无符号二进制数就形成了个体的基因型,表示一个可行解。
如一下表格表示基因型和表现型之间的对应关系:
个体 1 2 3 4 5 6
遗传算法是对群体进行的进化操作,需要给其淮备一些表示起始搜索点的初始群体数据。本例中,群体规模的大小取为6,即群体由6个个体组成,每个个体可通过随机方法产生。
%初始群体的产生,本例中,群体规模大小取为6,即由6个个体组成,每个个体随机产生。
c = rand(6,6);%产生随机群体,c表示个体变量。
%第一个6表示个体个体,第二个6表示基因型由6位无符号二进制数组成
c(c>0.5) = 1;
c(c<0.5) = 0;
%显示初始群体
first_c = c;
基因型 111001 100111 011011 101110 100101 111011 ● 初始群体的产生
表现型 (7,1) (4,7) (3,3) (5,6) (4,5) (7,3)
相关推荐: