cvxopt: solver.cp выдает неправильный awnser - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь решить простую задачу выпуклой оптимизации с помощью 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). Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 14 мая 2019

Извините, мой вопрос не имеет смысла, поскольку функция ROI не вогнута ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...