模拟退火算法解决最近最远问题

模拟退火算法求解最优化问题 目录 0 引言 1 模拟退火算法理论 1.1 模拟退火算法的起源 1.2 物理退火过程 1.3 模拟退火原理 1.4 模拟退火算法思想 2 实例描述 2.1 TSP旅行商问题 2.1.1 问题描述 2.1.2 解空间 2.1.3 新解的产生 2.1.4 目标函数 2.2 背包问题 2.2.1 问题描述 2.2.2 具体实现 2.2.3 结果展示 3 总结 0引言 在优化领域中,根据变量性质的不同大体可以分为两类:—类是包含连续变量的优化问题;另一类是包含整数变量的. 阅读详情
/**
    模拟退火算法真的很巧妙,而且很多问题也能转换成这个算法
    这个算法最大的妙处,就是它会无序的向着你所要求的答案去
    寻找,直到找到符合你的精度,概率很高

    如:在一个1024*768的平面上有N 个点,现在要你在这个面上找个
    点到这N个点的距离和最小,精度保留 5 位小数,有个很简单的办法
    就是枚举,当然不能这么干,而模拟退火算法是处理这类问题的典范

    当然它不仅仅用于处理找点,你知道,网络流就是求最大流而已,可是
    却用处很多,所以说好多问题,都可一转换成模拟退火问题,尤其那些
    没有确定算法,需要暴力的题,包括今年上海赛区第一题也是可以用这个
    算法,不过会超时。

    接着回到那个题,找一个点到这些点距离最小,模拟退火的思路就是,先任意
    在这个面内找个点 st ,最好在这些点中间,设有个半径为 T,以T为半径
    st 为圆心可以包括所有的N 个点。好了,下面开始找了,一般 8 个方向就够了
    4个其实也差不多,对于有些题要求很高,需要更多的方向,现在就以4 个
    方向分析,上下左右,st点的上下左右,st_up, st_down, st_left, st_right.
    比如:st_up.x = st.x, st_up.y = st.y + T。 在这四个点里面挑个离得最近的
    把st 移到这里,然后继续找直到T 的半径下再也找不到更近的点,现在T *= 0.5
    继续重复上面步骤找,要知道,每次让T 减一般,很快就会减到你想要的精度。

    具体看代码

*/


typedef struct POINT {
    double x, y;
}Point;


int main() {


    Point st, st_tmp, temp; //st_tmp, temp临时点
    double T, T_MIN; // T要求把所有点覆盖,T_MIN可得到的最大精度 比如 T_MIN = 1e-6
    double ans;      //目前可得的最小距离


    //输入完成后

    st_tmp = st;
    ans = dis(st);  //dis() 函数由自己写,返回st 离所有点的距离之和

    while (T > T_MIN) {
        int flag;
        while (flag) {
            flag = 0;  //flag 的妙处
            for (int i=-1; i<=1; i++)
                for (int j=-1; j<=1; j++) { //八个方向,根据需要自己看着办
                    temp.x = st.x + T*i;
                    temp.y = st.y + T*j;
                    double tmp_d = dis(temp);
                    if (tmp_d < ans) {
                        ans = tmp_d;
                        st_tmp = temp;
                        flag = 1;       //在T 半径上找到个比st 更小的点
                    }
                }

            st = st_tmp;        //如果flag = 0,说明在T 半径的8个方向上没有比st 更优的点
        }

        T = 0.5 * T;    //这个也是根据情况,不过一般0.5就行了,越大越精确,速度也越慢
    }

    // 得到 st 为最近点,ans 为最近距离和,最远一样,改改即可

    return 0;
}

/**
    睡觉了,睡觉了,晚安

*/

 

收藏于 2012-01-13
来自于百度空间

夜深人静写算法(十二)- 模拟退火 随机界的星星之火---模拟退火! 阅读详情

相关推荐

PyQtWebEngine安装避坑指南:快速解决ModuleNotFoundError

本文详细解析了PyQt5开发中常见的ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'错误。核心原因是PyQt5 5.11版本后,网页引擎组件被独立为PyQtWebEngine包。文章对比了退回旧版本、独立安装及使用Conda等多种解决方案,并提供了针对Windows、macOS和Linux不同平台的实战安装指南与验证方法,帮助开发者快速解决依赖问题。

weixin_29056101的博客 428

模拟退火算法(数学建模清风)

模拟退火算法能解决的四个问题: (1)求一个给定的函数的最值问题 (2)TSP问题 (3)书店买书问题(0-1规划) (4)背包问题 上述要解决的问题: 某个目标函数的最值(某一给定的函数、旅行的路程或费用、买书的花费、利润) (最大值问题通过给目标函数增加符号可以转换为最小值问题) 启发式搜索算法:模拟退火算法、遗传算法、粒子群算法、蚁群算法等 求解的通用步骤:   B站视频链接:https://www.bilibili.com/video/BV...

Han_torch的博客 3381

Vivado图形化界面烧写MCS文件到SPI FLASH全流程(附常见报错解决方案)

