Scipy Minimize 限制变量总和?

问题描述

问题

取一笔分配给多种货币的现金,然后根据既定的收益率计划重新分配现金。如果现金余额为负,它将使用贷方利率表(如果为正则借方)。此外,现金余额不能“变成负”或比现在更负(我还没有建立这个约束)。

当我构建尝试优化时(如下所示),显示选项显示没有发生迭代并返回相同的结果。我希望所有现金都进入最高利率(在本例中为英镑),从而使总回报最大化。

数据

import numpy as np
from scipy.optimize import shgo

def objective(x):             
     applied_rate = np.where((x<0),rates_sched[0],rates_sched[1])
     total_return = np.dot(applied_rate,x)
     return -total_return

def constraint1(x):
     return sum(x) - sum(cash_start) # constrain cash to starting point

cash_start = np.array([799181,-411087,141234,2650988])

rates_sched = np.array([[.00196,.05320,-.0003,0.0],[0.01,.00865,-.0076,.00028]])


bnds = []

for value in cash_start:
    if value <0:
        bnd = (value,sum(cash_start))
    else:
        bnd = (0,sum(cash_start))
    bnds.append(bnd)

con1 = {'type': 'eq','fun': constraint1}
solution = shgo(objective,bounds = bnds,constraints = con1)

当前的 Scipy 最小化设置

df = pd.read_csv("test.txt",delimiter ="\s\s+")
df[df.columns[0]] = df[df.columns[0]].str.replace("option199716","")

>>> df
        0        1         2   3   4
0  751810   Pascal      Male  23  11
1  845087  Achille      Male  13  12
2  602183     Hera  Femelles   9  98
3  802183     Alma  Femelles  19  88

更新

我将 scipy.optimize 算法切换到 shgo 并且我越来越接近了。当前的问题是结果数组 (x) 不遵守约束。

解决方法

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

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

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