有没有办法在 PuLP 中实现 IRR 算法?

Is there a way to implement the IRR algorithm in PuLP?

Numpy 有一个函数可以让我计算浮点数数组的 IRR。我的问题是我试图在 PuLP 问题中使用它,我想传递给函数的数组由问题的变量组成。这里我

    problem = pulp.LpProblem("TIR_MINIMIZE", pulp.LpMaximize)
    price_ppa = pulp.LpVariable("price_ppa")
    price_production = []

    for i in range(10):
        price_production.append(price_ppa * annual_production[i])
        # anual_production is an array of values calculated outside the function

    irr = numpy.irr(price_production)

    # CONSTRAINTS #####################################################################################
    problem += irr>= 0.075

    objective_function = -irr
    problem += objective_function

    #####################################################################################################
    problem.solve()

并且此代码不起作用,因为 numpy.irr 需要一个浮点数数组,而我向它传递了一个 LpAffineExpressions 数组。我的问题是,有没有办法以一种比较简单的方式实现它?我曾尝试手动实现该算法,但我无法在 PuLP 约束定义中实现它。

理论

IRR 计算本质上是非线性的,因此无法在 PuLP 模型中处理。 PuLP 只处理线性模型。

练习

您正在调用 numpy.irr,但这必须在 LP 求解器为 运行 时调用。那是不允许的。 LP 求解器无法调用外部函数。