TSP 模拟退火
TSP——模拟退火解法
都知道TSP是经典的NP问题,从一个点开始遍历所有点,不重复,求最短路径。
可以用枚举终点,跑流量为2的最小费用,图论来做,时间复杂度为 费用流已经用到堆优化了。显然点,边较多将无法承受。
如果不要求精确解,使用模拟退火也是一个不错的选择。模型简单,转移很暴力。
先随机生成一些解,然后随机挑两个点,开始试探转移。


这里,几乎是按照退火算法模板写的了,有初始化,有状态转移,有接受准则。
clc, clear
sj0=load('sj.txt');
x=sj0(:,[::]);x=x(:);
y=sj0(:,[::]);y=y(:);
sj=[x y]; d1=[,];
sj=[d1;sj;d1]; sj=sj*pi/;
d=zeros();
for i=:
for j=i+:
d(i,j)=*acos(cos(sj(i,)-sj(j,))*cos(sj(i,))*cos(sj(j,))+sin(sj(i,))*sin(sj(j,)));
end
end
d=d+d';
path=[];long=inf;
rand('state',sum(clock)); %初始化随机数发生器
for j=: %求较好的初始解
path0=[ +randperm(),]; temp=;
for i=:
temp=temp+d(path0(i),path0(i+));
end
if temp<long
path=path0; long=temp;
end
end
e = 0.1^;
L = ;
at = 0.999;
T = ;
for k = :L
c = +floor(*rand(,));
c = sort(c);
c1 = c();
c2 = c(); df=d(path(c1-),path(c2))+d(path(c1),path(c2+))-d(path(c1-),path(c1))-d(path(c2),path(c2+)); if df <
path=[path(:c1-),path(c2:-:c1),path(c2+:)];
long = long+df;
elseif exp(-df/T)>rand
path=[path(:c1-),path(c2:-:c1),path(c2+:)];
long=long+df;
end T = T*at;
if T < e
break;
end
end
xx = sj(path,);
yy = sj(path,);
plot(xx,yy,'-*');
TSP 模拟退火的更多相关文章
- 模拟退火算法(SA)求解TSP 问题(C语言实现)
这篇文章是之前写的智能算法(遗传算法(GA).粒子群算法(PSO))的补充.其实代码我老早之前就写完了,今天恰好重新翻到了,就拿出来给大家分享一下,也当是回顾与总结了. 首先介绍一下模拟退火算法(SA ...
- 【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 01 什么是旅行商问题(TS ...
- 模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径
模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...
- 模拟退火解决TSP问题
// monituihuo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #includ ...
- 模拟退火解TSP问题MATLAB代码
分别把前四个函数存成m文件,再运行最后一个. swap.m function [ newpath , position ] = swap( oldpath , number ) % 对 oldpath ...
- 模拟退火算法求解旅行商问题(附c和matlab源代码)
前几天在做孔群加工问题,各种假设到最后就是求解旅行商问题了,因为原本就有matlab代码模板所以当时就改了城市坐标直接用了,发现运行速度惨不忍睹,最后用上了两个队友的电脑一起跑.这次模拟结束后在想用c ...
- [学习笔记] 模拟退火 (Simulated Annealing)
真没想到这东西真的在考场上用到了...顺便水篇blog以示诈尸好了(逃 模拟退火算法 模拟退火是一种随机化算法, 用于求函数的极值qwq 比如给出一个问题, 我们要求最优解的值, 但是可能的方案数量极 ...
- OI骗分神器——模拟退火算法
前言&&为什么要学模拟退火 最近一下子学了一大堆省选算法,所以搞一个愉快一点的东西来让娱乐一下 其实是为了骗到更多的分,然后证明自己的RP. 说实话模拟退火是一个集物理与IT多方面知识 ...
- 模拟退火算法 R语言
0 引言 模拟退火算法是用来解决TSP问题被提出的,用于组合优化. 1 原理 一种通用的概率算法,用来在一个打的搜索空间内寻找命题的最优解.它的原理就是通过迭代更新当前值来得到最优解.模拟退火通常使用 ...
随机推荐
- 2.3 if switch for等流程控制
if条件中可以写多个语句,语句的作用域仅限于if,不可在if之外的地方使用 package main import ( "fmt" "io/ioutil" ) ...
- linux 期中架构之 nginx 安装与排错
1, 安装 nginx 所需要的pcre库 即:perl 兼容正则表达式 yum install pcre pcre-devel -y rpm -qa pcre pcre-devel 检查是否安装好p ...
- 01-struts2配置详解
1 struts.xml配置详解 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE strut ...
- 实现JFileChooser的多种文件类型限制(设置过滤器)
使用时直接调用方法. // 多类型时使用 public void FileFilter(JFileChooser F) { String[][] fileNames = { { ".java ...
- 《Unity系列》Json文件格式的解析——初级教程
Json作为轻量级的数据交换格式,被广泛应用于网络数据传输中.相关的解析工具层出不穷,一般掌握一个工具的应用其他的相应工具就能立马学会. 这里以C#中的LitJson为例给大家示范一下解析工具的用法. ...
- 如何恢复sqlserver误删除的数据(摘)
一.借助第三方工具 1.sqlserver2005: Log Explorer http://www.cnblogs.com/whitney/archive/2008/08/22/1273879.ht ...
- (三)HTML中的列表标签、框架集及表单标签
一.HTML的列表标签 在网页中,经常可以看到,有的内容排列如同word里面的项目编号,这就是HTML的无序排列和有序排列起到的作用.. HTML之无序排列:<ul></ul> ...
- IntelliJ IDEA 12 设置优化
1.IntelliJ IDEA简介 IntelliJ IDEA是Eclipse之外又一强大的IDE,Google在今年发布了新的Android开发IDE---Android Studio就是基于Int ...
- 数组和矩阵(1)——Find the Duplicate Number
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...
- Java集合篇二:LinkList
package com.test.collection; /** * 自定义实现LinkList * * 1.双向链表 * 实现原理:底层封装Node节点对象(每个节点存放有3部分内容:1.上个节点的 ...