如何在 GEKKO 中的变量"Array"中设置变量名称



在MINLP问题中,我有一个FV参数的(n x p(矩阵。

当我使用下面的列表理解来定义FV时,我最终得到了一个可行性

for i in range(n):
test[i] = [m.FV(lb=0, ub=1, integer=True, name="example) for j in range(p)]

另一方面,当我使用数组时,我会很快得到解决方案。

for i in range(n):
test[i] = m.Array(m.FV, p, lb=0, ub=1, integer=True)

我想在FV中添加变量名,这样我就可以快速排除故障并选择最佳解决方案中的参数。对于列表理解来说,这是相当直接的,但对于数组,我唯一的选择似乎是制作重复的名称,这并不太有用。

问题是将变量重命名为example或其他名称会导致test变量不再是整数类型。底层APMonitor引擎将以int开头的变量识别为整数类型。更改为其他内容可以使求解器不需要找到整数解,并且可以成功地找到非整数解。

一般来说,将问题作为连续问题与整数问题来解决要容易得多。我建议初始化:

m.options.SOLVER = 1
m.solver_options = ['minlp_as_nlp 1']
m.solve()

然后用再次求解,得到一个整数解(如果可能的话(:

m.options.SOLVER = 1
m.solver_options = ['minlp_as_nlp 0']
m.solve()

如果它在第二次求解中失败,那么很可能没有整数解,或者求解器未能在所需迭代次数中收敛。您可以使用增加迭代次数

m.options.MAX_ITER=1000

如果它很难找到整数解决方案,那么尝试添加一个额外的选项来进行深度优先搜索:

m.options.SOLVER = 1
m.solver_options = ['minlp_as_nlp 0', 
'minlp_branch_method 1']
m.options.MAX_ITER=1000
m.solve()

关于在Gekko中设置解算器选项,还有更多信息:如何在Python Gekko中将解算器设置为选项(如容错(?以及有关解算器选项的更多信息。

最新更新