旅行商问题(Traveling Salesman Problem,TSP)的+Leapms线性规划模型及c++调用

知识点

旅行商问题的线性规划模型
旅行商问题的+Leapms模型及CPLEX求解
C++调用+Leapms

旅行商问题

旅行商问题是一个重要的NP-难问题。一个旅行商人目前在城市1,他必须对其余n-1个城市访问且仅访问一次而后回到城市1,请规
划其最短的循环路线。

旅行商问题的建模

设城市i,j之间的距离为D[i][j],又设0-1变量x[i][j]表示从城市i到城市j的道路是否在循环路线上。于是旅行商问题的目标可以被写成:

min sum{i=1,...,n;j=1,...,n;i<>j}(D[i][j] x[i][j])

因每个城市必须被访问一次且仅被访问一次,于是对每个城市需要进入一次且仅一次,而且出去一次且仅一次,于是有以下两个约束:

sum{i=1,...,n;i<>j} x[i][j] = 1 | j=2,...,n
sum{j=1,...,n;i<>j} x[i][j] = 1 | i=2,...,n

仅采用以上约束时,结果会形成多个不联通的循环。为防止这种情况,为每个城市规定一个访问循序的编号u[i]变量。u[i]=k表示该城市是第k个被访问的城市。规定u[0]=1,任意u[i]<=n-1。显然如果x[i][j]=1,即道路 i,j 被选定在循环路径中,则u[j]>=u[i]+1。用以下约束表达这个逻辑:

u[j]>=u[i]+1-n(1-x[i][j])|i=1,...,n;j=2,...,n;i<>j

上式中,如果x[i][j]=1, 则等价于u[j]>=u[i]+1。如果x[i][j]=0,则右端小于等于0,恒小于等于左端,相当于该约束不存在。

旅行商问题的Leapms模型

使用Cd表示城市的地理坐标,则问题的Leapms模型为

//The Traveling Salesman Problem
min sum{i=1,...,n;j=1,...,n;i<>j} x[i][j] D[i][j]
subject to
	sum{i=1,...,n;i<>j} x[i][j] = 1
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值