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

set*_*127 5 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 minimize
          sum(model.decision_var[idx] * df.loc[idx,'obj_param'] for idx in df.index)
)
Run Code Online (Sandbox Code Playgroud)

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)
)
Run Code Online (Sandbox Code Playgroud)

从概念上讲,这对我来说是正确的,但是现在当我运行它时,我得到了 RuntimeError: Cannot write legal LP file. Objective 'obj' has nonlinear terms that are not quadratic.

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

谢谢你的帮助!