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