上海网站建设公司排名,seo和sem哪个工资高,青岛网站建设团队,wordpress传输失败模拟退火算法#xff08;SA#xff09;
模拟退火是很经典的算法#xff0c;针对大多数模型、应用#xff0c;受限于SA运行时间长等特点#xff0c;已不能直接应用SA#xff0c;这样的算法值得去改进#xff0c;我试图找一些缩短运行时间的方法#xff0c;已经在测试SA
模拟退火是很经典的算法针对大多数模型、应用受限于SA运行时间长等特点已不能直接应用SA这样的算法值得去改进我试图找一些缩短运行时间的方法已经在测试这里是模拟退火第一篇文章介绍模拟退火给出基础代码经过多次测试可直接运行。 参考了https://blog.csdn.net/qq_34554039/article/details/90294046该文介绍了模拟退火
1.简介
模拟退火算法的思想 借鉴于固体的退火过程当固体的温度很高时内能比较大固体内的粒子处于快速无序运动状态当温度慢慢降低固体的内能减小粒子逐渐趋于有序最终固体处于常温状态内能达到最小此时粒子最为稳定。 思路 一开始为算法设定一个较高的值T模拟温度算法不稳定选择当前较差解的概率很大随着T的减小算法趋于稳定选择较差解的概率减小最后T降至终止迭代的条件得到近似最优解。
2.算法步骤
模拟退火算法有很多文章进行了介绍这里不赘述算法思想也简单看流程图一般就很清晰了。 其中
代码一个求函数极值的程序
运行方式全部复制保存到一个m文件中直接运行
function main_fcn_extreme_value()T1000;%初始化温度值
T_min1e-12;%设置温度下界
alpha0.98;%温度的下降率
k1000;%迭代次数解空间的大小xgetX;%随机得到初始解
while(TT_min)for I1:kfxFx(x);x_newgetX;if(x_new-2x_new2)fx_newFx(x_new);deltafx_new-fx;if(delta0)xx_new(2*rand-1);elsePgetP(delta,T);if(Prand)xx_new;endendend
end
TT*alpha;
end
disp(最优解为)
disp(x)%%getX.m
function xgetX
x4*rand-2;
end%%Fx.m
function fxFx(x)
fx(x-2)^24;
end%%getP.m
function pgetP(c,t)
pexp(-c/t);
end
end