首页 > 解决方案 > 有没有办法在 PuLP 中实现 IRR 算法?

问题描述

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 约束定义中执行此操作。

标签: pythonlinear-programmingpulpirr

解决方案


理论

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

实践

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


推荐阅读