Я недавно изучаю Python Gekko, и я очень новичок в линейном программировании, поэтому извините за мое незнание в определенных темах.

У меня есть переменная, значение которой должно быть либо 0, либо должно быть больше 20.

Позже я узнал, что это называется полунепрерывной переменной. Мои вопросы как ниже

  1. Можно ли преобразовать указанное выше условие в линейное уравнение
  2. Так или иначе, Gekko поддерживает полунепрерывные переменные, поскольку я ничего не нашел об этом в документации.
2
GeneticSmart 8 Фев 2021 в 23:56

1 ответ

Лучший ответ

Вы можете использовать функцию if3(), чтобы применить это ограничение. Эта функция использует двоичную переменную для условия переключения, поэтому она преобразует задачу из задачи линейного программирования (LP) в задачу смешанного целочисленного линейного программирования (MILP).

result

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt

m = GEKKO()

p = m.Param(np.linspace(0,50))
y = m.if3(p-20,0,p)

m.options.IMODE=2
m.solve()

# plot solution
plt.plot(p.value,'r-',lw=3)
plt.plot(y.value,'b.-')
plt.show()
1
TexasEngineer 9 Фев 2021 в 11:14