我收到此错误:
ValueError: Cannot load a SolverResults object with bad status: error "
在目标函数中使用abs()
函数时。
答案 0 :(得分:0)
在开始之前,我将使用“非负”和“非正”来代替“正”和“负”。这是因为在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()
函数。