Я пытаюсь решить простую задачу выпуклой оптимизации с помощью cvxopt. Я хочу максимизировать функцию ROI с x и y> = 1 и x + y <= 6 </p>
import numpy as np
def ROI(x,y):
return np.exp(-x)*x*10+np.exp(-y)*y**2*10
тогда я использую cvxopt, чтобы минимизировать -ROI (x, y) при условии G * (x, y) '<= h </p>
from cvxopt import solvers, blas, matrix, spmatrix, spdiag, log, div
G=matrix([[-1.,0.,1.],[0.,-1.,1.]],(3,2))
h=matrix([-4.,-1.,6.],(3,1))
def F(x=None, z=None):
if(x is None):
return 0,matrix([1.,1.],(2,1))
f = - ROI(x[0],x[1])
grad = matrix([(10*x[0]-10)*np.exp(-x[0]),(10*x[1]**2-20*x[1])*np.exp(-x[1])])
if (z is None):
return f,grad.T
d = [(-10*x[0]+20)*np.exp(-x[0])*z[0],(-10*x[1]**2-20+40*x[1])*np.exp(-x[1])*z[0]]
H = spdiag(d)
return f, grad.T, H
sol = solvers.cp(F, G, h)
оптимальное решение, которое дает решатель, - это (5,1), которое ложно, например, ROI (4,2)> ROI (5,1). Спасибо за вашу помощь!