我使用docplex包创建了一个优化模型。
这就是我定义决定变量的方式。
x = {(i.supply,i.demand,i.product): tm.integer_var(name='x_{0}_{1}_{2}'.format(i.supply,i.demand,i.product),ub=10000000) for i in cost_list}
使用tms = tm.solve()
我设法得到了结果。
TMS的type
是<class 'docplex.mp.solution.SolveSolution'>
。 我的输出如下。
solution for: transportation
objective: 60
x_1_3_a = 1
x_1_3_b = 3
我需要将x_1_3_a = 1 & x_1_3_b = 3
放在数据帧中(x,1,3,a,1
结果在不同的列中(。有人可以建议我如何做到这一点。
---After the edit---
预期输出熊猫数据帧如下所示。
Var,supply,demand,product,qty
x,1,3,a,1
x,1,3,b,3
您可以在"_"上拆分变量名称,并直接为数据帧创建数据,如以下简短代码片段所示:
with Model() as m:
x = m.binary_var_list([1, 2, 3], name='x')
m.minimize(m.sum(x))
sol = m.solve(log_output = True)
print(dir(sol))
print(sol)
data = [v.name.split('_') + [sol.get_value(v)] for v in m.iter_variables()]
frame = pd.DataFrame(data, columns = [ 'var', 'index', 'value'])
print(frame)
这打印
var index value
0 x 1 0
1 x 2 0
2 x 3 0
并且也应该适用于具有多个维度的变量。