matlab用模拟退火法求函数f(x,y)=sin(xy)+x^2+y^2的最小值。

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-09-11
试用模拟退火法求函数f(x,y)=sin(xy)+x^2+y^2的最小值。

%使用模拟退火法求函数f(x,y)=sin(x*y)+x^2+y^2的最小值
format long
XMAX=4; %搜索的最大区间
YMAX=4; %搜索的最大区间
MarkovLength=10000; %马可夫链长度
DecayScale=0.95; %衰减参数0.95
StepFactor=0.02; %步长因子
Temperature=100; %初始温度
Tolerance=1e-8; %容差
AcceptPoints=0.0; %Metropolis过程中总接受点
PreX=-XMAX*rand; %初始的搜索值
PreY=-YMAX*rand; %初始的搜索值
PreBestX=PreX; %上一个最优解
PreBestY=PreY; %上一个最优解
BestX=PreX; %最终解
BestY=PreY; %最终解
while(1)
Temperature=Temperature*DecayScale; %每迭代一次退火一次(降温),直到满足迭代条件为止
AcceptPoints=0.0;
%在当前温度下迭代(即MARKOV链长度)次
for i=0:1:MarkovLength
while(1)
NextX=PreX+StepFactor*XMAX*(rand-0.5); %在初始点附近随机选下一点
NextY=PreY+StepFactor*YMAX*(rand-0.5); %在初始点附近随机选下一点
%判断新产生的点是否在规定的最大搜索区间内,若在,则退出循环,不在,继续循环,直到新产生的点在规定的最大搜索区间内
if((NextX>=-XMAX && NextX=-YMAX && NextY<=YMAX))
break %退出循环

end
end
%判断新产生点与原来最优点哪个更优
if(minfunction(BestX,BestY)>minfunction(NextX,NextY))
PreBestX=BestX; %保留上一个最优解
PreBestY=BestY;
BestX=NextX; %新的最优解
BestY=NextY;
end
%接受新产生的点为下一迭代的开始点
if(minfunction(PreX,PreY)-minfunction(NextX,NextY)>0)
PreX=NextX;
PreY=NextY;
AcceptPoints=AcceptPoints+1;
else
change=-1*(minfunction(NextX,NextY)-minfunction(PreX,PreY))/Temperature;
%不接受,保存原解
if(exp(change)>rand)
PreX=NextX;
PreY=NextY;
AcceptPoints=AcceptPoints+1;
end
end
end
%结束条件为根据上一个最优解与最新的一个最优解的之差小于某个容差
if(~(abs(minfunction(BestX,BestY)-minfunction(PreBestX,PreBestY))>Tolerance))
break

end
end
a=BestX
b=BestY
c=minfunction(BestX,BestY)

%%%%%%%%%%%%%子程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function minf=minfunction(x,y)
minf=sin(x*y)+x*x+y*y;%求目标函数的值为0.

二元问题可以用matlab自带函数fminunc或fminsearch解决的!

能解释一下为什么要用模拟退火法吗?

这个函数的最小值直接观察就能看出来在x=y=0处,或者用fminunc也可以求解:
x=fminunc(@(x)sin(x(1)*x(2))+x(1)^2+x(2)^2,[0 0])

当然,用模拟退火算法也很简单,换一下函数即可:
x=simulannealbnd(@(x)sin(x(1)*x(2))+x(1)^2+x(2)^2,[0 0])

  • 遗传算法、数值算法、爬山算法、模拟退火 各自的优缺点
    答:遗传算法:其优点是能很好地处理约束,跳出局部最优,最终得到全局最优解。缺点是收敛速度慢,局部搜索能力弱,运行时间长,容易受到参数的影响。模拟退火:具有局部搜索能力强、运行时间短的优点。缺点是全局搜索能力差,容易受到参数的影响。爬山算法:显然爬山算法简单、效率高,但在处理多约束大规模问题时...
  • 求一个模拟退火算法优化BP神经网络的一个程序(MATLAB)
    答:“模拟退火”的原理也和金属退火的原理近似:我们将热力学的理论套用到统计学上,将搜寻空间内每一点想像成空气内的分子;分子的能量,就是它本身的动能;而搜寻空间内的每一点,也像空气分子一样带有“能量”,以表示该点对命题的合适程度。算法先以搜寻空间内一个任意点作起始:每一步先选择一个“...
  • matlab运行2124个数据用模拟退火法大概要多久啊,a=0.99
    答:据我所知,经典模拟退火法的运行时间与你的数据长度关系似乎不是很大。影响最大的应该还是初始温度,终止温度的设置,以及退火关系式。这三个参数一定,你的搜索次数也就定了,它是采用了随机搜索的思想,所以序列长度对计算速度应该影响甚微。建议你还是检查一下程序吧,虽然正确性可能没问题,但是可能还...
  • matlab整数规划问题
    答:3*i*j-2*j^2;if (s-Maxf)==0 k=k+1;z1(k)=i;z2(k)=j;else if s>Maxf Maxf=s;z1(1)=i;z2(1)=j;k=1;end end end end end Str=strcat('最大值MAX为:',num2str(Maxf));disp(Str);x1=z1(1:k)x2=z2(1:k)我已经验证过了~OK的哈!
  • matlab优化求解怎么确定一个好的初始值
    答:这个问题,现在学术界都没有完美的解决,你要是解决了,估计能发好多篇IEEE Trans 了。如果是求近似解,可以采用元启发的方法。如模拟退火之类的。。。
  • MATLAB最优化工具箱的模拟退火算法,怎么把自变量设置为整数变量_百度知 ...
    答:Matlab嵌入的模拟退火算法 版本 2010 还不能求解 整数变量优化问题,不确定更高版本是否可以求解。
  • 2011数学建模国赛B题 求解答
    答:表示警车初始停靠点到各道路的最短距离 表示整个区域的总道路长度 表示不能在3分钟内到达的区域的道路的长度 表示非重点部位的警车在3分钟内不能到达现场的比例 表示三分钟内能从接警位置赶到事发现场的最大距离是 表示整个区域总的离散点个数 表示第 区内的节点个数 表示区内调整函数 表示模拟退火的时间,表征温...
  • matlab解0/1规划
    答:首先0/1规划是一个NP问题,特别是涉及到非线性约束等条件,一般找不到很好的方法。如果要求解当然是用“穷举法是可行了”,但是还得看你的问题规模。其次可以考虑一些人工智能算法,例如遗传算法,模拟退火算法等 至于你说的“混合组问题”,就我认为matlab除了解决一般齐次矩阵比较有效,好像只要条件以复杂...
  • 精通MATLAB最优化计算的实 例目录
    答:例6-10 Wolfe-Powell法求解极值实例。 119例6-11 fminbnd函数求解极值实例1。 121例6-12 fminbnd函数求解极值实例2。 122例6-13 fminbnd函数求解极值实例3。 123例6-14 fminbnd函数求解极值实例4。 123例6-15 fminbnd函数求解极值实例5。 124例6-16 fminsearch函数求解极值实例。 125例6-17 改进的fmin...
  • 请问你对模拟退火算法熟悉吗?
    答:如果你主要想担任模型构建的任务的话,建议你看数学建模的书,就是那些有解释很多数学模型的书,你们学校里面图书馆按理说应该会有。还有就是了解多一点不同的数学方法,最好是数学建模里面常用到的那些,还有一些比较新的也可以了解下(比如说模拟退火法,今年的B题就可以用这个方法做)。每年全国数学...