试用模拟退火法求函数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<=XMAX && NextY>=-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.
温馨提示:内容为网友见解,仅供参考
无其他回答

模拟退火(Simulated Annealing)
让我们以最小化二元函数为例,探讨模拟退火算法解决问题的流程。假设函数为 f(x, y) = x^2 + y^2,最小值在点 (0, 0) 处。算法的步骤包括初始化解、温度、冷却率和终止温度,随后进行迭代,生成新解,计算能量变化,并根据新解接受概率进行决策,更新温度。当温度降至预设值时,迭代停止。在...

遗传算法--GA
例如:需要求解z=x^2+y^2的最大值,x={1,5,3,8},y={5,4,0,6} 用六位二进制数表示由x,y组成的解,例如:001100 表示x=1,y=4 001100 称为一条基因序列,表示的是该问题的一种解决 方案 种群是包含多个基因序列(解决方案\/个体)的集合 适应度函数是啥,有什么作用: 适应度函数可以理解成“ 游戏 规...

曲面生成和交叉处理
F=f(x,y,z),(x,y,z)∈Ω,F∈R 求空间点(x0,y0,z0)使得(不失一般性,假设求最大值) F=f(x0,y0,z0)=maxf(x,y,z) 其中(x,y,z)为自变量,Ω是(x,y,z)的定义域,x,y,z可以是数值,也可以是符号,F为实数,是解的优劣程度或适应度的一种度量,f为解空间点(x,y,z)∈Ω到实数域F ∈ ...

搜索技术
称启发函数是可采纳的,如果h( n ) 满足 h( n ) ≤ h * ( n ) ,其中 h * ( n )是从当前节点 n到达目标的最低真实代价 ,即h( n )的估值永远小于真实耗散值;因为f ( n ) = g ( n ) + h ( n ),且g(n)为已知常数,所以 f(n)永远不会高估经过结点n的解的实际代价 ,所以是最优解。

2011数学建模国赛B题 求解答
这里的f(X)称为向量变量的实值函数。设有L个向量变量的实值函数:h1(X), h2(X), …,hL(X)给定X后,又可以把这L个实值函数看做是L维空间RL中的一个向量h(X)的L个分量,记为:h(X)=[ h1(X), h2(X), …,hL(X)]T。按照这种表示方法,具有L个等式约束的求极小问题可记为: (1-1)其中s.t是...

在C语言中,什么是迭代法?
一般可以做如下定义:对于给定的线性方程组x=Bx+f(这里的x、B、f同为矩阵,任意线性方程组都可以变换成此形式),用公式x(k+1)=Bx(k)+f(括号中为上标,代表迭代k次得到的x,初始时k=0)逐步带入求近似解的方法称为迭代法(或称一阶定常迭代法)。如果k趋向无穷大时limx(k)存在,记为x*,称此迭代法收敛。

sko库中的几种优化算法
GA.run()print(f"遗传算法最小值: X = {A_GA_x}, Y = {A_GA_y}")2. 粒子群算法from sko.PSO import PSOA_pso = PSO(func=pin_func, dim=2, pop=400, max_iter=200, w=1, c1=2, c2=2)A_pos_x, A_pos_y = A_pso.run()print(f"粒子群算法解: x = {A_pos_x}...

用遗传算法求解配送路线优化问题时,交叉率和变异率怎么设定?
STEP6 令pop(k+1)=mutpop,对pop(k+1)计算f (t ),找出使函数f (t )最小的染色体i和这个函数值f,如果f < f ,则令i = i, f =f, t = d(t ),k = k+1, 返回 STEP2。 出于表示简单,计算机处理方便的目的,对于VRP问题的遗传算法编码通常都采用自然数编码。上述数学模型的解向量可编成一条长度...

y=max(x1的平方+x2的平方)(百度里无法记忆函数) 限定条件:-10≤x1≤10...
FVAL = -197.0217 由于选择的函数最大值点位于边界点,结果通常不好,建议用这样的函数测试:max y=-(x1^2+x2^2)+3, 10≤x1≤10, -10≤x2≤10,最大值位于0,0点,为3.最后,简要解释下上述ga函数 [X,FVAL]=GA(FITNESSFCN,NVARS,A,b,Aeq,beq,LB,UB,NONLCON,options)FITNESSFCN就是...

两函数相加减
一般来说不成立,除非f1,f2为最小值时,x1=x2,y1=y2

相似回答