打印文档 solve() 结果为数据帧



我使用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

并且也应该适用于具有多个维度的变量。

最新更新