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

0 python pyomo

我收到此错误:

ValueError: Cannot load a SolverResults object with bad status: error " 
Run Code Online (Sandbox Code Playgroud)

abs()每当我在目标函数中使用函数时。

V. *_*lle 6

在开始之前,我将使用“非负”和“非正”这两个词来代替“正”和“负”。这是因为在Pyomo中,两者是有区别的,即“正”和“负”域不包括0,而“非正”和“非负”包括0)。

假设您有以下目标函数:

def obj_f(model):
    return abs(model.x)
Run Code Online (Sandbox Code Playgroud)

其中model.x是模型中可以取正值和负值的变量。

为了使您的模型正常工作,您可以分为model.x两个变量,比如说model.x_posmodel.x_negmodel.x这意味着您将有一个变量代表( )的正数部分,另一个变量代表( )model.x_pos的负数部分。model.xmodel.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
Run Code Online (Sandbox Code Playgroud)

(注意:由于model.x_neg变量已经是负数或0,所以我们必须使用-它前面的符号将其变为正数)

这应该相当于abs()在目标函数中使用函数。