经典算法-模拟退火算法求解旅行商问题TSP

经典算法-模拟退火算法求解旅行商问题TSP

旅行商问题(Traveling Salesman Problem, TSP)是组合优化中的经典问题。简单地说,一个旅行商需要访问N个城市,并返回到出发城市,问题是找到最短的可能路线,使得每个城市只被访问一次。由于TSP是一个NP-hard问题,找到其精确解决方案是非常计算密集型的,特别是对于大规模的城市集。因此,我们需要一种可以在合理的时间内得到近似解的方法。


LLM大模型相关文章

GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案

GPT实战系列-Baichuan2本地化部署实战方案

GPT实战系列-如何用自己数据微调ChatGLM2模型训练

GPT实战系列-大话LLM大模型训练

GPT实战系列-ChatGLM2模型的微调训练参数解读

GPT实战系列-探究GPT等大模型的文本生成

GPT实战系列-Baichuan2等大模型的计算精度与量化

GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(二)

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(一)

模拟退火算法(Simulated Annealing, SA)是一个非常受欢迎的随机搜索技术,用于求解优化问题。模拟退火是受固体退火过程启发的一种算法,通过不断比较当前解和新解来找到问题的近似解。

在本文中,我们将介绍如何使用模拟退火算法解决TSP问题,并提供Python代码的实现。

问题描述

TSP问题描述的是以14个城市为例,假定14个城市的位置坐标如表所示,寻找一条最短的遍历14个城市的路径。

城市坐标

算法流程

计算城市距离

def distance(city1, city2):"""计算两个城市之间的欧几里得距离"""return np.sqrt((city1[0] - city2[0])**2 + (city1[1] - city2[1])**2)def total_distance(tour, cities):"""计算给定路线的总距离"""n = len(tour)return sum(distance(cities[tour[i]], cities[tour[(i+1) % n]]) for i in range(n))

初始化退火算法参数

    # 初始解为城市的顺序current_solution = list(range(len(cities)))current_distance = total_distance(current_solution, cities)best_solution = current_solution[:]best_distance = current_distancetemperature = initial_temperature

Metropolis准则函数

    # Metropolis准则if delta_distance < 0 or random.random() < np.exp(-delta_distance / temperature):current_solution = new_solutioncurrent_distance = new_distanceif current_distance < best_distance:best_solution = current_solution[:]best_distance = current_distance

更新解

    # 随机选择两个城市进行交换,得到新的解i, j = random.sample(range(len(cities)), 2)new_solution = current_solution[:]new_solution[i], new_solution[j] = new_solution[j], new_solution[i]new_distance = total_distance(new_solution, cities)delta_distance = new_distance - current_distance

主函数

def simulated_annealing(cities, initial_temperature, cooling_rate, num_iterations_per_temperature):"""模拟退火算法求解TSP问题"""# 初始解为城市的顺序current_solution = list(range(len(cities)))current_distance = total_distance(current_solution, cities)best_solution = current_solution[:]best_distance = current_distancetemperature = initial_temperaturewhile temperature > 1e-3:  # 设置一个最低温度for _ in range(num_iterations_per_temperature):# 随机选择两个城市进行交换,得到新的解i, j = random.sample(range(len(cities)), 2)new_solution = current_solution[:]new_solution[i], new_solution[j] = new_solution[j], new_solution[i]new_distance = total_distance(new_solution, cities)delta_distance = new_distance - current_distance# Metropolis准则if delta_distance < 0 or random.random() < np.exp(-delta_distance / temperature):current_solution = new_solutioncurrent_distance = new_distanceif current_distance < best_distance:best_solution = current_solution[:]best_distance = current_distancetemperature *= cooling_rate  # 降低温度return best_solution, best_distancecities = np.array([(16.47, 96.10),(16.47, 94.44),(20.09, 92.54),(22.39, 93.37),(25.23, 97.24),(22.00, 96.05),(20.47, 97.02),(17.20, 96.29),(16.30, 97.38),(14.05, 98.12),(16.53, 97.38),(21.52, 95.59),(19.41, 97.13),(20.09, 92.55),])
initial_temperature = 1000
cooling_rate = 0.995
num_iterations_per_temperature = 1000best_tour, best_distance = simulated_annealing(cities, initial_temperature, cooling_rate, num_iterations_per_temperature)
print("Best tour:", best_tour)
print("Best distance:", best_distance)

