在 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 (将#修改为@)