我仍在學(xué)習(xí)pyomo,到目前為止,我已經(jīng)取得了一些進(jìn)展:這個(gè)鏈接!給出了pyomo中的tsp示例。我復(fù)制了以下代碼。而且一切正常。但是,我無(wú)法打印出最佳路線,有人可以幫忙或者給我一個(gè)關(guān)于如何打印和繪制最佳路線的思路嗎?編碼:from pyomo.environ import * from pyomo.opt import SolverFactoryimport pyomo.environn=13distanceMatrix=[[0,8,4,10,12,9,15,8,11,5,9,4,10],[8,0,27,6,8,6,17,10,12,9,8,7,5],[4,7,0,7,9,5,8,5,4,8,6 ,10,8],[10,6 ,7,0,6,11,5 ,9,8,12,11,6,9],[12,8 ,19,6, 0,7,9,6,9,8,4,11,10],[9,6,5,11,7,0,10,4,3,10,6,5,7],[15,7 ,8,15,19,10,0,10,9,8,5,9,10],[8,10 ,5,9,6,4,10,0,11,5,9,6,7],[11,12,4,8, 19,13,9,11,0, 9,11,11,6],[5,9,8,12,8,10,8,5,9,0,6,7,5], [9,8,6,11,14,6,5,9,11,6,0,10,7], [4,7,10,6,31,5,9,6,11,7,10,0,9], [10,5,8,9,10,7,10,7,6,5,7,9,0]] startCity = 0model = ConcreteModel()model.M = Set(initialize=range(1, n+1))model.N = Set(initialize=range(1, n+1))model.c = Param(model.N, model.N, initialize=lambda model, i, j: distanceMatrix[i-1][j-1])model.x = Var(model.N, model.N, within=Binary)def obj_rule(model): return sum(model.c[n,j]*model.x[n,j] for n in model.N for j in model.N)model.obj = Objective(rule=obj_rule,sense=minimize)def con_rule(model, n): return sum(model.x[j,n] for j in model.N if j < n) + sum(model.x[n,j] for j in model.N if j > n) == 2model.con = Constraint(model.N, rule=con_rule,doc='constraint1')opt = SolverFactory("glpk")results = opt.solve(model)results.write()print('Printing Values')print(value(model.obj))
1 回答

一只甜甜圈
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
首先,您必須考慮解決方案采用的形式。如果我們看一下這個(gè)實(shí)現(xiàn),我們就會(huì)看到矩陣x的維數(shù)為NxN,域二進(jìn)制為0或1??紤]元素x [j] [k]等于1的含義。如果j <k或j> k,這意味著什么?
要提取x的值,一種簡(jiǎn)單的方法可能是
import numpy as np
N = len(model.N)
x = np.zeros((N,N))
for (i,j), val in model.x.get_values().items():
x[i-1,j-1] = val
然后,您可以根據(jù)需要使用x的值。
添加回答
舉報(bào)
0/150
提交
取消