优化计算结果:

Best tour: [8, 9, 0, 1, 13, 2, 3, 4, 5, 11, 6, 12, 7, 10]
Best distance: 29.340520066994223

觉得有用 收藏 收藏 收藏

点个赞 点个赞 点个赞

End


GPT专栏文章:

GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案

GPT实战系列-LangChain + ChatGLM3构建天气查询助手

大模型查询工具助手之股票免费查询接口

GPT实战系列-简单聊聊LangChain

GPT实战系列-大模型为我所用之借用ChatGLM3构建查询助手

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(二)

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(一)

GPT实战系列-ChatGLM2模型的微调训练参数解读

GPT实战系列-如何用自己数据微调ChatGLM2模型训练

GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案

GPT实战系列-Baichuan2本地化部署实战方案

GPT实战系列-Baichuan2等大模型的计算精度与量化

GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF

GPT实战系列-探究GPT等大模型的文本生成-CSDN博客

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

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

相关文章

【第一次使用finalshell连接虚拟机内的centos】小白处理方式

第一次使用finalshell连接centos7的时候&#xff0c;因为都是新环境什么都没有配置&#xff0c;所以就需要安装finalshell和对新的centos7 进行一些配置。 安装finalshel&#xff0c;默认不安装d盘&#xff0c;就需要对安装路径做一下调整&#xff0c;其余都是下一步默认安装的…

【AIGC】2023年生成式AI发展综述

文章目录 一、文本生成 & 智能问答二、AI绘画三、音频生成四、视频生成五、三维生成 & 数字人5.1 通用三维生成5.2 数字人 展望&#xff1a;通用人工智能趋势 2023年是人工智能内容生成&#xff08;AIGC&#xff09;技术飞速发展的一年。从年初ChatGPT一炮打响&#xf…

大模型学习与实践笔记(二)

一、代码仓库&#xff1a; InternLM: https://github.com/InternLM/InternLM/ 课程讲师&#xff1a;宋志学大佬&#xff0c;d2l-ai-solutions-manual 开源项目负责人 二、Lagent框架 三、基于InternLM的智能对话 3.1 环境配置&#xff1a; cuda11.7 pytorch2.0.1 其他环境…

C++每日一练(15):简单幂计算

题目描述 输入两个数a和b&#xff0c;求a的b次方。 输入 输入两个整数a&#xff0c;b&#xff08;1<a<10&#xff0c;1<b<15&#xff09;。 输出 输出一个正整数&#xff0c;该值<1000000000000。 输入样例 3 3 输出样例 27 参考答案 #include<bits/stdc.h&…

CDH 6.3启动失败,由于日志写入权限原因导致cloudera-scm-server.log未生成

CDH 6.3启动失败&#xff0c;CM之前都能正常启动&#xff0c;服务器重启后&#xff0c;启动出现异常&#xff0c;需要排查具体错误&#xff0c;查看日志&#xff0c;发现日志cloudera-scm-server.log也未生成&#xff0c;不好定位具体原因。于是查看cloudera-scm-server状态&am…

CVE-2023-36025 Windows SmartScreen 安全功能绕过漏洞

CVE-2023-36025是微软于11月补丁日发布的安全更新中修复Windows SmartScreen安全功能绕过漏洞。攻击者可以通过诱导用户单击特制的URL来利用该漏洞&#xff0c;对目标系统进行攻击。成功利用该漏洞的攻击者能够绕过Windows Defender SmartScreen检查及其相关提示。该漏洞的攻击…

PCIe进阶之Gen3 Physical Layer Receive Logic(一)

1 文章概述 本篇文章是接着前面两篇文章进一步研究Gen3 Physical Layer Receive Logic的实现,具体包含Differential Receiver,CDR(Clock and Data Recovery)和Receiver Clock Compensation Logic 三个部分的介绍和解析。 1.1 Differential Receiver Gen3的Differential …

JBOD详解

JBOD是存储领域中一类重要的存储设备。 英文全称Just a bunch of disks, 中文也称之为硬盘存储扩展柜。 它是传统存储系统赖以生存的根基之一&#xff0c;如果没有JBOD&#xff0c;那一下子就会省去很多部件&#xff1a;后端HBA、SAS扩展器/FC成环器、线缆、JBOD控制模块等等…

【已解决】如何用递归实现位运算计算两数之和

