一:谁能给我举一个模拟退火算法MATLAB源代码的简单例子 15分
clear
clc
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];
restriction = 46;
num = 12;
sol_new = ones(1,num); % 生成初始解
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.*num);
sol_new(1,tmp)=~sol_new(1,tmp);
%检查是否满足约束
while 1
q=(sol_new*d <= restriction);
if ~q
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_current=E_new; sol_current=sol_new; if E_new % 把冷却过程中最好的解保存下来 E_best=E_new; sol_best=sol_new; end else if rand E_current=E_new; sol_current=sol_new; else 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)...余下全文>> “模拟退火”算法是源于对热力学中退火过程的模拟,在某一给定初温下,通过缓慢下降温度参数,使算法能够在多项式时间内给出一个近似最优解。退火与冶金学上的‘退火’相似,而与冶金学的淬火有很大区别,前者是温度缓慢下降,后者是温度迅速下降。 “模拟退火”的原理也和金属退火的原理近似:我们将热力学的理论套用到统计学上,将搜寻空间内每一点想像成空气内的分子;分子的能量,就是它本身的动能;而搜寻空间内的每一点,也像空气分子一样带有“能量”,以表示该点对命题的合适程度。算法先以搜寻空间内一个任意点作起始:每一步先选择一个“邻居”,然后再计算从现有位置到达“邻居”的概率。 这个算法已经很多人做过,可以优化BP神经网络初始权值。附件是解决TSP问题的matlab代码,可供参考。看懂了就可以自己编程与bp代码结合。 我觉得是你中间有中文字符 我刚刚回答了一个额。 从代码角度来说,就是2个循环,一个总温度外循环(足够大,并逐渐减小),另一个内部循环(使其达到该特定温度下的平衡,怎么算平衡自己定义的)。很多书都说外部的总温度外循环,却忽略了内部循环,内部循环值应该多大,我也很模糊。 我这有飞机巡航的代码,本质上和旅行商问题一样,代码如下(非原创): function mySim()disp('模拟退火求巡航路径');data=xlsread('飞机巡航数据.xlsx','sheet1','C4:J28');x=data(:,1:2:8);x=x(:);y=data(:,2:2:8);y=y(:);si=[x y]; d1=[70,40]; si=[d1;si;d1]; sj=si;sj=sj*pi/180; %经纬度化为弧度制d=zeros(102); %距离矩阵dfor i=1:101 for j=i+1:102 temp=cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2)); d(i,j)=6370*acos(temp); endendd=d+d'; %生成距离矩阵S0=[]; %用于存放最优路径Sum=inf; %用于存放最优解rand('state',sum(clock)); %设随机种子for j=1:1000 S=[1 1+randperm(100),102]; %randperm(n)用于随机生成1到n的一个排列 temp=0; for i=1:101 temp=temp+d(S(i),S(i+1)); end if temp Matlab嵌入的模拟退火算法 版本 2010 还不能求解 整数变量优化问题,不确定更高版本是否可以求解。 作为模拟退火算法应用,讨论旅行商问题(Travelling Salesman Problem,简记为TSP):设有n个城市,用数码1,…,n代表。城市i和城市j之间的距离为d(i,j) i,j=1,…,n.TSP问题是要找遍访每个域市恰好一次的一条回路,且其路径总长度为最短.。求解TSP的模拟退火算法模型可描述如下:解空间 解空间S是遍访每个城市恰好一次的所有回路,是{1,……,n}的所有循环排列的集合,S中的成员记为(w1,w2,……,wn),并记wn+1= w1。初始解可选为(1,……,n)目标函数 此时的目标函数即为访问所有城市的路径总长度或称为代价函数:我们要求此代价函数的最小值。新解的产生 随机产生1和n之间的两相异数k和m,若k 其实原理很简单,就是一种概率性的搜索算法,只是一个小程序,所以可以自己编写,我目前就是用自己编写的。目前我认为几个关键点就是退火温降一定要缓慢,也就是迭代次数尽量多,所以在温度变化函数里面的参数要设置可能。另外,同温条件下可以多寻找一些新生个体。最后,发挥matlab的并行运算功能,也就是对退火算法进行群体优化,这样,相对于单一个体来讲,具有更强大的全局搜抚能力。你可以看下陈华根发表的《模拟退火算法机理研究》,希望对你有所帮助。纯属个人经验,不足之处欢迎指正 还需要吗 可以实现的 function [xo,fo] = Opt_Simu(f,x0,l,u,kmax,q,TolFun) % 模拟退火算法求函数 f(x)的最小值点, 且 l <= x <= u % f为待求函数,x0为初值点,l,u分别为搜索区间的上下限,kmax为最大迭代次数 % q为退火因子,TolFun为函数容许误差 %%%%算法第一步根据输入变量数,将某些量设为缺省值 if nargin < 7 TolFun = 1e-8; end if nargin < 6 q = 1; end if nargin < 5 kmax = 100; end %%%%算法第二步,求解一些基本变量 N = length(x0); %自变量维数 x = x0; fx = feval(f,x); %函数在初始点x0处的函数值 xo = x; fo = fx; %%%%%算法第三步,进行迭代计算,找出近似全局最小点 for k =0:kmax Ti = (k/kmax)^q; mu = 10^(Ti*100); % 计算mu dx = Mu_Inv(2*rand(size(x))-1,mu).*(u - l);%步长dx x1 = x + dx; %下一个估计点 x1 = (x1 < l).*l +(l <= x1).*(x1 <= u).*x1 +(u < x1).*u; %将x1限定在区间[l,u]上 fx1 = feval(f,x1); df = fx1- fx; if df < 0||rand < exp(-Ti*df/(abs(fx) + eps)/TolFun) %如果fx1 x = x1; fx = fx1; end if fx < fo xo = x; fo = fx1; end end function x = Mu_Inv(y,mu) x = (((1+mu).^abs(y)- 1)/mu).*sign(y);二:求一个模拟退火算法优化BP神经网络的一个程序(MATLAB) 20分
三:matlab 模拟退火算法代码
四:模拟退火算法matlab怎样找到下一个新解
五:matlab 模拟退火算法求解TSP问题源代码
六:MATLAB最优化工具箱的模拟退火算法,怎么把自变量设置为整数变量
七:退火算法的应用领域及示例
八:怎样将模拟退火算法工具箱添加到matlab中
九:matlab用模拟退火算法解决问题 80分
十:基于matlab的模拟退火法