问题描述
问题
取一笔分配给多种货币的现金,然后根据既定的收益率计划重新分配现金。如果现金余额为负,它将使用贷方利率表(如果为正则借方)。此外,现金余额不能“变成负”或比现在更负(我还没有建立这个约束)。
当我构建尝试优化时(如下所示),显示选项显示没有发生迭代并返回相同的结果。我希望所有现金都进入最高利率(在本例中为英镑),从而使总回报最大化。
数据
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 (将#修改为@)