在 TSP 中实现顺序公式Miller、Tucker、Zemlin

问题描述

我正在尝试以不同的方式解决 TSP。我已经用 Dantzig、Fulkerson 和 Johnson 的公式做了,现在我想使用 Miller、Tucker、Zemlin 约束。

enter image description here

我有点卡住了,因为我不知道如何实现它,而且我在互联网上找不到任何有用的东西。有人知道怎么做吗?

import numpy as np
import matplotlib.pyplot as plt
from docplex.mp.model import Model
import docplex.mp.solution as Solution

# for sequentiel solving 

from itertools import product

cost = np.loadtxt('matrix_time-independent_2017to2019_delete.txt')

cities=[i for i in range(len(cost))]
#print(cities)
arcs =[(i,j) for i in cities for j in cities if i!=j]


distance={(i,j): cost[i,j] for i,j in arcs}
#print(distance)

# CPLEX model
mdl=Model('TSP')

# decision variables

x=mdl.binary_var_dict(arcs,name='x')
d=mdl.continuous_var_dict(cities,name='d')

mdl.minimize(mdl.sum(distance[i]*x[i] for i in arcs))

# Constraints
for c in cities:
    mdl.add_constraint(mdl.sum(x[(i,j)] for i,j in arcs if i==c)==1,ctname='out_%d'%c)
    
for c in cities:
    mdl.add_constraint(mdl.sum(x[(i,j in arcs if j==c)==1,ctname='in_%d'%c)

    
# conventional way to eliminate subtours (Dantzig,Fulkerson and Johnson)
for i,j in arcs:
    if j!=0:
        mdl.add_indicator(x[(i,j)],d[i]+1==d[j],name='order_(%d,_%d)'%(i,j))
        
# sequential formulation (Miller,Tucker,Zemlin)
for (i,j) in arcs:
    if i != j:

???

print(mdl.export_to_string())

# possible to add constraint

mdl.parameters.timelimit=120
mdl.parameters.mip.strategy.branch=1
mdl.parameters.mip.tolerances.mipgap=0.15

solution = mdl.solve(log_output=True)

mdl.get_solve_status()

solution.display()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)