模拟退火,贪婪算法

B5 孙月 第八次作业

1、仔细阅读文献《球度误差的网格搜索算法》,编程实现其实例验证部分,并与此文献的结果比较。 解:

Matlab程序为: clear

M=load('第一题数据.txt');

P=[-0.0047304,-0.0017027,0.0018167]; f=0.021; n=41; l=1;

zuobiao=zeros(70000,3);%创建m*n全零矩阵 for i=1:n

x(i)=P(1)-f/2+f*(i-1)/n; for j=1:n

y(j)=P(2)-f/2+f*(j-1)/n; for k=1:n

z(k)=P(3)-f/2+f*(k-1)/n; for c=1:36

R(c)=sqrt((M(c,1)-x(i))^2+(M(c,2)-y(j))^2+(M(c,3)-z(k))^2); end

Rmax(l)=max(R,[],2); Rmin(l)=min(R,[],2); W(l)=Rmax(l)-Rmin(l);

zuobiao(l,:)=[x(i),y(j),z(k)]; l=l+1; end end end

w=sort(W,2); %最大内接球法

Rout=min(Rmax,[],2);

Oout=zuobiao(find(Rmax==Rout),:) rout=Rmin(find(Rmax==Rout)); Fout=Rout-rout %最小外接球法

rin=max(Rmin,[],2);

Oin=zuobiao(find(Rmin==rin),:)

Rin=Rmax(find(Rmin==rin)); Fout=Rin-rin %最小区域法

Farea=min(w,[],2)

2、用贪婪算法和模拟退火算法分别求下面背包问题假设有12个物品,质量(磅)和价值(元)如下

2 5 13 2 5 14 17 16

8 0 1 4 5 114 3 1118 17 4 0 3 1 3 0 6

包的最大容量为46磅,则应该装那些东西价值最大?

贪婪算法得到应该装入重量为2磅,5磅,5磅,3磅,2磅,4磅,7磅,6磅,10磅物品时价值最大为5+10+4+3+11+10+16++4+13=76元 Matlab程序如下: n=12;x=zeros(1,n);

w=[4 2 7 5 5 2 3 10 11 18 6 14];%排序后的 v=[10 5 16 11 10 3 4 13 8 13 4 7]; tw=0;%已装入背包的重量; for i=1:n

if tw+w(i)

tv=sum(v(find(x)));

模拟退火算法得到应该装入重量为2磅,5磅,2磅,5磅,10磅,4磅,11磅,7磅时价值最大为5+10+3+11+13+10+8+16=76元 Matlab程序为:

clc,clear

a = 0.95

k = [5;10;13;4;3;11;13;10;8;16;7;4];

k = -k; % 模拟退火算法是求解最小值,故取负数 d = [2;5;18;3;2;5;10;4;11;7;14;6]; n= 12;

sol_new = ones(1,n); % 生成初始解 E_current = inf;E_best = inf;

% E_current是当前解对应的目标函数值(即背包中物品总价值); % E_new是新解的目标函数值; % E_best是最优解的

sol_current = sol_new; sol_best = sol_new; t0=97; tf=3; t=t0; p=1;

while t>=tf for r=1:100

%产生随机扰动

tmp=ceil(rand.*n);

sol_new(1,tmp)=~sol_new(1,tmp); %检查是否满足约束 while 1

