资源描述:
《遗传算法案例分析及源代码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一•问题描述:在某一区域内有n个客户,拟建一个物流中心,已知客户j地址坐标为(兀,开)。确定物流中心的地址坐标(兀,刃,使得该物流中心到几个客户之间的距离最短。假设:简单的用两点Z间的距离代替运输距离。目标函数:min乙=J(X一兀尸+(丫一必)2约束条件:X「0,1,2,345,6,7,8}化{0,123,4,5,6,7,8}假设某一区域内有5个客户,其位置坐标如下表所示,客户坐标及相关需求量客户X(km)Y(km)115228351476583(1)变量:C:是一个計6数组,每个数组里而是一个6位二进制数,它是遗传算法中的染色体。new_c:每一轮的新变量Cofirst_c:初始群
2、体矩阵。sur_value:个体适应值的概率值,为0・1之间的数,所有概率值和为1。survived:经过选择运算后产生的个体基因型组合。intersects:经过交叉运算后产生的个体基因型组合。mutation_c:经过变异运算后产生的个体基因型组合。f:最后匸算得到的最大值(2)程序里面的方程functionout=value_function(ci):价值函数(自适应度函数)。function[sur_value]=calc_value(c):计算群体中每一个个体的适应度的值functionsurvived=surviver(sur_value):利用概率选择函数function
3、[intersect_c]=intersect(new_c):交叉运算function[mutation_c,mutation_value]=mutation(intersect_c):变异运算(1)遗传算法主程序%遗传算法的主程序务初始群体的产生,本例中,群体规模大小取为6,即山6个个体组成,每个个体随机产生。c=rand(6,6);%产生随机群体,c表示个体变量。%第一个6表示个体个体,第二个6表示基因型由6位无符号二进制数组成c(c>0.5)=1;c(c<0.5)=0;匕显示初始群体first_c=c;points=训的点省一轮算法包括选择,交叉,变异,变异完成后产生新的个体,作
4、为子代群体进行下一轮进化。一共设置1000次进化forn=1:1000%设置循环次数sur_value=calc_value(c,points);survived=surviver(sur_value);new_c=zeros(6,6);forii=1:6new_c(ii,:)=c(survived(ii),:);endintersect_c=intersect(new_c);^交.义个体mutation_c=mutation(intersect_c);%变异个体,作为子彳弋群体c=mutation_c;%/•代群体作为新-轮的个体,继续选择,交叉,变界endf=0;forjj=1:6
5、b二value_funct:ion(new_c(jj,:),points);iff=b;endend(2)适应度函数计算:适应度函数选择为口标函数的倒数functiondistance=value_function(ci,points)务遗传算法的价值函数,同时也可以将此口标函数值作为个体的适应度。x=4*ci(l)+2*ci(2)+l*ci(3)+l;y=4*ci(4)+2*ci(5)+l*ci(6)+l;distance=0;forii=l:length(points)distance=distance+((x-points(ii,1))x(2)+(y-points(ii,2))A
6、(2))A(1/2);endendfunction[sur_value]=calc_value(c,points)务计算群体中每一个个体的适应度的值value=zeros(1,6);forii=1:6%对于第1到笫6个个体value(ii)=1/value_function(c(ii,:),points);%计算每个个体的适应度值endsur_value=value./sum(value);%将适应度值归一化,即每个个%体被遗传到下一代群体中的概率end(1)选择计算functionsurvived=surviver(sur_value)%选择个体,采川与适应度成止比的概率來确定各个个
7、体复制到下一代群体中survived=ones(1,6);forii=1:6random=rand(1)%随机产生一个0到1的数%判断该随机数出现在哪一个概率区间内,以此來判断哪个个体被选中sur_v_a=0;苗设置最后结果的输岀forjj=1:6sur_v_a=sur_v_a+sur_value(jj);ifrandom