我正在尝试在 Python 中使用 GEKKO 定义一个 MINLP 优化问题,并且我想使用一些具有固定值的变量。
对于我的第一个变量 x1,我需要定义以下值(在列表中定义):x1 = [19.05, 25.0, 29.3, 30.2]
如何在我的模型中定义这些类型的变量?
我正在尝试在 Python 中使用 GEKKO 定义一个 MINLP 优化问题,并且我想使用一些具有固定值的变量。
对于我的第一个变量 x1,我需要定义以下值(在列表中定义):x1 = [19.05, 25.0, 29.3, 30.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 约束,没有指定一组值的高级方法。