%禁忌搜索求解0-1背包问题
clear ;close all;
%global a;
%global c;
xdata=xlsread('data1.xls'); %加载数据
a=xdata(:,1); %第一列为横坐标
a=a.';
c=xdata(:,2); %第二列为纵坐标
c=c.';
b=11258;
n=50;
listlength=15;%禁忌长度
num=1;
bnum=1;
%初始化禁忌表
list=round(rand(1,50));
for i=1:50
list(i)=0;
end
fxbest(bnum)=0;%记录每次迭代最好的值
fxlbest(num)=0;%记录当前最好的值
%m=200;
for j=1:200
k=1;%选择初始可行解
while(k)
x0=round(rand(50,1));%产生初始x(1)->x(50)
x0(1)=1;%以x(1)为起点
w=a*x0;
if w<=b
k=0;
end
end
if (c*x0)>fxbest(num)
fxbest(num)=c*x0;
xbest=x0;
end
end
if fxbest(num)>fxlbest(bnum)
fxlbest(bnum)=fxbest(num);
end
x1=x0;
%nlist=list;
%产生邻域解 禁忌对象选择x的分量,并选择最佳解,
while(num<=10)
[x,p1,p2]=near(x1,list);
%更新禁忌表
list=newlist(p1,p2,list);
x1=x;
num=num+1;
fxbest(num)=c*x1;
if fxbest(num)>fxlbest(bnum)
bnum=bnum+1;
fxlbest(bnum)=fxbest(num);
xbest=x1;
list(p1)=0;
list(p2)=0;
end
end
subplot(2,1,1)
plot([1:num],fxbest); grid;
axis([0 num 0 20000]); xlabel('num'); ylabel('fxbest'); title('每一代最值变化序列');
subplot(2,1,2)
plot([1:bnum],fxlbest); grid;
axis([0 bnum 0 20000]); xlabel('bnum'); ylabel('fxlbest'); title('当前最佳值变化序列');
禁忌搜索背包问题_禁忌搜索背包_禁忌搜索_禁忌搜索算法
版权申诉
5星 · 超过95%的资源 162 浏览量
2021-09-10
17:35:23
上传
评论 1
收藏 8KB RAR 举报
心梓
- 粉丝: 808
- 资源: 8057
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