本文详细介绍了使用Vivado图形化界面将MCS文件烧录至SPI FLASH的完整操作流程。内容涵盖从环境准备、MCS文件生成到硬件连接与烧写的每一步,并针对SPI总线宽度报错、FLASH型号识别失败等常见问题提供了深度解决方案,帮助用户高效完成FPGA配置,摆脱对TCL命令行的依赖。

s8t9u0v1w的博客 536

机器学习之模拟退火算法

模拟退火算法(Simulate Anneal Arithmetic,SAA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解。模拟退火是S.Kirkpatrick, C.D.Gelatt和M.P.Vecchi在1983年所发明。而V.Černý在1985年也独立发明此演算法。模拟退火算法是解决TSP问题的有效方法之一。

m0_51339444的博客 2993

手把手教你用键盘在Ubuntu上给Lerobot机械臂采集HIL-SERL训练数据(附完整配置文件)

本文详细介绍了在Ubuntu系统中使用键盘控制Lerobot机械臂进行HIL-SERL训练数据采集的完整流程。从环境准备、机械臂校准到键盘遥操系统配置和数据采集优化,提供了实战指南和常见问题解决方案,帮助读者高效获取高质量训练数据,推动具身智能和强化学习应用的发展。

weixin_30733003的博客 479

OKCC呼叫中心部署实战指南:从零搭建高效外呼系统

本文提供OKCC呼叫中心系统的完整部署实战指南,从服务器选型、操作系统准备到详细安装步骤和性能优化,帮助企业从零搭建高效外呼系统。重点介绍FreeSWITCH核心组件的安装配置技巧,以及常见问题排查方法,助力企业提升客户服务效率。

weixin_29275257的博客 164

【算法】模拟退火

模拟退火算法(Simulated Annealing, SA)是一种启发式全局优化算法,灵感来源于固体退火原理。在冶金学中,退火是将金属加热到一定温度,再缓慢冷却以消除内部应力,使金属结构达到稳定状态。在优化问题中,模拟退火算法通过接受一定概率的“坏解”(即解质量下降的情况),以跳出局部最优,最终逼近全局最优解。

wnm23的专栏 2万+

【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(2)

实现功能:代码下载地址:下载地址 1)基于深度学习的目标检测;2)基于雷达的距离估计和预测;3)多传感器感知结果融合模块。 相机感知模块解析 4. Run nodes: python3 fusion_node/main.py python3 gps_node/main.py python3 radar_node/main.py python3 2d_detection_node/main.py #(additional instructions in 2d_detection_node/README.m

踟蹰横渡口,彳亍上滩舟。 9951

模拟退火算法

TSP问题 例题一:一位旅行者从一出发点出发,要求经过31个城市(目标点的坐标已给出),并且每个点只能经过一次,最终经过所有点后回到起点。 要求:为旅行者制定一条最短路径。 贴一份代码: %%%%%%%%%%%%%%%%%%%%%%模拟退火算法解决TSP问题%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tic %用来记录程序运行时间的 clear all;

qq_53318060的博客 961

js逆向-逆向部分技巧总结

js逆向-逆向部分技巧总结

Deng872347348的博客 2133

修改 Alist 密码时报错?看看这个坑怎么解决!

启动服务后,再修改密码”。以后再遇到类似问题,先检查服务是否正常运行,说不定就能少踩不少坑。如果还有其他 Alist 的问题,欢迎在评论区留言交流~

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1155

模拟退火(Simulated Annealing)算法 PO J1379 2420

在很多信息学竞赛选手看来,很多时候几何题目就是代码量大的代名词,即使对于一些经典问题,庞大的代码量也使很多人望而却步。模拟退火算法思维及编写简单、灵活,可以在一类最远、最近或第k近距离问题中发挥威力。模拟退火算法介绍1.1模拟退火算法的原理模拟退火算法是一种元启发式(Meta-Heuristics)算法,来源于固体退火原理,将固体加热至充分高的温度,再让其徐徐冷却。加热时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Met

魔神翼 2423

贝叶斯网络 (Bayesian Networks) 原理与代码实例讲解

贝叶斯网络 (Bayesian Networks) 原理与代码实例讲解 1. 背景介绍 1.1 什么是贝叶斯网络? 贝叶斯网络(Bayesian Networks)是一种基于概率论的图形模型,用于表示随机

AI天才研究院 1334

【模拟退火】 poj1379 Run Away

Run Away 题目:http://poj.org/problem?id=1379 题意:平面上有一个矩形,在矩形内有一些陷阱。求得矩形内一个点,该点离与它最近的已知陷阱最远。 题解:我是用模拟退火解的,这题本身不难,但是可以从中大致了解模拟退火的基本的概念。       这个是别人写的模拟退火模型,挺准确的:       模拟退火算法的模型 ① 初始化:初始温度T(充分大)

Ted's 游乐园 1905

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Poj1379(区域内距最近点最远的位置)模拟退火算法实现

<br />题目链接:http://poj.org/problem?id=1379<br /> <br /> <br />题意:给出指定的区域,及平面内的点集,求出一个该区域内到点集中所有点的最短距离最大的一个位置,点.<br /> <br />解题:三角剖分问题,可是对于没接触过三角剖分的我,当看到792行的网上找的代码时,当时那个感觉啊```,还好从Disscuss 上看到了可以用随          机化算法模拟退火来解决,下载了个PPT,想通了其中的环节~然后,决定今天把它敲出来,AC之,可敲出来之

