Python Pyomo-目标函数作为参数的平均值

Python Pyomo-目标函数作为参数的平均值,python,pyomo,Python,Pyomo,我试图用Pyomo解决一个LP问题,我希望目标函数是数据帧中某个特定参数的平均值(我称之为obj_param) 我以前是这样设置的: model = ConcreteModel() model.decision_var = Var(list(idx for idx in self.df.index), domain=NonNegativeReals) model.obj = Objective( expr= -1 * # because I want to maximize not m

我试图用Pyomo解决一个LP问题,我希望目标函数是数据帧中某个特定参数的平均值(我称之为
obj_param

我以前是这样设置的:

model = ConcreteModel()
model.decision_var = Var(list(idx for idx in self.df.index), domain=NonNegativeReals)
model.obj = Objective(
    expr= -1 *  # because I want to maximize not minimize
          sum(model.decision_var[idx] * df.loc[idx,'obj_param'] for idx in df.index)
)
decision_var
这里是一列计数(如经典农民问题中的“该作物的英亩数”),而
obj_param
是该“作物”的价值,因此我的目标(如文所述)是将该作物的英亩数乘以其价值,以使总价值最大化

这在农民问题上是有道理的,但在我的案例中,我实际上是想最大化每英亩土地的平均价值。(请原谅农夫的比喻,这里有点紧张。)

为此,我将目标更改如下:

model.obj = Objective(
    expr= -1 *  # because I want to maximize not minimize
          sum(model.decision_var[idx] * df.loc[idx,'obj_param'] for idx in df.index) /
          sum(model.decision_var[idx] for idx in df.index)
)
从概念上讲,这对我来说是正确的,但现在当我运行它时,我得到
RuntimeError:cannotwrite legal LP file。目标“obj”具有非二次非线性项。

我能模糊地理解这个错误在说什么,但我不完全明白这个方程是如何非线性的。无论哪种方式,更一般地说,我在问:在pyomo,是否有可能以我尝试的方式将目标定义为平均值

谢谢你的帮助