我正在尝试将 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 中以我试图做的方式将目标定义为平均值?
谢谢你的帮助!
归档时间: |
|
查看次数: |
185 次 |
最近记录: |