dooder_daodao的专栏 2299

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ 1379 run away 模拟退火算法

转载自:http://www.cppblog.com/RyanWang/archive/2010/01/21/106112.html 模拟退火算法介绍(摘自08集训队 顾研《浅谈随机化思想在几何问题中的应用》)     一.模拟退火算法的原理 模拟退火算法是一种元启发式(Meta-Heuristics)算法,来源于固体退火原理,将固体加热至充分高的温度,再让其徐徐冷却

shadow67的专栏 616

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TSP(中国旅行商问题)

本次博客是对于博客提出疑问的思考与实践。 目录1. 问题描述2. 现有的解决办法3. 体会 四个图论经典问题 戈尼斯堡七桥问题 哈密顿问题 四色猜想问题 旅行商问题(货担郎问题或者中国邮政问题) 在这里主要讨论第四个问题,中国邮政问题 1. 问题描述 给定一些城市与城市之间的距离,求解访问每座城市一次且能返回出发点的最短路径。 其图论描述为: 给定图G=(V,A)\mathrm{G }= (\mathrm{V},\mathrm{ A})G=(V,A),其中V\mathrm{V}V为顶点集,A\ma

来日可期的博客 2170

旅行商问题是什么以及汇总

旅行商问题(Traveling-Salesman Problem,TSP) 1. 问题描述 旅行商问题(TravelingSalesmanProblem,TSP)是一个经典的组合优化问题。经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的Hamilton回路。由于该问题的可行解是所有顶点的全排列,随着顶点数的增加,会产生组合爆炸,它是

XiaoCai 5098

NP问题

http://202.202.96.70:8080/courseware/0836/content/0003/tc01.htm   经常有人问起我的专业。在简单解释一番之后,听的人如坠五里云雾,我自己也感觉不甚了了。于是想把我研究领域里的一些东西整理出来,算是一份学习的总结。 首先来看看这个旅行商问题(Traveling Salesman Problem):四处旅行的推销员想找出一条通过所有...

wukunlsy的专栏 405

NP完全问题

NP就是Non-deterministic Polynomial的问题,也即是多项式复杂程度的非确定性问题。 假设P ≠ NP的图解。若P = NP则三类相同。 而如果任何一个NP问题都能通过一个多项式时间算法转换为某个NP问题,那么这个NP问题就称为NP完全问题(Non-deterministic Polynomial complete problem)。NP完全问题也叫做NPC问题

xyjikl 1425

算法复杂度与NP问题

引言 美剧《基本演绎法》S2E2中,两位研究 NP 问题的数学家被谋杀了,凶手是同行,因为被害者即将证明“P=NP 问题”。假设人类证明了P=NP 是真的,那么就会有一个算法,能够很快算出某个帐号的密码。《基本演绎法》里面所想象的可能就要成真了,所有的加密系统都会失去效果——应该说,所有会把密码变成数字信息的系统都会失去效果。 一大批耳熟能详的游戏,如扫雷、俄罗斯方块、超级玛丽等,人们将为它们编写...

徐奕的专栏 4591

基于模拟退火算法的无人机药品配送路径规划与Matlab实现

路径规划是运筹优化领域的核心问题之一,旨在为移动设备(如车辆、机器人、无人机)寻找从起点到终点的高效行驶路线。其基本原理是将现实世界的位置与路径抽象为图论中的节点与边,通过算法在庞大的解空间中搜索满足约束条件(如距离、时间、容量)的最优或近似最优路径。在众多优化算法中,模拟退火算法因其原理直观、实现灵活、对初始解不敏感且能有效避免陷入局部最优,成为解决组合优化问题的一把实用“瑞士军刀”。该算法通过模拟物理退火过程,引入“温度”参数控制搜索的随机性,以一定概率接受劣质解,从而增强全局探索能力。在无人机配送、物

weixin_34384557的博客 436

POJ 1379 模拟退火求矩形内的覆盖点

Run Away Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10930   Accepted: 3242 Description One of the traps we will encounter in the Pyramid is located in the Large Roo...

c___c18的博客 346

【TSP问题】基于21 种不同的次优方法来解决对称欧几里得 TSP 问题附Matlab代码

旅行商问题 (TSP, Traveling Salesperson Problem) 作为组合优化领域中的一个经典难题,其目标是在给定一组城市及其两两之间的距离后,寻找一条访问所有城市恰好一次并返回起点的最短路径。对称欧几里得TSP问题则进一步限定了距离满足对称性(即城市i到城市j的距离等于城市j到城市i的距离)且距离满足欧几里得几何的距离计算方式。由于TSP问题是一个NP-hard问题,精确求解算法在面对大规模问题时计算复杂度呈指数级增长,因此寻找高效的次优解算法至关重要。

m0_60703264的博客 1010
上一篇: 最小费spfa()+ek() 邻接表
下一篇: 浮点公约数
zcube
博客等级 码龄17年 170粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值