我收到此错误:
ValueError: Cannot load a SolverResults object with bad status: error "
Run Code Online (Sandbox Code Playgroud)
abs()每当我在目标函数中使用函数时。
在开始之前,我将使用“非负”和“非正”这两个词来代替“正”和“负”。这是因为在Pyomo中,两者是有区别的,即“正”和“负”域不包括0,而“非正”和“非负”包括0)。
假设您有以下目标函数:
def obj_f(model):
return abs(model.x)
Run Code Online (Sandbox Code Playgroud)
其中model.x是模型中可以取正值和负值的变量。
为了使您的模型正常工作,您可以分为model.x两个变量,比如说model.x_pos和model.x_neg。model.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()在目标函数中使用函数。
| 归档时间: |
|
| 查看次数: |
3162 次 |
| 最近记录: |