tsp

蚁群算法解决TSP问题

风流意气都作罢 提交于 2019-12-03 14:40:30
代码实现 运行结果及参数展示 alpha=1 beta=5 rho=0.1 alpha=1 beta=1 rho=0.1 alpha=0.5 beta=1 rho=0.1 概念 蚁群算法(AG)是一种模拟蚂蚁觅食行为的模拟优化算法,它是由意大利学者Dorigo M等人于1991年首先提出,并首先使用在解决TSP(旅行商问题)上。之后,又系统研究了蚁群算法的基本原理和数学模型. 蚁群算法的基本原理: 1、蚂蚁在路径上释放信息素。 2、碰到还没走过的路口,就随机挑选一条路走。同时,释放与路径长度有关的信息素。 3、信息素浓度与路径长度成反比。后来的蚂蚁再次碰到该路口时,就选择信息素浓度较高路径。 4、最优路径上的信息素浓度越来越大。 5、最终蚁群找到最优寻食路径。 公式一 从公式中可以看出信息素因子为信息素浓度的指数,启发函数因子为启发函数的指数,这样便很好理解这两个参数所起到的作用了,分别决定了信息素浓度以及转移期望对于蚂蚁k从城市i转移到城市j的可能性的贡献程度。 公式二: 这个公式反映了信息素浓度的迭代更新规律,可以看出,所有蚂蚁遍历完一次所有城市后,当前信息素浓度由两部分组成,第一部分即上次所有蚂蚁遍历完所有城市后路径上信息素的残留,第二部分为本次所有蚂蚁遍历完所有城市后每条路径上的信息素的新增量。 公式三: 公式三反映了每只蚂蚁对于自己经过的城市之间路径上信息素浓度的贡献量

TSP - Branch and bound

匿名 (未验证) 提交于 2019-12-03 01:12:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I'm trying to solve the TSP with Branch and bound algorithm. I must build a matrix with costs but I have this problem: I have city with coordinates x and y. The cost of traveling is ceil(ceil(sqrt((x1-x2)^2+(y1-y2)^2))/v) + days spent in the city. V is speed. Days spent in the city depends from day when w comes to the city. For example if we arrived on Monday(t1) to city 1, we stay for 9 days but if we arrived on Tuesday, then we stay in the city for 4 days. x y t1 . t7 city 1. 79 - 36 9 4 8 5 5 7 8 city 2. 8 67 6 9 2 1 9 9 1 city

蚁群算法求解TSP问题

匿名 (未验证) 提交于 2019-12-03 00:17:01
一、蚁群算法简介 二、TSP问题(旅行商问题) 1、构建图:构建图与问题描述图是一致的,成份的集合C对应着点的集合(即:C=N),连接对应着边的集合(即L=A),且每一条边都带有一个权值,代表点i和j之间的距离。 2、约束条件:所有城市都要被访问且每个城市最多只能被访问一次。 3、信息素和启发式信息:TSP 问题中的信息素表示在访问城市i后直接访问城市j的期望度。启发式信息值一般与城市i和城市j的距离成反比。 4、解的构建:每只蚂蚁最初都从随机选择出来的城市出发,每经过一次迭代蚂蚁就向解中添加一个还没有访问过的城市。当所有城市都被蚂蚁访问过之后,解的构建就终止。 随机生成50个城市进行测试,初始蚂蚁数量为50,信息素重要程度因子alpha = 1,启发函数重要程度因子beta = 5,信息素挥发因子rho = 0.1, 最大迭代次数为150 %% 旅行商问题(TSP)优化 %% 清空环境变量 clear all clc %% 导入数据 %load citys_data.mat city = ceil(rand(50,2) * 5000) load city.mat %% 计算城市间相互距离 fprintf('Computing Distance Matrix... \n'); n = size(city,1); D = zeros(n,n); for i = 1:n for j =

【算法】模拟退火算法解决TSP问题的matlab实现

