Python 对Gekko整数变量求平方时的解决方案不正确

Python 对Gekko整数变量求平方时的解决方案不正确,python,gekko,Python,Gekko,如果将布尔变量初始化为0,则会得到错误的解决方案(0)。如果我将其初始化为1,则得到正确的解决方案(1) 返回: Successful solution Objective: 0. 使用b:[0] 这是前一个问题()的后续问题,该问题涉及两个gekko数组与gekko整数变量的矩阵乘法模型。我相信我已经找到了这个问题的根源。试试这个: 从gekko导入gekko m=GEKKO() b=m.Var(值=0,整数=True) m、 方程(b>=0) m、 方程式(bAPOPT解算器是一个局部极

如果将布尔变量初始化为0,则会得到错误的解决方案(0)。如果我将其初始化为1,则得到正确的解决方案(1)

返回:

Successful solution
Objective:  0.
使用
b:[0]

这是前一个问题()的后续问题,该问题涉及两个gekko数组与gekko整数变量的矩阵乘法模型。我相信我已经找到了这个问题的根源。

试试这个:

从gekko导入gekko
m=GEKKO()
b=m.Var(值=0,整数=True)
m、 方程(b>=0)

m、 方程式(bAPOPT
解算器是一个局部极小值,它假设只有一个局部极小值。它也不检查二阶导数,以区分
x=0
处的局部极小值和局部极大值。Hernán Alarcón给出了一个潜在的解决方案,其中不等式约束也得到了解决。这导致解算器无法执行st接受最初的猜测作为解决方案,但要开始搜索并意识到有更好的解决方案。至少还有两种方法可以找到正确的解决方案

用x>=1e-3初始化

不要在
x=0
处初始化,而是尝试在任何不符合条件的值处初始化
x

从gekko导入gekko
m=GEKKO(远程=False)
b=m.Var(lb=0,ub=1,integer=True,value=1e-3)
m、 最大化(b**2)
m、 选项。解算器=1
m、 求解(disp=False)
打印(-m.options.OBJFCNVAL)
切换解算器

这是一个整数优化问题,但非线性规划(NLP)解算器(如
IPOPT
)也可以解决
value=0
的问题

从gekko导入gekko
m=GEKKO(远程=False)
b=m.Var(lb=0,ub=1,integer=True,value=0)
m、 最大化(b**2)
m、 选项。解算器=3
m、 求解(disp=False)
打印(-m.options.OBJFCNVAL)
Successful solution
Objective:  0.
[1.0]