В этой задаче оптимизации (моя упрощенная версия с одной переменной) у меня есть одна переменная, и я пытаюсь максимизировать цель. Ответ должен быть x = 4 с objfcnval, равным 2, поскольку по мере увеличения x это будут вычисления: 0 - 0 = 0, 1 - 2 = -1, < strong> 2 - 2 = 0, 3 - 2 = 1, 4 - 2 = 2, 5 < / сильный> - 4 = 1.
Вот код:
def my_ceiling(elem1, elem2):
if (elem1 // elem2) == (elem1 / elem2):
return elem1 / elem2
else:
return (elem1 // elem2) + 1
m = gekko.GEKKO(remote=False)
m.options.SOLVER = 1
x = m.Var(value=0, lb=0, ub=5, integer=True)
m.Obj((-1) * (x - 2 * my_ceiling(x, 4)))
m.solve(disp=False)
print('Objective: ' + str((-1) * m.options.objfcnval))
if (elem1 // elem2) == (elem1 / elem2):
TypeError: unsupported operand type(s) for //: 'GKVariable' and 'int'
Проблема в том, что, видимо, такая операция не поддерживается. Как я могу использовать Gekko для таких проблем?