Определение многомерных параметров Pyomo с использованием срезов - PullRequest
1 голос
/ 11 мая 2019

Я использую Pyomo для моделирования определенной задачи оптимизации, в прошлом я использовал параметры только из двух измерений, однако сейчас я пытаюсь определить 4-мерный параметр, используя срезы. Наиболее удобный способ для меня - определить срезы, которые представляют собой матрицы 2x2, вот пример того, что я хочу с допустимым синтаксисом в AMPL:

param d:=

[*,*,1,1]:  1   2   3   4   5   6 :=
1   0.00    3.47    3.31    3.27    3.26    0.00
2   3.47    0.00    0.18    4.97    6.03    3.47
3   3.31    0.18    0.00    4.81    5.86    3.31
4   3.27    4.97    4.81    0.00    1.81    3.27
5   3.26    6.03    5.86    1.81    0.00    3.26
6   0.00    3.47    3.31    3.27    3.26    0.00

[*,*,2,1]:  1   2   3   4   5   6 :=
1   0.00    3.47    3.31    3.27    3.26    0.00
2   3.47    0.00    0.18    4.97    6.03    3.47
3   3.31    0.18    0.00    4.81    5.86    3.31
4   3.27    4.97    4.81    0.00    1.81    3.27
5   3.26    6.03    5.86    1.81    0.00    3.26
6   0.00    3.47    3.31    3.27    3.26    0.00;

Однако я думаю, что этот синтаксис недопустим в Pyomo. Документация Pyomo показывает, как определять параметры через слайсы, используя шаблоны кортежей, например:

set A := (a,1,a,1) (a,2,a,2) (b,1,b,1) (b,2,b,2);
param B :=
[*,1,*,1] a a 10 b b 20
[*,2,*,2] a a 30 b b 40
;

Но предпочел бы использовать матричный формат, аналогичный AMPL. Кто-нибудь знает, как мне это сделать?

...