如何解决在 Python 中寻找等效的目标?
我有一个函数 CalibrateTree
,它运行另外两个函数 GenerateInterestRateTree
和 GenerateCashFlowTree
(前者也是后者的输入),并检查索引处的第一个值 [输出 (cf_tree.iloc[0,0]
) 的 0,0] 是 = 100。如果不是这种情况,它会适当增加/减少输入 (trial_rates[maturity-2]
) 之一,直到该值达到 100。>
以下是我的代码 - 它完全按预期工作。 par_rates
和 trial_rates
是列表; vol
、maturity
和 p
是数字; ir_tree
、cf_tree
和 prev_tree
是数据帧。
def CalibrateTree(par_rates,trial_rates,vol,maturity,p,ir_tree,cf_tree,prev_tree=None):
while abs(cf_tree.iloc[0,0] - 100) > 0.00001:
ir_tree = GenerateInterestRateTree(par_rates,prev_tree)
cf_tree = GenerateCashFlowTree(par_rates,ir_tree)
if cf_tree.iloc[0,0] < 100:
trial_rates[maturity-2] = trial_rates[maturity-2] - 0.0000001
if cf_tree.iloc[0,0] > 100:
trial_rates[maturity-2] = trial_rates[maturity-2] + 0.0000001
return ir_tree,cf_tree
这显然是极其粗糙和低效的——DataFrames 很容易变成 (20,20) 或更大的形状,而在我的机器上,这个代码仅用于形状 (5,5) 就需要 20 多分钟。通常在 Excel 中,这可以通过使用 GoalSeek 而不是这种蛮力解决方法轻松快速地解决,但是我似乎无法在 Python 中找到合理的替代方案。
为清楚起见,GoalSeek 将是:通过更改 cf_tree.iloc[0,0]
来设置 trial_rates[maturity-2]
= 100(因为这是 GenerateInterestRateTree
和 GenerateCashFlowTree
计算中的输入)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。