模拟退火学习

news/2024/10/22 16:19:40

模拟退火,很奇妙!

原理

现在要求答案 \(f(S)\) 的最值。(假设要求最小值,函数为实值函数。)
设有一个 \(S'\) 是与 \(S\) 接近的状态。不妨令 \(\Delta=f(S')-f(S)\)。那么更新答案让 \(S\) 变成 \(S'\) 的概率为:

\[P(\Delta)=\left\{\begin{matrix}1&\Delta\le0\\e^{-\frac\Delta T}&\Delta> 0\end{matrix}\right. \]

其中温度为 \(T\),让 \(T\) 逐渐减小,即是 \(T\leftarrow T\times d\),直到 \(T\le T_k\)
若要求最大值,将公式中的 \(-\Delta\) 改成 \(\Delta\) 即可。
通常取 \(T=10^9\)\(T_k=10^{-9}\)\(d=0.999\)

代码

随机数

inline double rnd(double l,double r){return (double)rand()/RAND_MAX*(r-l)+l;
}
inline int rnd(int l,int r){return rand()%(r-l+1)+l;
}

模退多次

void work(){srand(time(0));for(;(double)clock()/CLOCKS_PER_SEC<limit;)sa(T,Tk,d);
}

接下来是不同的模退类型。
小技巧:\(P(\Delta)=P(e^{-\frac\Delta T}>rand(0,1))\)。其中 \(rand(0,1)\) 为在 \(0,1\) 范围内随机生成的实数。

模退 \(S\) 为实数

double sa(double T,double Tk,double d){double pos=rnd(-A,A),val=calc(pos),ans=val;for(;T>Tk;T*=d){double nwpos=rnd(pos-T,pos+T),nwval=calc(nwpos),delta=nwval-val;ans=min(ans,nwval);if(exp(-delta/T)>rnd(0,1))pos=nwpos,val+=nwval;}return ans;
}

模退 \(S\) 为向量(点)

double sa(double T,double Tk,double d){Point pos=Point(rnd(-A,A),rnd(-A,A));double val=calc(pos),ans=val;for(;T>Tk;T*=d){Point nwpos=Point(rnd(pos.x-T,pos.x+T),rnd(pos.y-T,pos.y+T));double nwval=calc(nwpos),delta=nwval-val;ans=min(ans,nwval);if(exp(-delta/T)>rnd(0,1))pos=nwpos,val+=nwval;}return ans;
}

模退 \(S\) 为排列(排列为 \(1\)\(n\) 的排列)

double sa(double T,double Tk,double d){for(int i=1;i<=n;i++)p[i]=i;random_shuffle(p+1,p+n+1);double val=calc(),ans=val;for(;T>Tk;T*=d){int pos1=rnd(1,n),pos2=(1,n);swap(p[pos1],p[pos2]);double nwval=calc(),delta=nwval-val;ans=min(ans,nwval);if(exp(-delta/T)>rnd(0,1))val+=nwval;else swap(p[pos1],p[pos2]);//相当于没有操作}return ans;
}

模退 \(S\) 为集合(集合元素为 \(1\)\(n\) 的整数)

double sa(double T,double Tk,double d){for(int i=1;i<=n;i++)v[i]=rnd(0,1);double val=calc(),ans=val;for(;T>Tk;T*=d){int pos=rnd(1,n);v[pos]^=1;double nwval=calc(),delta=nwval-val;ans=min(ans,nwval);if(exp(-delta/T)>rnd(0,1))val+=nwval;else v[pos]^=1;}return ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74679.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

应对复杂架构下的监控挑战?统一运维可观测能力是关键!

在全球数字化变革背景下,企业需适应数字经济与市场变化,进行系统性数字化转型。在“十四五”规划指导下,企业纷纷探求数字化应用之路,大数据、云计算、人工智能、区块链等技术成了热门话题,其中云运维备受瞩目。 企业在数字化转型中难免会碰到云上系统规划、运维体系建设、…

2024年全国大学生信息安全竞赛安徽省赛-WP

2024年全国大学生信息安全竞赛安徽省赛-WP没有re,不会......0X01 初赛(CTF) MISC 图像损坏 损坏的GIF文件,补上缺失的文件头 ​​ 用puzz拆分GIF,得到多个图片 ​​ 每张图对应六十四挂幻方配数图,得到 Q1RGe2FiY19kZWZfZ30 ​​ ​​ base64解码得到 CTF{abc_def_g} ​​…

保姆级 | MySQL的安装配置教程(非常详细)

一、下载Mysql 从官网下载MySQL,这里我选用的是Mysql8.0.34版本二、安装Mysql 下载完成后直接双击进行安装,打开后的页面如下所示:“Developer Default”是开发者默认 “Server only”仅作为服务器安装 “Clientonly”仅作为客户端安装 “Full”是完整安装 “Custom”是自定…

【架构与设计】常见微服务分层架构的区别和落地实践

作者:京东科技 康志兴前言 从强调内外隔离的六边形架构,逐渐发展衍生出的层层递进、注重领域模型的洋葱架构,再到和DDD完美契合的整洁架构。架构风格的不断演进,其实就是为了适应软件需求越来越复杂的特点。 可以看到,越现代的架构风格越倾向于清晰的职责定位,且让领域模…

2024-10-21

文本属性 text-align属性控制文本的水平对齐方式text-decoration属性控制文本下划线text-transform属性控制文本的大小写text-indent属性控制文本的首行缩进示例实操点击查看代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="…

Amazon Q Developer 实践:零基础创建贪吃蛇游戏

本文探讨了如何使用 Amazon Q Developer 根据结构化的提示词,直接生成一个贪吃蛇游戏原型,并剖析了其背后人工智能的思考和迭代完善过程,展示了人工智能能快速进行游戏原型创作的巨大潜力。 原文出处来自作者于 2024 年 9 月在 community.aws 发表的技术文章: “From Conce…

GBU608-ASEMI室内空调机专用GBU608

GBU608-ASEMI室内空调机专用GBU608编辑:ll GBU608-ASEMI室内空调机专用GBU608 型号:GBU608 品牌:ASEMI 封装:GBU-4 安装方式:直插 批号:2024+ 现货:50000+ 正向电流(Id):6A 反向耐压(VRRM):800V 正向浪涌电流:175A 正向电压(VF):1.10V 引脚数量:4 芯片个数:…