0

我使用 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()我设法得到结果。

type的 tms 是<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
4

1 回答 1

1

您可以在“_”上拆分变量名称并直接为数据框创建数据,就像在这个简短的代码片段中一样:

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

并且也应该适用于一维以上的变量。

于 2020-06-22T05:20:44.157 回答