问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

模拟退火法衰减参数什么意思

发布网友 发布时间:2022-12-23 04:15

我来回答

1个回答

热心网友 时间:2023-06-27 20:54

1. 模拟退火原理
原理

模拟退火:是一种随机算法,用于解决最优化问题。要求求解的问题对应的函数要有连续性。
模拟退火算法是模拟物理过程,有如下参数:
(1)温度t:即步长。分为初始温度和终止温度,对应代码中就是初始搜索范围和终止搜索的范围。

(2)衰减系数:每次搜索范围减小的比例,是(0, 1)中的一个数,可以取0.999,需要手动调节。

在每次迭代的过程中,我们在给定步长区间内随机一个新点,令dt = f(新点)-f(当前点),如果求函数极小值的话,分为两种情况:
(1)dt<0,则跳到新点;

(2)dt>0,则以一定该概率跳到该点,且dt越大,跳过去的概率越低。

跳过去的概率值可以取为 e − d t / t e^{-dt/t} e−dt/t。

模拟退火的过程可能会收敛到局部最优解,但是这个过程我们可以做多次,这样收敛到局部最优解的概率就很小了。比如达到局部最优解的概率是0.99,则我们做1000次,达到局部最优解的概率是: 0.9 9 1000 ≈ 4.3 × 1 0 − 5 0.99^{1000} \approx 4.3 \times 10^{-5} 0.991000≈4.3×10−5。

2. AcWing上的模拟退火题目
AcWing 3167. 星星还是树
问题描述

问题链接:AcWing 3167. 星星还是树
分析

本题求解的这个点是费马点,即到所有点距离和最小的点。如果是一维的,排个序找中位数即可。

可以证明,这个函数是个凸函数,具有连续性。使用模拟退火求解即可。

代码

C++
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <ctime>

#define x first
#define y second

using namespace std;

typedef pair<double, double> PDD;

const int N = 110;

int n;
PDD q[N];
double ans = 1e8;

// 返回[l, r]之间的随机小数
double rand(double l, double r) {
return (double)rand() / RAND_MAX * (r - l) + l;
}

double get_dist(PDD a, PDD b) {
double dx = a.x - b.x, dy = a.y - b.y;
return sqrt(dx * dx + dy * dy);
}

// 计算p到给定点的距离和
double calc(PDD p) {
double res = 0;
for (int i = 0; i < n; i++)
res += get_dist(p, q[i]);
ans = min(ans, res);
return res;
}

void simulate_anneal() {

PDD cur(rand(0, 10000), rand(0, 10000));
for (double t = 1e4; t > 1e-4; t *= 0.9) {
PDD np(rand(cur.x - t, cur.x + t), rand(cur.y - t, cur.y + t));
double dt = calc(np) - calc(cur);
if (exp(-dt / t) > rand(0, 1)) cur = np;
}
}

int main() {

scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%lf%lf", &q[i].x, &q[i].y);

for (int i = 0; i < 100; i++) simulate_anneal();

printf("%.0lf\n", ans);

return 0;
}
登录后复制

AcWing 2424. 保龄球
问题描述

问题链接:AcWing 2424. 保龄球
分析

本题需要求解最大值,相当于求全排列中的最大值。

每次我们可以随机交换两个轮次,计算交换前后的差距,更新答案。

代码

C++
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <ctime>

#define x first
#define y second

using namespace std;

typedef pair<int, int> PII;

const int N = 55;

int n, m; // n: 规定的轮次 m: 实际的轮次
PII q[N];
int ans;

int calc() {

int res = 0;
for (int i = 0; i < m; i++) {
res += q[i].x + q[i].y;
if (i < n) {
if (q[i].x == 10) res += q[i + 1].x + q[i + 1].y;
else if (q[i].x + q[i].y == 10)
res += q[i + 1].x;
}
}
ans = max(ans, res);
return res;
}

void simulate_anneal() {

for (double t = 1e4; t > 1e-4; t *= 0.99) {
auto a = rand() % m, b = rand() % m;
int x = calc();
swap(q[a], q[b]);
// 交换后进行的轮次 n + (q[n - 1].x == 10) 等于 实际轮次m
if (n + (q[n - 1].x == 10) == m) {
int y = calc();
int dt = y - x;
// 如果dt>0, 则不用恢复原状
if (exp(dt / t) < (double)rand() / RAND_MAX)
swap(q[a], q[b]);
} else swap(q[a], q[b]);
}
}

int main() {

cin >> n;
for (int i = 0; i < n; i++) cin >> q[i].x >> q[i].y;
if (q[n - 1].x == 10) m = n + 1, cin >> q[n].x >> q[n].y;
else m = n;

// for (int i = 0; i < 100; i++) simulate_anneal();

// 卡时写法: 卡0.1秒
while ((double)clock() / CLOCKS_PER_SEC < 0.1) simulate_anneal();

cout << ans << endl;

return 0;
}
登录后复制

AcWing 2680. 均分数据
问题描述

问题链接:AcWing 2680. 均分数据
分析

这里可以随机将这些数据放置到某个组中,为了使得收敛的速度更快,可以采用贪心的策略将n个数据放置到m个组中。

每次找到和最小的组,将该数据放到该组中。

代码

C++
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机puik什么意思 广东江南理工高级技工学校地址在哪里 广州市技师学院具体地址 广州市高级技工学校江高校区有什么专业 广州市高级技工学校学校地址 话费支付是什么意思? 2019年华为保值机型排行:P40系列保值预计如何? 鸦片战争的二号元凶:威廉·嘉道理 局域网内访问共享要密码 Win10怎么设置局域网共享密码访问 翟天临回复网友评论,“知网”事件后女友不离不弃,今能否复出? 大拇指指甲裂开,请问是什么疾病 arrive 和reach 的区别是什么? 第56号教室的奇迹读后感500字 马自达CX-5最新款多少钱能落地? 抖音最火的民谣歌曲排行榜 CAN总线新能源汽车直流充电通讯协议27930解析工具 如何用粘土做兵马俑 私人飞机驾照需十万 闲鱼怎么禁止别人看自己的主页 闲鱼如何屏蔽一些不想看的同类信息 红烧碟鱼头怎么做好吃,红烧碟鱼头的家常做法 重演《以家人之名》!00后演员挑战“子秋”呼声超高 南京航空航天大学2009年江苏省各专业分数线 经典数据结构笔试题和面试题答案及答案分享 《战争机器:战术小队》PC版性能表现分析 战争机器234有pc版吗 战争机器3有pc吗 三星平板怎么看是不是国行 用QQ号/邮箱,登录怎么填写 华为por耳机用酷狗什么音效 模拟退火算法介绍 模拟退火算法简介 模拟退火算法 Simulated Annealing jbl小晶豆在酷狗音乐里用那个耳机音效 翟天临突然回复网友评论,这是为了复出在试水吗? 酷狗音效里的耳机不一样耳机会怎么样 翟天临现身机场被拍,论文风波后他是否能够重头再来呢? 石家庄开发区都有哪些中考考点 产科医生电视剧全集42完整版误诊是哪一集 如果换手机卡,原来的还可以用吗 如果换手机卡,原来的还可以用吗? wps音频转换超级会员能免费多少时长 wps音频转换文字后能删除记录吗 求PSP版烈火战车-勇往直前的技能大全 增值税出口退税的原理 怎去掉发的快手字幕括号 vivo云服务不显示卫星定位怎么办 OPPO手机安装不了CA证书安装不了 求高人帮帮忙,听一下这个背景音乐是什么? 句型转换 1.My mother is cooking in the kitchen.(对cook