pyomo+gurobi,利用整数线性规划方式求解mtsp时的问题

毕设老师要求利用pyomo+gurobi,利用整数线性规划方式求解mtsp。

根据下面的约束进行编程

在没有(2)(3)条件时,tsp是可以跑通的,而加入条件(2)(3)后,mtsp无法跑通

本人编程小白,希望大家能给我一些建议

下面是我的代码,帮助解决问题后可以发个红包表示感谢 

from pyomo.environ import*
import pyomo.environ
m=3
n=13
cost_matrix=[[9999,8,4,10,12,9,15,8,11,5,9,4,10],
             [8,9999,7,6,8,6,7,10,12,9,8,7,5],
             [4,7,9999,7,9,5,8,5,4,8,6 ,10,8],
             [10,6,7,9999,6,11,5,9,8,12,11,6,9],
             [12,8,9,6,9999,7,9,6,9,8,4,11,10],
             [9,6,5,11,7,9999,10,4,3,10,6,5,7],
             [15,7,8,5,9,10,9999,10,9,8,5,9,10],
             [8,10,5,9,6,4,10,9999,11,5,9,6,7],
             [11,12,4,8, 9,3,9,11,9999,9,11,11,6],
             [5,9,8,12,8,10,8,5,9,9999,6,7,5],
             [9,8,6,11,4,6,5,9,11,6,9999,10,7],
             [4,7,10,6,11,5,9,6,11,7,10,9999,9],
             [10,5,8,9,10,7,10,7,6,5,7,9,9999]]  
model = ConcreteModel()

#Indexes for the cities
model.M = RangeSet(n)                
model.N = RangeSet(n)

#Index for the dummy variable u
model.U = RangeSet(2,n)
#Decision variables xij
model.x = Var(model.N,model.M, within=Binary)

#Dummy variable ui
model.u = Var(model.N, within=NonNegativeIntegers,bounds=(0,n-1))
#Cost Matrix cij
model.c = Param(model.N, model.M,initialize=lambda model, i, j: cost_matrix[i-1][j-1])
def obj_func(model):
    return sum(model.x[i,j] * model.c[i,j] for i in model.N for j in model.M)

model.objective = Objective(rule=obj_func,sense=minimize)
def rule_const1(model,M):
    return sum(model.x[i,M] for i in model.N if i!=M ) == 1

model.const1 = Constraint(model.M,rule=rule_const1)
def rule_const2(model,N):
    return sum(model.x[N,j] for j in model.M if j!=N) == 1

model.rest2 = Constraint(model.N,rule=rule_const2)

def rule_const3(model,i,j):
    if i!=j and i>=2 and j>=2 and i<=n and j<=n: 
        return model.u[i] - model.u[j] + model.x[i,j] * n <= n-1
    else:
        #Yeah, this else doesn't say anything
        return model.u[i] - model.u[i] == 0 
    
model.rest3 = Constraint(model.U,model.N,rule=rule_const3)

def rule_const4(model):
    return sum(model.x[1,j] for j in model.M  ) == m

model.const4 = Constraint(model.N,rule=rule_const4)

def rule_const5(model):
    return sum(model.x[j,1] for j in model.M  ) == m

model.rest5 = Constraint(model.N,rule=rule_const5)

opt = SolverFactory("gurobi", solver_io="python") 
results = opt.solve(model)
results.write()
l = list(model.x.keys())
for i in l:
    if model.x[i]() != 0:
        print(i,'--', model.x[i]())

 

您好,我是有问必答小助手,您的问题已进入加速通道,我们会尽快安排专家团为您解决~

 

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。