模拟退火算法程序

一:谁能给我举一个模拟退火算法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神经网络的一个程序(MATLAB) 20分

“模拟退火”算法是源于对热力学中退火过程的模拟,在某一给定初温下,通过缓慢下降温度参数,使算法能够在多项式时间内给出一个近似最优解。退火与冶金学上的‘退火’相似,而与冶金学的淬火有很大区别,前者是温度缓慢下降,后者是温度迅速下降。

“模拟退火”的原理也和金属退火的原理近似:我们将热力学的理论套用到统计学上,将搜寻空间内每一点想像成空气内的分子;分子的能量,就是它本身的动能;而搜寻空间内的每一点,也像空气分子一样带有“能量”,以表示该点对命题的合适程度。算法先以搜寻空间内一个任意点作起始:每一步先选择一个“邻居”,然后再计算从现有位置到达“邻居”的概率。

这个算法已经很多人做过,可以优化BP神经网络初始权值。附件是解决TSP问题的matlab代码,可供参考。看懂了就可以自己编程与bp代码结合。

三:matlab 模拟退火算法代码

我觉得是你中间有中文字符

四:模拟退火算法matlab怎样找到下一个新解

我刚刚回答了一个额。

从代码角度来说,就是2个循环,一个总温度外循环(足够大,并逐渐减小),另一个内部循环(使其达到该特定温度下的平衡,怎么算平衡自己定义的)。很多书都说外部的总温度外循环,却忽略了内部循环,内部循环值应该多大,我也很模糊。

五:matlab 模拟退火算法求解TSP问题源代码

我这有飞机巡航的代码,本质上和旅行商问题一样,代码如下(非原创):

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 temprand(1) S0=[S0(1:c1-1),S0(c2:-1:c1),S0(c2+1:102)]; Sum=Sum+df; end T=T*at; if T>

六:MATLAB最优化工具箱的模拟退火算法,怎么把自变量设置为整数变量

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,若km,则将(w1,w2,…,wm,wm+1,…,wk,…,wn)变为:(wm,wm-1,…,w1,wm+1,…,wk-1,wn,wn-1,…,wk).上述变换方法可简单说成是“逆转中间或者逆转两端”。也可以采用其他的变换方法,有些变换有独特的优越性,有时也将它们交替使用,得到一种更好方法。代价函数差 设将(w1,w2,……,wn)变换为(u1,u2,……,un),则代价函数差为:根据上述分析,可写出用模拟退火算法求解TSP问题的伪程序:Procedure TSPSA:begininit-of-T; { T为初始温度}S={1,……,n}; {S为初始值}termination=false;while termination=falsebeginfor i=1 to L dobegingenerate(S′form S); { 从当前回路S产生新回路S′}Δt:=f(S′))-f(S);{f(S)为路径总长}IF(Δt<0) OR (EXP(-Δt/T)>Random-of-[0,1])S=S′;IF the-halt-condition-is-TRUE THENtermination=true;End;T_lower;End;End模拟退火算法的应用很广泛,可以较高的效率求解最大截问题(Max Cut Problem)、0-1背包问题(Zero One Knapsack Problem)、图着色问题(Graph Colouring Problem)、调度问题(Scheduling Problem)等等。 模拟退火算法的应用很广泛,可以求解NP完全问题,但其参数难以控制,其主要问题有以下三点:⑴ 温度T的初始值设置问题。温度T的初始值设置是影响模拟退火算法全局搜索性能的重要因素之一、初始温度高,则搜索到全局最优解的可能性大,但因此要花费大量的计算时间;反之,则可节约计算时间,但全局搜索性能可能受到影响。实际应用过程中,初始温度一般需要依据实验结果进行若干次调整。⑵ 退火速度问题。模拟退火算法的全局搜索性能也与退火速度密切相关。一般来说,同一温度下的“充分”搜索(退火)是相当必要的,但这需要计算时间。实际应用中,要针对具体问题的性质和特征设置合理的退火平衡条件。⑶ 温度管理问题。温度管理问题也是模拟退火算法难以处理的问题之一。实际应用中,由于必须考虑计算复杂度的切实可行性等问题,常采用如下所示的降温方式:T(t+1)=k×T(t)式中k为正的略小于1.00的常数,t为降温的次数 优点:计算过程简单,通用,鲁棒性强,适用于并行处理,可用于求解复......余下全文>>

八:怎样将模拟退火算法工具箱添加到matlab中

其实原理很简单,就是一种概率性的搜索算法,只是一个小程序,所以可以自己编写,我目前就是用自己编写的。目前我认为几个关键点就是退火温降一定要缓慢,也就是迭代次数尽量多,所以在温度变化函数里面的参数要设置可能。另外,同温条件下可以多寻找一些新生个体。最后,发挥matlab的并行运算功能,也就是对退火算法进行群体优化,这样,相对于单一个体来讲,具有更强大的全局搜抚能力。你可以看下陈华根发表的《模拟退火算法机理研究》,希望对你有所帮助。纯属个人经验,不足之处欢迎指正

九:matlab用模拟退火算法解决问题 80分

还需要吗 可以实现的

十:基于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);

扫一扫手机访问

发表评论