Гекко требует, чтобы структура задачи (уравнения) оставалась постоянной, но значения переменных и границы могут изменяться. Если вам не нужны последние строки переменных, вы можете установить матрицу stati c, а затем включить или выключить каждую строку с помощью lower=upper=0
. Когда нижняя и верхняя границы равны, переменная фиксируется на этом значении и не используется оптимизатором.
from gekko import GEKKO
m = GEKKO()
k = 3
N = 6
Y = m.Array(m.Var, (N, k))
for i in range(N):
for j in range(k):
Y[i, j].value = 0
Y[i, j].lower = 0
if i<N:
Y[i, j].upper = 1
else:
Y[i, j].upper = 0
m.Maximize(Y[i,j])
m.solve(disp=False)
print('Problem: ' + str(i))
print(Y)
Это дает 6 решений, в которых значение Y
максимизировано.
Problem: 0
[[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]]
Problem: 1
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]]
Problem: 2
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]]
Каждый раз через l oop она решается с помощью еще одного ряда переменных.
Problem: 3
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0]]]
Problem: 4
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[0.0] [0.0] [0.0]]]
Problem: 5
[[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]
[[1.0] [1.0] [1.0]]]