Scipy Optimize忽略分配的约束

问题描述

首先,我要感谢您的帮助。我目前正在尝试使用scipy.optimize优化功能。我正在努力为解决方案分配约束。请举这个小例子:

让我们假设这是优化的论据

index = range(10)
columns = ['Risk Free Rate','Call ATM Ask','Call ATM Bid','Call OTM Ask','Call OTM 
Bid','Put ATM Ask','Put ATM Bid','Put OTM Ask','Put OTM Bid']
df = pd.DataFrame(np.random.randn(10,9),index=index,columns=columns)

u_mean是我要优化的功能

#functions
def pret(weights,rets):
    return np.sum(weights*(rets))
def utility(weights,rets):
    return -((1/(1-10))*((1+(pret(weights,rets))))**(1-10))
def u_mean(weights,data):
    c=0
    for i in range(0,10):
        p=utility(weights,data.iloc[i,:])
        c=c+p
    mean=c/10
    return mean

这是我为优化编写的代码

import scipy.optimize as scpo

# constraints:
cons_eq1 = ({'type': 'eq','fun': lambda x:  np.sum(x)-1})
#cons_eq2 = {'type': 'eq','fun': lambda x: x[1]*x[2]}
#cons_eq3 = {'type': 'eq','fun': lambda x: x[3]*x[4]}
#cons_eq4 = {'type': 'eq','fun': lambda x: x[5]*x[6]}
#cons_eq5 = {'type': 'eq','fun': lambda x: x[7]*x[8]}
#cons_ineq = {'type': 'ineq','fun': lambda x: x[0]-0.9}
#cons=[cons_eq1,cons_eq2,cons_eq3,cons_eq4,cons_eq5,cons_ineq]

# bounds: weights must be in the [0,1] interval
bnds = tuple((0,1) for x in range(9))

# initial guess:
weights = np.array([1,0])

# optmize weights to get maximum mean utility
opts = scpo.minimize(u_mean,weights,method='SLSQP',bounds=bnds,constraints=cons_eq1,args=df)
opt_sr = opts['x'] 
opt_sr

代码输出通常是(因为该示例使用随机分配的值)一个9个权重的数组,这些权重之和不等于1,从而违反了cons_eq1。此外,如果我输入问题中的其他非活动约束,则输出始终是初始猜测。我该如何解决

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)