【知识】模拟退火

news/2024/12/2 20:47:19/文章来源:https://www.cnblogs.com/fanrunze/p/18582683

模拟退火

概念:

  1. 温度(步长):

    • 初始温度 \(T\)

    • 终止温度

    • 衰减系数 $ 0 \sim 1$

  2. 随机选择一个点:

    \(f(新点) - f(当前点) = \Delta E\)

    • \(\Delta E < 0\) 跳到新点
    • \(\Delta E>0\) 以一定概率跳过去,概率为 \(e^{- \frac{\Delta E}{T}}\)

    过程如下图:

题型:

  • A Star not a Tree?

    模拟退火裸题,也可以用三分套三分做

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <ctime>#define x first
    #define y secondusing namespace std;typedef pair<double, double> PDD;
    const int N = 110;int n;
    PDD q[N];
    double ans = 1e8;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;double dy = a.y - b.y;return sqrt(dx * dx + dy * dy);
    }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;
    }
    

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验五 C语言指针应用编程

实验五 C语言指针应用编程 实验任务1——数组求最大最小值 #include <stdio.h> #define N 5 void input(int x[], int n); void output(int x[], int n); void find_min_max(int x[], int n, int* pmin, int* pmax); int main() {int a[N];int min, max;printf("录入…

使用Tauri创建桌面应用

当前是在 Windows 环境下 1.准备系统依赖项Microsoft C++ 构建工具WebView2 (Windows10 v1803 以上版本不用下载,已经默认安装了)下载安装 Rust 下载安装 Rust 需要重启终端或者系统重新打开cmd,键入rustc --version,出现 rust 版本号,说明安装成功 2.开始 #npm npm create…

【windows工作合集】 远程连接出现问题记录

问题记录:由于需求要登录本地windows的虚拟机 但是在输入用户信息/密码都正确的情况下出现上面截图的问题 于是就百度进行查阅解决--主要就是说我这边机器可能是因为系统更新或者一些注册表的问题导致信息对不上,所以被认为无法登录 (系统更新。微软系统补丁的更新将 CredSSP…

AGC032 VP记录

A 17:35 +0 B 39:51 +0 C 80:28 +4 A.Limited Insertion 简要题面: 最初有一个空序列,每次操作选定一个 \(i\) 并把 \(i\) 插入到位置 \(i\) ,给定最终序列,构造一种合法方案或者输出 -1 。 \(n \leq 100\) 做法: 简单思考发现每次操作出来的数一定从后往前对应了最终序列…

高级语言程序设计第十次作业

代码写的最长的一题,写了十五分钟,数据类型还写错了使用ftell与fseek的组合来计算字节数,跟上面的一题类似这题因为我没创建相关的文件所以输出是这样,但是创建了之后是可以成功写入的可以将输入内容复制通过c语言程序这个也是复制的一个用法同样通过ftell与fseek来计算字节…

H5-15 H5里面的CSS

1、CSS 简介使用CSS的目的就是让网页具有美观一致的页面 2、CSS概念CSS (Cascading Style Sheets)层叠样式表,又叫级联样式表,简称样式表CSS文件后缀名为 .cssCSS用于HTML文档中元素样式的定义 3、为什么需要CSS使用css的目的就是让网页具有美观一致的页面 4、语法CSS规则由…

实验5 继承和多态

实验任务三 源码1 #pragma once2 #include<iostream>3 #include<string>4 5 using std::string;6 using std::cout;7 using std::endl;8 9 //电子宠物类 10 class MachinePets { 11 private: 12 string nickname; 13 public: 14 MachinePets(const string&…

idea创建web项目并连接数据库

1.在idea中连接数据库在连接的数据库中,可以写SQL语句,创建数据库、表等。 2.我的项目结构---学生请假系统Dao层:写一个学生实体类 Servlet层:业务层具体的怎么实现相关操作 1)最开始加上这个之后就不用配置映射文件了 2)然后是这个就不用另外的建立连接了 3)在resouces…

chrome 替换network中的返回内容,用以跨步调试

在开发调试中,有时候,某个接口,或者文件返回内容有问题,但线上的文件没问题。这时候就可以通过更改network中返回内容来实现跨步调试了。 test.html<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta n…

天梯赛 L2-004 这是二叉搜索树吗? 数据结构

反思:使用指针前先分配内存。#include<bits/stdc++.h> using namespace std; typedef struct node {int data;struct node* left;struct node* right; }*T; queue<int>q1; queue<int>q2; queue<int>q3; T result; void built1(T &t,int x) {if(t=…

Qt nativeEvent 不触发/不执行/无效

在做触摸屏项目的时候,各种控件都需要实现监听/触发点击事件,通常是通过信号/槽、事件过滤器(eventFilter)、重写mousePressEvent。 发现在QSpinBox中点击编辑框时不会触发任何鼠标相关点击事件。查资料发现通过重写nativeEvent函数可以拿到鼠标相关事件,不过有一个坑需要注…

testnet 资产管理系统 侦察|扫描|信息收集|网络空间搜索

TestNet简介 TestNet资产管理系统旨在提供全面、高效的互联网资产管理与监控服务,构建详细的资产信息库。 该系统能够帮助企业安全团队或渗透测试人员对目标资产进行深入侦察和分析,提供攻击者视角的持续风险监测,协助用户实时掌握资产动态,识别并修复安全漏洞,从而有效收…