遗传算法模拟退火matlab编程.doc_第1页
遗传算法模拟退火matlab编程.doc_第2页
遗传算法模拟退火matlab编程.doc_第3页
遗传算法模拟退火matlab编程.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单钻头退火算法matlab编程clear clc a = 0.999; % 温度衰减函数的参数 t0 = 97; tf = 3; t = t0; Markov_length = 2800; % Markov链长度 coordinates = ; coordinates(:,1) = ; amount = size(coordinates,1); % 城市的数目 % 通过向量化的方法计算距离矩阵 dist_matrix = zeros(amount, amount); coor_x_tmp1 = coordinates(:,1) * ones(1,amount); coor_x_tmp2 = coor_x_tmp1; coor_y_tmp1 = coordinates(:,2) * ones(1,amount); coor_y_tmp2 = coor_y_tmp1; dist_matrix = sqrt(coor_x_tmp1-coor_x_tmp2).2 + . (coor_y_tmp1-coor_y_tmp2).2); sol_new = 1:amount; % 产生初始解% sol_new是每次产生的新解;sol_current是当前解;sol_best是冷却中的最好解; E_current = inf;E_best = inf; % E_current是当前解对应的回路距离;% E_new是新解的回路距离;% E_best是最优解的 sol_current = sol_new; sol_best = sol_new; p = 1; while t=tf for r=1:Markov_length % Markov链长度 % 产生随机扰动 if (rand 0.5) % 随机决定是进行两交换还是三交换 % 两交换 ind1 = 0; ind2 = 0; while (ind1 = ind2) ind1 = ceil(rand.*amount); ind2 = ceil(rand.*amount); end tmp1 = sol_new(ind1); sol_new(ind1) = sol_new(ind2); sol_new(ind2) = tmp1; else % 三交换 ind1 = 0; ind2 = 0; ind3 = 0; while (ind1 = ind2) | (ind1 = ind3) . | (ind2 = ind3) | (abs(ind1-ind2) = 1) ind1 = ceil(rand.*amount); ind2 = ceil(rand.*amount); ind3 = ceil(rand.*amount); end tmp1 = ind1;tmp2 = ind2;tmp3 = ind3; % 确保ind1 ind2 ind3 if (ind1 ind2) & (ind2 ind3) ; elseif (ind1 ind3) & (ind3 ind2) ind2 = tmp3;ind3 = tmp2; elseif (ind2 ind1) & (ind1 ind3) ind1 = tmp2;ind2 = tmp1; elseif (ind2 ind3) & (ind3 ind1) ind1 = tmp2;ind2 = tmp3; ind3 = tmp1; elseif (ind3 ind1) & (ind1 ind2) ind1 = tmp3;ind2 = tmp1; ind3 = tmp2; elseif (ind3 ind2) & (ind2 ind1) ind1 = tmp3;ind2 = tmp2; ind3 = tmp1; end tmplist1 = sol_new(ind1+1):(ind2-1); sol_new(ind1+1):(ind1+ind3-ind2+1) = . sol_new(ind2):(ind3); sol_new(ind1+ind3-ind2+2):ind3) = . tmplist1; end %检查是否满足约束 % 计算目标函数值(即内能) E_new = 0; for i = 1 : (amount-1) E_new = E_new + . dist_matrix(sol_new(i),sol_new(i+1); end % 再算上从最后一个城市到第一个城市的距离 %E_new = E_new + . %dist_matrix(sol_new(amount),sol_new(1); if E_new E_current E_current = E_new; sol_current = sol_new; if E_new E_best% 把冷却过程中最好的解保存下来 E_best = E_new; sol_best = sol_new; end else % 若新解的目标函数值小于当前解的, % 则仅以一定概率接受新解 if rand exp(-(E_new-E_current)./t) E_current = E_new; sol_current = sol_new; else sol_new = sol_current; end end end t=t.*a; % 控制参数t(温度)减少为原来的a倍 end disp(最优解为:) disp(sol_best) disp(最短距离:) disp(E_best) figure() set(gcf,Name,monituihuo-sol_best,Color,r) N=length(sol_best); scatter(coordinates(:,1),coordinates(:,2),50,filled); hold on plot(coordinates(sol_best(1),1),coordinates(sol_best(N),1),coordinates(sol_best(1),2),coordinates(sol_best(N),2) set(gca,Color,g) hold on for

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论