是否可以在要由 pyomo 求解器求解的目标函数中包含 abs()?



我收到此错误:

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_posmodel.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()函数。

最新更新