微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中寻找等效的目标?

如何解决在 Python 中寻找等效的目标?

我有一个函数 CalibrateTree,它运行另外两个函数 GenerateInterestRateTreeGenerateCashFlowTree(前者也是后者的输入),并检查索引处的第一个值 [输出 (cf_tree.iloc[0,0]) 的 0,0] 是 = 100。如果不是这种情况,它会适当增加/减少输入 (trial_rates[maturity-2]) 之一,直到该值达到 100。>

以下是我的代码 - 它完全按预期工作。 par_ratestrial_rates 是列表; volmaturityp 是数字; ir_treecf_treeprev_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(因为这是 GenerateInterestRateTreeGenerateCashFlowTree 计算中的输入)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。