Python非凸优化



我使用包cvxpy形式的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)

我认为这个包不喜欢目标函数中的函数,但这只是一个猜测。谢谢你的帮助。问候

Scipy约束的优化器可能很好。试试其中之一:

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

最新更新