q=(sol_new*d

p=~p; %实现交错着逆转头尾的第一个1 tmp=find(sol_new==1); if p

sol_new(1,tmp)=0; else

sol_new(1,tmp(end))=0; end else

break end end

% 计算背包中的物品价值 E_new=sol_new*k; if E_new

% 把冷却过程中最好的解保存下来 E_best=E_new; sol_best=sol_new; end else

if rand

sol_new=sol_current; end end end t=t.*a; end

disp('最优解为:') sol_best

disp('物品总价值等于:') val=-E_best; disp(val)

disp('背包中物品重量是:') disp(sol_best * d)

B5 孙月 第八次作业

1、仔细阅读文献《球度误差的网格搜索算法》,编程实现其实例验证部分,并与此文献的结果比较。 解:

Matlab程序为: clear

M=load('第一题数据.txt');

P=[-0.0047304,-0.0017027,0.0018167]; f=0.021; n=41; l=1;

zuobiao=zeros(70000,3);%创建m*n全零矩阵 for i=1:n

x(i)=P(1)-f/2+f*(i-1)/n; for j=1:n

y(j)=P(2)-f/2+f*(j-1)/n; for k=1:n

z(k)=P(3)-f/2+f*(k-1)/n; for c=1:36

R(c)=sqrt((M(c,1)-x(i))^2+(M(c,2)-y(j))^2+(M(c,3)-z(k))^2); end

Rmax(l)=max(R,[],2); Rmin(l)=min(R,[],2); W(l)=Rmax(l)-Rmin(l);

zuobiao(l,:)=[x(i),y(j),z(k)]; l=l+1; end end end

w=sort(W,2); %最大内接球法

Rout=min(Rmax,[],2);

Oout=zuobiao(find(Rmax==Rout),:) rout=Rmin(find(Rmax==Rout)); Fout=Rout-rout %最小外接球法

rin=max(Rmin,[],2);

Oin=zuobiao(find(Rmin==rin),:)

Rin=Rmax(find(Rmin==rin)); Fout=Rin-rin %最小区域法

Farea=min(w,[],2)

2、用贪婪算法和模拟退火算法分别求下面背包问题假设有12个物品,质量(磅)和价值(元)如下

2 5 13 2 5 14 17 16

8 0 1 4 5 114 3 1118 17 4 0 3 1 3 0 6

包的最大容量为46磅,则应该装那些东西价值最大?

贪婪算法得到应该装入重量为2磅,5磅,5磅,3磅,2磅,4磅,7磅,6磅,10磅物品时价值最大为5+10+4+3+11+10+16++4+13=76元 Matlab程序如下: n=12;x=zeros(1,n);

w=[4 2 7 5 5 2 3 10 11 18 6 14];%排序后的 v=[10 5 16 11 10 3 4 13 8 13 4 7]; tw=0;%已装入背包的重量; for i=1:n

if tw+w(i)

tv=sum(v(find(x)));

模拟退火算法得到应该装入重量为2磅,5磅,2磅,5磅,10磅,4磅,11磅,7磅时价值最大为5+10+3+11+13+10+8+16=76元 Matlab程序为:

clc,clear

a = 0.95

k = [5;10;13;4;3;11;13;10;8;16;7;4];

k = -k; % 模拟退火算法是求解最小值,故取负数 d = [2;5;18;3;2;5;10;4;11;7;14;6]; n= 12;

sol_new = ones(1,n); % 生成初始解 E_current = inf;E_best = inf;

% E_current是当前解对应的目标函数值(即背包中物品总价值); % E_new是新解的目标函数值; % E_best是最优解的

sol_current = sol_new; sol_best = sol_new; t0=97; tf=3; t=t0; p=1;

while t>=tf for r=1:100

%产生随机扰动

tmp=ceil(rand.*n);

sol_new(1,tmp)=~sol_new(1,tmp); %检查是否满足约束 while 1

q=(sol_new*d

p=~p; %实现交错着逆转头尾的第一个1 tmp=find(sol_new==1); if p

sol_new(1,tmp)=0; else

sol_new(1,tmp(end))=0; end else

break end end

% 计算背包中的物品价值 E_new=sol_new*k; if E_new

% 把冷却过程中最好的解保存下来 E_best=E_new; sol_best=sol_new; end else

if rand

sol_new=sol_current; end end end t=t.*a; end

disp('最优解为:') sol_best

disp('物品总价值等于:') val=-E_best; disp(val)

disp('背包中物品重量是:') disp(sol_best * d)


相关内容

  • 模拟退火与遗传算法
  • 在工程实践中,经常会接触到一些比较"新颖"的算法或理论,比如模拟退火,遗传算法,禁忌搜索,神经网络等.这些算法或理论都有一些共同的特性(比如模拟自然过-程),通称为"智能算法".它们在解决一些复杂的工程问题时大有用武之地. 这些算法都有什么含义?首先给出个局部 ...

  • 模拟退火算法
  • 一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法.爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解. 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解.如图1所示:假设C ...

  • 利用模拟退火算法求大气压强公式_许小勇
  • 第21卷第2期2007年3月甘肃联合大学学报(自然科学版) Journal o f Gansu Lia nhe U niver sity (Na tur al Science s ) V o l. 21No. 2 M ar. 2007 文章编号:1672-691X (2007) 02-0039-03 ...

  • 基于多目标规划的车辆路径问题及其算法优化
  • 基于多目标规划的车辆路径问题及 其算法优化 摘要:针对带时间窗的车辆路径问题,通过引入模糊层次分析法,首先建立了考虑多目标的全面性的数学模型,然后运用了基于改进型的模拟退火算法,采取实时优化的求解策略,最后通过仿真实验进行计算.由计算结果可以得出本文设计的改进型模拟退火算法运算速度快.计算效率高等特 ...

  • 旅行商问题_TSP_的几种求解方法
  • 第23卷 第08期 文章编号:1006-9348(2006) 08-0153-05 计 算 机 仿 真 2006年08月 旅行商问题(TSP) 的几种求解方法 田贵超, 黎明, 韦雪洁 (南昌航空工业学院测试技术与控制工程系, 江西南昌330034) 摘要:旅行商问题(TSP) 是组合优化领域里的一 ...

  • 基于单纯形-模拟退火算法的多阻尼控制器协调设计
  • 广东水利电力职业技术学院学报 第!卷第!期9::;年 =.>#$%/.>'&,?(./4%1/?&+1&..%1&+ 5#(6!78#6!@./69::; 基于单纯形 A模 拟退火算法的多阻尼控制器协调设计 周保荣 ( 96天津大学电气自动化学院,天津7B ...

  • 禁忌搜索算法求解旅行商问题研究
  • 第!"卷第#期西南师范大学学报(自然科学版)!$$!年%月 &'()!"*')#+',-./('01',234562738./*'-9/(:.8;5-682 文章编号:>$$$?@">(!$$!)$#$#@>$? 禁忌搜索算法求解旅行商问题研究 ...

  • 新技术讲座论文
  • 智能控制中蚁群算法的研究及展望 姓名:李妍 学号:040930503 班级:0309102 摘要:蚁群算法是一种新型的模拟进化算法,研究表明该算法具有很好的并行性和鲁棒性等优良性质,在离散的组合优化问题中实验,取得了良好的效果.本文阐述了蚁群算法的原理,对目前蚁群算法的研究进展情况进行了分析,介绍了 ...

  • 一种矩形件优化排样综合算法
  • 第31卷第6期 2003年 6月 华 中 科 技 大 学 学 报(自然科学版) Vol.31 No.6 J.HuazhongUniv.ofSci.&Tech.(NatureScienceEdition) Jun. 2003 一种矩形件优化排样综合算法 王华昌 陶献伟 李志刚 (华中科技大学塑 ...