我收到此错误:
ValueError: Cannot load a SolverResults object with bad status: error "
每当我在目标函数中使用abs()
函数时。
在开始之前,我将使用"非消极"和"非积极"这两个词,而不是"积极"和"消极"。这是因为在 Pyomo 中,两者之间存在区别,即"正"和"负"域排除0,而"非正"和"非负"域包括它)。
假设您有以下目标函数:
def obj_f(model):
return abs(model.x)
其中model.x
是模型中可以取正值和负值的变量。
为了使您的模型正常工作,您可以将model.x
拆分为两个变量,例如model.x_pos
和model.x_neg
。这意味着您将有一个变量用于model.x
的正部分(model.x_pos
),另一个变量用于model.x
的负部分(model.x_neg
)。
model.x_pos
只能取非负值,model.x_neg
只能取非正值。因此,model.x
可以转化为model.x_pos + model.x_neg
。您必须添加约束以确保model.x_pos
始终为非负数,并确保model.x_neg
始终为非正数。这可以通过在创建变量时设置域或向模型添加更多约束来完成。
这样,你可以这样表述你的目标函数:
def obj_f(model):
return model.x_pos - model.x_neg
(注意:由于model.x_neg
变量已经是负数或0,我们必须使用它前面的-
符号来使其成为正数)
这应该等效于在目标函数中使用abs()
函数。