毕设老师要求利用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天,您在需要使用的时候【私信】联系我,我会为您补发。