GEKKO的二元优化

2024-04-29 00:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过定义一个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)

任何建议都将不胜感激


Tags: importtruefor定义np矩阵random向量
1条回答
网友
1楼 · 发布于 2024-04-29 00:21:22

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

m.options.SOLVER=1

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

import numpy as np
N = 200
#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.options.SOLVER=1
m.solve(disp=True)
print(z)
[[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]]

相关问题 更多 >