遗传算法求解0-1背包问题(共9页).docx
《遗传算法求解0-1背包问题(共9页).docx》由会员分享,可在线阅读,更多相关《遗传算法求解0-1背包问题(共9页).docx(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上遗传算法解决0-1背包问题北京科技大学物流工程系2013.6.11一、 实例一:1. 问题描述假设:背包最大重量为300,物品的数量为10,物品的价值:9575237350226578998,物品的重量:895919431007244167642. Matlab代码(1) 参数初始化,导入本问题的物品的价值和重量数据,并设定背包最大重量。wei=9575237350226578998;val=89591943100724416764;w=300; %总重量约束值(2) 随机产生数量为30的种群。生成30*10的0-1矩阵。So =round(rand(30,10);S
2、o=hardlim(So); %So为随机产生的矩阵,值为0或1ZQ,Y = size(So); (3) 迭代次数为50代,交叉概率为90%,变异概率为5%.ds = 50; pc = 0.9; pm = 0.05;(4) 设置适应度函数,利用惩罚函数降低不合格解的适应度,惩罚因子设为1.5.pu=1.5; syd =So*val-pu*So*val./(So*wei).*(So*wei-w)0).*(So*wei-w); figure(1);hold on;(5) 用轮盘赌进行选择操作,用选择出的个体构成的种群替代旧的种群better1=1; ip = 1; updatef=-10; %be
3、tterl为当前算出的总价值,ip为代数whileipsp(sindex) sindex=sindex+1; endnewSo(i,:)=So(sindex,:); endfori=1:ZQSo(i,:)=newSo(i,:);end(6) 设置的交叉概率pc为90%,产生要配对的父代的序号,经过50次顺序调换,将原有顺序打乱,使相邻两个个体作为交叉的父代fori=1:ZQweiindex(i)=i;endfori=1:ZQ point=unidrnd(ZQ-i+1);temp=weiindex(i);weiindex(i)=weiindex(i+point-1);weiindex(i+poi
4、nt-1)=temp;endfori=1:2:ZQ p=rand(1);if(ppc)point=unidrnd(Y-1)+1;for j=point:(Y-1) ch=So(weiindex(i),j); So(weiindex(i),j)=So(weiindex(i+1),j);So(weiindex(i+1),j)=ch;endendend(7) 设置变异的概率为5%,产生50*10的0-1矩阵,对1的位置进行变异 M=rand(ZQ,Y)0).*(So*wei-w); better1,you1 = max(syd); ifupdatef=better1 better1=updatef;
5、So(you1,:)=updatec;endupdatef=better1;updatec=So(you1,:); better2,you2 = min(syd); So(you2,:) = So(you1,:);syd =So*val-pu*So*val./(So*wei).*(So*wei-w)0).*(So*wei-w); media = mean(syd);ip = ip + 1; syd2 =So*val-So*val.*(So*wei-w)0); better3,you3 = max(syd2);plot(ip,better3,-*m);end;(9) 将最优值和参数显示出来。sy
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 遗传 算法 求解 背包 问题
限制150内