匿名 (未验证) 提交于 2019-12-02 23:59:01
前言 模拟退火算法(SA)是较为常见的现代优化算法之一,常用于旅行商(TSP)问题中。数学建模里学生们常常使用该算法,甚至是为了使用这个算法而使用这个算法,让评委老师们审美疲劳。评委老师明确表明使用所谓"神算法"(神经网络,模拟退火,遗传算法等等)而过于牵强者拿不了高分(见: http://special.univs.cn/service/jianmo/sxjmyw/2018/1128/1187951_15.shtml )。希望大家不要觉得它名词高级就认为它能吸引评委眼睛,评委毕竟是教授,不可能被几个名词唬住。 但是呢,我们是学生,不能因为它不能随便用就不学习它,而在编程的环节中,我们亦有收获,况且爱因斯坦也是从一加一开始学起的,所以模拟退火算法还是有学习的必要的。话说的有点多,下面进入主题。 算法框架 模拟退火算法可以粗分为以下几个步骤:   1,初始温度的设置、初始解的生成、设置每个温度下产生解的个数。   2,产生新解。   3,计算代价函数差。   4,Metropolis判别。(别被名词吓住,形式上是很简单的一个原则)   5,降温。   6,判断温度是否小于一个给定量。是,则结束;否,则跳转到第2步。 以下对每个步骤做详细的解释。 初始温度的设置、初始解的生成、设置每个温度下产生解的个数:    初始温度与降温系数、终止温度息息相关,它们仨决定了迭代的次数,具体公式为

用Python解决TSP问题(2)――贪心算法

匿名 (未验证) 提交于 2019-12-02 22:54:36
文章源码在Github: https://github.com/jinchenghao/TSP 本介绍用python解决TSP问题的第二个方法――动态规划法 算法介绍 动态规划算法根据的原理是,可以将原问题细分为规模更小的子问题,并且原问题的最优解中包含了子问题的最优解。也就是说,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。 我使用DP求解TSP问题的主要分为三个主要部分: T(s,init)代表的意思是从init点出发经过s中全部的点回到init的距离。 程序 输入: 1 2066 2333 2 935 1304 3 1270 200 4 1389 700 5 984 2810 6 2253 478 7 949 3025 8 87 2483 9 3094 1883 10 2706 3130 代码: """ 动态规划法 name:xxx date:6.8 """ import pandas as pd import numpy as np import math import time dataframe = pd.read_csv("./data/TSP10cities.tsp",sep=" ",header=None) v = dataframe.iloc[:,1:3] train_v= np

用Python解决TSP问题(1)――贪心算法

匿名 (未验证) 提交于 2019-12-02 22:54:36
文章源码在Github:https://github.com/jinchenghao/TSP 关于TSP问题网上有很多介绍,这里再简单描述一下。旅行商问题(TravelingSalesmanProblem,TSP)一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要遍历所有城市一次且只能一次,回到出发地。应如何选择行进路线,以使总的行程最短。目前解决TSP问题的方法有许多种,比如:贪心算法、动态规划算法、分支限界法;也有智能算法,比如:蚁群算法、遗传算法、A*等。由于网上使用python解决这类问题的比较少,所以我会用python实现这些算法。本文先介绍贪心算法: 数据格式 数据格式如下: 城市 X Y City1 100 200 City2 150 200 City3 345 313 ... 即输入的数据有3列,第一列是城市编号,第二列和第三列是城市坐标(x,y)。 算法简介 贪心算法非常容易理解,是一种解决实际问题中的常用方法,经常用来和其他算法进行比较。所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性

时间获取函数

匿名 (未验证) 提交于 2019-12-02 21:56:30
Ŀ¼ 由Linux内核提供的基本时间是自1970-01-01 00:00:00 +0000 (UTC)这一特定时间以来经过的秒数,这种描述是以数据类型time_t表示的,我们称其为日历时间。 获得日历时间的函数有3个:time、clock_gettime和gettimeofday。 #include <time.h> //成功返回日历时间,出错返回-1;若time非NULL,则也通过其返回时间值 time_t time(time_t *time); #include <stdio.h> #include <string.h> #include <time.h> void print_time() { time_t seconds = time(NULL); printf("seconds = %ld\n", seconds); } int main() { print_time(); return 0; } clock_gettime函数可用于获取指定时钟的时间,返回的时间通过struct timespec结构保存,该结构把时间表示为秒和纳秒。 #include <time.h> struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ }; //Link with -lrt.

R语言旅行推销员问题TSP

若如初见. 提交于 2019-11-29 10:28:51
原文链接: http://tecdat.cn/?p=6551 常用术语中的旅行推销员问题(TSP)是最复杂的问题之一,归结为组合优化。旅行到n个城市(顶点)需要检查(n-1)!可能性。3,000个地点有4 * 10 ^ 9131个可能的解决方案。 本文调查了R包的性能:TSP和tspmeta。结果对我的使用非常满意。 以下代码输入您的TSP225.csv文件并输出您的解决方案和可视化。生成的'tour'对象是一类TOUR和整数;它包含您的解决方案。 coords.df <- data.frame(long=TSP225$Long, lat=TSP225$Lat) coords.mx <- as.matrix(coords.df) # Compute distance matrix dist.mx <- dist(coords.mx) # Construct a TSP object tsp.ins <- tsp_instance(coords.mx, dist.mx ) # tour <- run_solver(tsp.ins, method="2-opt") #Plot autoplot(tsp.ins, tour) ​ 比较解决方案:下图显示了7种启发式解决方案的最佳旅游长度和协和式的确切解决方案。对于协和解决方案,我使用了在UW-Madison主持的NEOS-Server。