python - 有没有办法在 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 约束定义中执行此操作。
解决方案
理论
IRR 计算本质上是非线性的,因此无法在 PuLP 模型中处理。PuLP 只处理线性模型。
实践
您正在调用numpy.irr
,但必须在 LP 求解器运行时调用。这是不允许的。LP 求解器不能调用外部函数。
推荐阅读
- r - 如何使用 R 将 for 循环结果转换为向量
- twilio - 将自定义参数传递给 Twilio API 的问题
- powershell - 如何将源路径列表中定义的文件复制到cmd或powershell中的输出路径列表?
- swift - Swift 5 thumbnailImageForActivityType 方法未调用
- bash - 两种模式之间的 Grep 线,一种独特,一种重复
- c++ - 如何使用 DeviceIOControl 将键盘按下发送到视频游戏?
- python - 为 HTTP 方法实现不同的序列化策略
- java - Eclipse 在导入项目时抛出 Gradle 错误
- json - 在谷歌浏览器主题 manifest.json 中更改多功能框中的突出显示颜色
- r - 如果 A 列和 B 列在 C 列中有多个对应值,则删除行