clear
popsize=1000; %种群大小
n=50;
CW=1000; %背包大小 可容纳的总重量
w=[80 82 85 70 72 70 66 50 55 25 50 55 40 48 50 32 22 60 30 32 ...
40 38 35 32 25 28 30 22 50 30 45 30 60 50 20 65 20 25 30 10 ...
20 25 15 10 10 10 4 4 2 1]; %各个物品的重量,50个个体
v=[220 208 198 192 180 180 165 162 160 158 155 130 125 122 120 118 115 110 105 101 100 100 98 96 95 90 88 82 80 77 75 73 72 70 69 66 65 63 60 58 56 50 30 20 15 10 8 5 3 1]; %各个物品的价值,50个个体
t=1000; %迭代次数
pc=0.9; %交叉率
pm=0.05; %变异率
popbest=zeros(popsize, n); %最优种群
pop=initpop(popsize,n);
for i=1:1000
[objvalue]=calobjvalue(pop,n,popsize,v,w,CW); %计算目标函数
[fitvalue]=calfitvalue(objvalue); %计算群体中每个个体的适应度
[newpop]=selection(pop,fitvalue); %进行选择计算
[newpop1]=crossover(newpop,pc); %进行交叉计算
[newpop2]=mutation(newpop1,pm); %进行变异计算
[newobjvalue]=newcalobjvalue(newpop2,n,popsize,v,w,CW);
%计算最新代目标函数值,经过选择交叉变异后的下一代
[newfitvalue]=newcalfitvalue(newobjvalue);
%计算最新代的个体适应度
[bestweight,bestvalue, bestpop]=best(newpop2,newfitvalue,w);
%计算最优个体重量,价值,和位置
y(i)=max(bestvalue); %记录最大价值
g(i)=max(bestweight); %记录最大重量
n(i)=i; %记录位置
popbest(i,:)=bestpop; %记录最优个体
pop=newpop2; %迭代重复
end
i=1:1000;
plot(y(i),'-b')
xlabel('迭代次数')
ylabel('最大价值');
title('最优点变化趋势');
legend('最优点');
grid on
[z index]=max(y);
po=n(index) %最优代数位置
W=g(index) %最优重量
V=z %最优价值
BEST=popbest(po,:) %最优解
评论2
最新资源