我们可以添加numpy对象纸浆目标函数吗

问题描述

我遇到了以下代码

from pulp import *
import numpy as np
prob = LpProblem("lp_prob",LpMinimize)
decision_variables = LpVariable.dicts('x',range(5))
prob += np.sum(decision_variables.values())

当我在计算机上尝试相同的代码时,在最后一行给出了以下错误

TypeError: Can only add LpConstraintvar,LpConstraint,LpAffineExpression or True objects

不能将numpy数组添加LpProblem中。现在我正在猜测给定的代码是否不正确?还有其他任何方式/版本(python和/或numpy和/或纸浆)可以在numpy对象中添加LpProblem吗?

解决方法

  1. decision_variables不是一个numpy数组。这是一本字典,这就是为什么您可以decision_variables.values()来做。

  2. decision_variables.values()也不是一个numpy数组,它是一个dictvalues对象。

  3. np.sum的结果不是一个numpy数组。 应用于numpy数组时,它应返回标量值。但是对于dictvalues对象,它什么也不做(至少没有总和)。

  4. 我不确定您为什么在这里完全需要使用np.sum

在纸浆中,一组纸浆变量(列表,dictvalue,dictkey等)的总和通过lpSum函数(https://www.coin-or.org/PuLP/pulp.html#pulp.lpSum)完成。

prob += lpSum(decision_variables.values())