Печать результатов docplex solution () в кадре данных - PullRequest
0 голосов
/ 19 июня 2020

Я создал модель оптимизации, используя пакет docplex.

Вот как я определил переменную decission.

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 ТМС равно <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---

Ожидаемый результат pandas фрейм данных следующим образом.

Var,supply,demand,product,qty
x,1,3,a,1
x,1,3,b,3

1 Ответ

1 голос
/ 22 июня 2020

Вы можете разделить имена переменных на '_' и напрямую создать данные для фрейма данных, как в этом коротком фрагменте кода:

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

и должен работать и для переменных с более чем одним измерением.

...