function [maxvalue,result]=SA_bag(value,weight,maxweight)%maxvalue为最大价值,result为最终的物体选取向量,value为价值向量,weight为重量向量,maxweight为重量限制
[m,n]=size(value);
TF=0.000001;a=0.9;T=100;res=100*n;%初始化,TF为截止温度,a为退火因子,T为初始温度,res为迭代次数
t=T;
result=ceil(rand(m,n)-0.5);
while 1
if sum(sum(result.*weight))<=maxweight
break
else
result=ceil(rand(m,n)-0.5);
end
end
curesult=result;
maxvalue=sum(sum(curesult.*value));
cuvalue=maxvalue;%随机初始值
while t>TF
for i=1:res
temp=ceil(n*rand);%随机选取一个物体
if ~result(temp)
curesult(temp)=1;%如果这个物体没有在背包中,就把这个物体放进背包
else
add=ceil(n*rand);
while ~result(add)
add=ceil(n*rand);
end
curesult(add)=1;
curesult(temp)=0;%如果这个物体在背包中,就把这个物体拿出背包,并放入另一个物
模拟退火算法解决01背包问题(matlab实现)
最新推荐文章于 2024-02-25 18:53:35 发布