Python CVXOPT似乎为这个简单的二次规划提供了非最优结果
我正试图用CVXOPT解一个简单的二次规划,但我很困扰,因为我能猜出一个比解算器提供的最优解更好的可行解。优化的形式如下: 最后,我将提供p、q、G、h、A和b的定义。导入并运行时:Python CVXOPT似乎为这个简单的二次规划提供了非最优结果,python,cvxopt,quadratic-programming,Python,Cvxopt,Quadratic Programming,我正试图用CVXOPT解一个简单的二次规划,但我很困扰,因为我能猜出一个比解算器提供的最优解更好的可行解。优化的形式如下: 最后,我将提供p、q、G、h、A和b的定义。导入并运行时: from cvxopt import matrix, spmatrix, solvers # Code that creates matrices goes here sol = solvers.qp(P, q, G, h, A, b) 结果是: pcost dcost gap
from cvxopt import matrix, spmatrix, solvers
# Code that creates matrices goes here
sol = solvers.qp(P, q, G, h, A, b)
结果是:
pcost dcost gap pres dres
0: 0.0000e+00 -5.5000e+00 6e+00 6e-17 4e+00
1: 0.0000e+00 -5.5000e-02 6e-02 1e-16 4e-02
2: 0.0000e+00 -5.5000e-04 6e-04 3e-16 4e-04
3: 0.0000e+00 -5.5000e-06 6e-06 1e-16 4e-06
4: 0.0000e+00 -5.5000e-08 6e-08 1e-16 4e-08
Optimal solution found.
Objective = 0.0
但是,我可以定义一个不同的解决方案猜测解决方案
,该解决方案可行,并进一步最小化目标:
guessed_solution = matrix([0.5,0.5,0.0,0.0,0.0,0.0,0.5,0.5,0.0,0.0,1.0])
# Check Ax = b; want to see zeroes
print(A * guessed_solution - b)
>>>
[ 0.00e+00]
[ 0.00e+00]
[ 2.78e-17]
# Check Gx <= h; want to see non-positive entries
print(G * guessed_solution - h)
>>>
[-5.00e-01]
[-5.00e-01]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[-5.00e-01]
[-5.00e-01]
[-1.00e+00]
[-1.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[-1.00e+00]
# Check objective
print(guessed_solution.T * P * guessed_solution + q.T * guessed_solution)
>>>[-6.67e-01]
您的二次型在假设方面无效
它需要是PSD(和对称的)
使其对称:
P = (P + P.T) / 2
将导致cvxopt显示错误,这是由于p不确定:
import numpy as np
np_matrix = np.array(P)
print(np.linalg.eigvalsh(np_matrix))
#[-8.16496581e-01 -7.45355992e-01 -5.77350269e-01 -2.40008780e-16 -6.33511351e-17 -4.59089160e-17 -3.94415555e-22 5.54077304e-17 5.77350269e-01 7.45355992e-01 8.16496581e-01]
你得到了一个为凸优化问题设计的解算器(当且仅当p是PSD)由一些非凸优化问题反馈。(一般来说)这是行不通的。谢谢-检查这些要求太草率了。
import numpy as np
np_matrix = np.array(P)
print(np.linalg.eigvalsh(np_matrix))
#[-8.16496581e-01 -7.45355992e-01 -5.77350269e-01 -2.40008780e-16 -6.33511351e-17 -4.59089160e-17 -3.94415555e-22 5.54077304e-17 5.77350269e-01 7.45355992e-01 8.16496581e-01]