带有 GEKKO 的 MINLP - 离散变量建模

计算科学 优化 Python 非线性规划 壁虎
2021-12-25 00:52:25

我正在尝试在 Python 中使用 GEKKO 定义一个 MINLP 优化问题,并且我想使用一些具有固定值的变量。

对于我的第一个变量 x1,我需要定义以下值(在列表中定义):x1 = [19.05, 25.0, 29.3, 30.2]

如何在我的模型中定义这些类型的变量?

2个回答

下面是使用 Gekko (v0.2.4+) 定义 SOS1 变量的示例,该变量具有目标函数以找到该值序列中的最小值。

from gekko import GEKKO
m = GEKKO()
y = m.sos1([19.05, 25.0, 29.3, 30.2])
m.Obj(y) # select the minimum value
m.solve()
print(y.value)

Gekko 文档中提供了有关模型构建函数的其他信息(请参阅模型构建函数)

如果他们没有限制为离散集的变量,您可以像这样制定它:

b1 = m.Var(lb=0,ub=1,integer=True) #Binary variable
b2 = m.Var(lb=0,ub=1,integer=True) #Binary variable
b3 = m.Var(lb=0,ub=1,integer=True) #Binary variable
b4 = m.Var(lb=0,ub=1,integer=True) #Binary variable
a  = m.Var()                       #Variable indicating which choice from the set was made
m.Equation(b1+b2+b3+b4==1)
m.Equation(a==19.05*b1+25.0*b2+29.3*b3+30.2*b4)

实际上,您需要一个SOS1约束,但 Gekko 似乎没有使用这些约束。

Gekko 可能不是解决这个问题的最佳软件!没有二进制变量,没有 SOS 约束,没有指定一组值的高级方法。