首页 > 编程语言 >爬山算法&&模拟退火

爬山算法&&模拟退火

时间:2022-10-02 18:11:47浏览次数:56  
标签:ansx ansy double 模拟退火 ey ex && 爬山 y1

const double down = 0.996;//降温系数
const double eps = 1e-15;//终止温度
double ansx, ansy, answ, T;
struct point { int x, y, w; } a[Z];
inline double dis(double x1, double x2, double y1, double y2) { return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); }
inline double calc(double x, double y)//计算答案值
{
    double res = 0;
    for (re i = 1; i <= n; i++) res += dis(x, a[i].x, y, a[i].y) * a[i].w;
    if (res < answ) ansx = x, ansy = y, answ = res;
    return res;
}
inline double get(double x) { return x + (rand() * 2 - RAND_MAX) * T; }//随机获得新解
void SA()
{
    T = 3000;//初始温度
    while (T > eps)
    {
        double ex = get(ansx), ey = get(ansy);
        double delta = calc(ex, ey) - calc(ansx, ansy);
        if (exp(-delta / T) * RAND_MAX > rand()) ansx = ex, ansy = ey;//根据Metropolis准则保留
        T *= down;//不断降温
    }
    for (re i = 1; i <= 1000; i++) calc(get(ansx), get(ansy));//最后在接近的范围里跳
}

标签:ansx,ansy,double,模拟退火,ey,ex,&&,爬山,y1
From: https://www.cnblogs.com/sandom/p/16749155.html

相关文章

  • 模拟退火(SA)算法求解容量受限的车辆路径(CVRP)问题MATLAB代码
    SA求解CVRP问题的目标函数是车辆行驶总距离最小,输入数据是solomon算例中的rc208,因为求解的是CVRP问题,所以将rc208中的后三列全部删除,剩余4列,每一列含义如下:[序号X坐标Y坐......
  • 模拟退火算法通俗讲解
    编辑:连吃十三碗校正:随心目录1. 模拟退火算法基本概念2. 模拟退火算法基本流程3. 遗传模拟退火算法matlab代码1.模拟退火算法基本概念自然凝结的、不受外界干扰而形成的......
  • 【Coel.学习笔记】随机化算法:模拟退火与爬山法
    简介模拟退火(\(\text{SimulateAnneal}\))和爬山法是随机化算法,二者的原理都在于通过随机生成答案并检查,把答案逐步缩小在一个可行的区间,尽可能地靠近正确答案。在考场......
  • 模拟退火算法
    ​ 模拟退火算法来源于固体退火原理,是一种基于概率的算法,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温......
  • 小猫爬山
    https://www.acwing.com/problem/content/167/#include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;constintN=20;intn,m;int......
  • 模拟退火
    核心思路就是模拟物理上的退火过程,有一个初温和末温,和降温系数(每次初温乘以系数),当初温大于末温时,我们随机一个解,并尝试更新当前解,当不大于末温时退火结束。更新的方法:如......
  • [AcWing 165] 小猫爬山
    DFS剪枝点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=50+10;intn,m;intw[N];intsum[N];//每组......