Python GEKKO的二元优化

Python GEKKO的二元优化,python,gekko,Python,Gekko,我试图通过随机定义一个NxN对称矩阵和一个N维偏差向量,用Gekko和qobj解决一个二次二元优化问题。然而,我观察到计算时间低得令人怀疑:用N=20求解2e-2s,用0.05s求解200维问题。此外,我从未得到超过3-4次迭代。我是不是遗漏了什么 import numpy as np N = 20 #create square symmetric matrix for the quadratic term b = np.random.normal(0,1,(N,N)) Q = (b + b.T

我试图通过随机定义一个NxN对称矩阵和一个N维偏差向量,用Gekko和
qobj
解决一个二次二元优化问题。然而,我观察到计算时间低得令人怀疑:用N=20求解2e-2s,用0.05s求解200维问题。此外,我从未得到超过3-4次迭代。我是不是遗漏了什么

import numpy as np
N = 20
#create square symmetric matrix for the quadratic term
b = np.random.normal(0,1,(N,N))
Q = (b + b.T)/2
#bias vector for linear term
c=np.random.normal(0,1,N)
from gekko import GEKKO
m = GEKKO(remote=False)
z = m.Array(m.Var,N,integer=True,lb=0,ub=1,value=1)
m.qobj(c,A=Q,x=z,otype='min')
m.solve(disp=True)

任何建议都将不胜感激

切换到APOPT解算器以获得混合整数解

m.options.SOLVER=1
这是完整的脚本。MIQP问题通常非常快。如果问题是非线性(NLP)和混合整数元素(MINLP),则速度会显著减慢

将numpy导入为np
N=200
#为二次项创建平方对称矩阵
b=np.随机.正态(0,1,(N,N))
Q=(b+b.T)/2
#线性项的偏置矢量
c=np.随机.正态(0,1,N)
从gekko进口gekko
m=GEKKO(远程=False)
z=m.Array(m.Var,N,integer=True,lb=0,ub=1,value=1)
m、 qobj(c,A=Q,x=z,otype='min')
m、 选项。解算器=1
m、 求解(disp=True)
打印(z)

谢谢你的回答!我想问一下,这类问题是否有500个变量的限制?这就是我观察到的…变量的数量没有限制。然而,计算时间可能会增加。
[[0.0] [1.0] [1.0] [0.0] [1.0] [1.0] [1.0] [1.0] [1.0] [0.0] [1.0] [1.0]
 [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [0.0] [1.0] [1.0] [1.0]
 [1.0] [1.0] [1.0] [1.0] [0.0] [1.0] [0.0] [1.0] [1.0] [0.0] [0.0] [0.0]
 [0.0] [1.0] [1.0] [0.0] [0.0] [1.0] [1.0] [1.0] [1.0] [1.0] [0.0] [1.0]
 [1.0] [1.0] [0.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [0.0]
 [0.0] [1.0] [0.0] [0.0] [0.0] [0.0] [1.0] [1.0] [0.0] [0.0] [0.0] [0.0]
 [1.0] [1.0] [0.0] [0.0] [1.0] [1.0] [0.0] [1.0] [1.0] [0.0] [1.0] [1.0]
 [0.0] [1.0] [0.0] [0.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0]
 [0.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0]
 [1.0] [1.0] [1.0] [0.0] [0.0] [0.0] [1.0] [1.0] [1.0] [1.0] [1.0] [1.0]
 [0.0] [0.0] [1.0] [1.0] [0.0] [1.0] [0.0] [1.0] [0.0] [1.0] [1.0] [1.0]
 [0.0] [0.0] [0.0] [0.0] [1.0] [0.0] [0.0] [1.0] [1.0] [0.0] [0.0] [1.0]
 [1.0] [1.0] [0.0] [1.0] [0.0] [0.0] [1.0] [1.0] [1.0] [1.0] [0.0] [1.0]
 [0.0] [0.0] [0.0] [0.0] [0.0] [0.0] [1.0] [1.0] [1.0] [1.0] [1.0] [0.0]
 [0.0] [0.0] [1.0] [1.0] [1.0] [1.0] [0.0] [1.0] [0.0] [0.0] [1.0] [1.0]
 [0.0] [0.0] [0.0] [1.0] [1.0] [1.0] [0.0] [1.0] [0.0] [1.0] [0.0] [0.0]
 [0.0] [1.0] [1.0] [1.0] [0.0] [1.0] [1.0] [0.0]]