本博文源于笔者正在思考的如何用递归进行计算两数之和。读者一般都会想到用while循环进行操作&#xff0c;位运算两数之和的思想就犹如辗转相除法。文章并附加了对这个方法的流程演示 问题来源 想要用递归实现两数之和。 代码实现 #include<stdio.h> int add(int num…

68.网游逆向分析与插件开发-角色数据的获取-利用蓝量属性分析角色数据基址

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;67.网游逆向分析与插件开发-角色数据的获取-分析角色数据基址-CSDN博客 然后分析任何一个东西&#xff0c;逆向分析的本质就是找东西的意思&#xff0c;找东西核心的观念是内存里得有&#xff0c;就是…

[足式机器人]Part2 Dr. CAN学习笔记 - Ch03 傅里叶级数与变换

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Ch03 傅里叶级数与变换 1. 三角函数的正交性2. 周期为 2 π 2\pi 2π的函数展开为傅里叶级数3. 周期为 2 L 2L 2L的函数展开4. 傅里叶级数的复数形式5. 从傅里叶级数推导傅里叶变换FT6. 总结 1. …

高效底座模型LLaMA

论文标题&#xff1a;LLaMA: Open and Efficient Foundation Language Models 论文链接&#xff1a;https://arxiv.org/pdf/2302.13971.pdf 论文来源&#xff1a;Meta AI 1 概述 大型语言模型&#xff08;Large Languages Models&#xff0c;LLMs&#xff09;通过大规模文本数…

TMC2226步进电机驱动---学习记录

基于TMC2226数据手册的学习 主要内容介绍&#xff1a; Package Outline TMC2226 手册中引脚解释&#xff08;按照手册表格顺序&#xff09; 了解每个引脚是接什么的&#xff0c;之后看原理图 &#xff08;借用立创广场kirito的原理图&#xff0c;后期换个&#xff09; 以前的疑…

UIUC CS241 讲义:众包系统编程书

原文&#xff1a;angrave/SystemProgramming 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 欢迎来到 Angrave 的众包系统编程维基书&#xff01;这个维基是由伊利诺伊大学的学生和教师共同建立的&#xff0c;是伊利诺伊大学 CS 的 Lawrence Angrave 的众包创作实验。…

SpringMVC的四种跳转方式

默认的跳转是请求转发&#xff0c;直接跳转到jsp页面展示&#xff0c;还可以使用框架提供的关键字redirect:&#xff0c;进行一个重定向操作&#xff0c;包括重定向页面和重定向action&#xff0c;使用框架提供的关键字forward:&#xff0c;进行服务器内部转发操作&#xff0c;…

如何解决NAND系统性能问题?--NAND分类

一、故事引言 想象一下&#xff0c;你正在管理一座神奇的数据仓库&#xff0c;这个仓库没有沉重的门、旋转的磁盘和机械手臂&#xff0c;而是由一群训练有素的“数据小飞侠”组成。这些小飞侠们居住在一个叫做闪存芯片&#xff08;NAND Flash&#xff0c;本文主人公&#xff0…

Bug:Goland左侧丢失项目结构(Goland常用快捷键)

Goland快捷键&小tips 1 常用快捷键 # 格式化代码 optioncommandL# 在项目中搜索文件中的内容 commandshiftF# 搜索.go文件 shiftshift&#xff08;按两次shift&#xff09;# 修改方法、变量&#xff08;同时替换引用处的名称&#xff09; fnshiftF6# 将选中代码抽取为方法…

设计模式—行为型模式之状态模式

设计模式—行为型模式之状态模式 状态&#xff08;State&#xff09;模式&#xff1a;对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 状态模式包含以下主要角色&#xff1a; 环境类&am…

结构体成员 分数比较大小

题目&#xff1a; 代码&#xff1a; #include <bits/stdc.h> #include<cstring>using namespace std;struct Num{double fenzi;double fenmu;char fenhao;};bool cmp(Num r1,Num r2){return r1.fenzi/r1.fenmu<r2.fenzi/r2.fenmu;}int main(){int n;Num num[n…

Android-多线程

线程是进程中可独立执行的最小单位&#xff0c;也是 CPU 资源&#xff08;时间片&#xff09;分配的基本单位&#xff0c;同一个进程中的线程可以共享进程中的资源&#xff0c;如内存空间和文件句柄。线程有一些基本的属性&#xff0c;如id、name、以及priority。 id&#xff1…