模拟退火算法解决01背包问题(matlab实现)
来源:互联网 发布:桶装水软件 编辑:程序博客网 时间:2024/06/01 09:09
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); endendcuresult=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;%如果这个物体在背包中,就把这个物体拿出背包,并放入另一个物体 end if sum(sum(curesult.*weight))>maxweight continue%如果这种情况重量过大,就继续迭代 else cuvalue=sum(sum(curesult.*value)); if(cuvalue>maxvalue) result=curesult; maxvalue=cuvalue;%如果新的情况比之前的价值要大,就移动到这种状态上 else f=cuvalue-maxvalue; if(exp(f/t)>rand) result=curesult; maxvalue=cuvalue;%如果新的情况没之前大,就根据公式随机是否移动 end end end end t=t*a;%降温end
我们可以知道这种方法比较适合大量数据的运算,少量数据可直接用动态规划来做,这种做法最后的最大值也只是逼近最大,很难做到完全最优。
2 0
- 模拟退火算法解决01背包问题(matlab实现)
- 模拟退火算法解决0-1背包问题的实现
- 模拟退火算法(MATLAB实现)
- 用模拟退火算法解决0-1背包问题
- 模拟退火算法解决旅行商问题(matlab)
- 基于MATLAB利用模拟退火算法解决费马点问题
- 模拟退火算法举例及其matlab实现
- 模拟退火算法解决工作指派问题(c++代码实现)
- 模拟退火算法解决TSP(旅行商)问题
- 模拟退火算法解决TSP问题
- 模拟退火算法解决函数优化问题
- 模拟退火算法解决TSP问题
- 模拟退火算法解决TSP问题
- 模拟退火算法解决最近最远问题
- 利用模拟退火算法求解TSP问题(C++实现)
- 模拟退火背包问题求解
- MATLAB模拟退火算法模板
- 0/1背包问题的模拟退火算法
- mysql之锁表机制与死锁浅谈
- linux命令(三)
- 【Unity&加密】DLL加密文章说明
- MyBatis框架
- ST2-045 For POC
- 模拟退火算法解决01背包问题(matlab实现)
- 3.7 小结
- 2013年第四届蓝桥杯试题(Java本科B组)
- http报文格式、GET与POST的区别
- vue自定义指令(扩展的HTML)
- 蓝桥杯:分糖果 JAVA
- h5页面滑动效果实例
- 139. Word Break
- ColorDrawable的简单使用