Невыпуклая оптимизация Python

Я использую пакет cvxpy form Python для решения проблемы невыпуклой оптимизации, которая задается следующим образом:

import numpy as np
import cvxpy as cp




def kl(a,b):
    if a==b:
        return 0.000001
    if b==0:
        return 1000000
    if a==0:
        return -np.log(1-b) 
    return a*np.log(a/b)+(1-a)*np.log((1-a)/(1-b))  

t = 0.5
q = 0.1
p = 0.1

d = cp.Variable()
c = t/(1-t)/(d*kl(a,q))

objective = cp.Minimize(c)
constraints = [ -np.log((a/q-1)*((1-(1-p)/q))) >= d, d >= 0 ]

prob = cp.Problem(objective,constraints)
result = prob.solve()
print(d.value)
print(constraints[0].dual_value)

Я думаю, что пакету не нравится функция в целевой функции, но это всего лишь предположение. Спасибо за помощь. С уважением


person Maurice Rolvien    schedule 29.04.2020    source источник
comment
cvxpy предназначен только для выпуклых задач.   -  person Erwin Kalvelagen    schedule 29.04.2020
comment
Спасибо! Есть ли пакет для невыпуклых задач?   -  person Maurice Rolvien    schedule 29.04.2020
comment
Некоторые глобальные решатели доступны через Pyomo.   -  person Erwin Kalvelagen    schedule 29.04.2020
comment
Большое спасибо за ваш совет   -  person Maurice Rolvien    schedule 29.04.2020


Ответы (1)


Оптимизаторы с ограничениями Scipy могут быть хорошими. Попробуйте одно из следующих:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html

person mousomer    schedule 19.07.2020