指定多个目标

指定多个目标

让我们首先讨论管理多个目标的接口。一个空模型从一个目标函数开始,这个目标函数最初只是0.0。我们称它为基本的客观的。您可以通过两种方式修改主要目标:您可以设置obj.属性,也可以使用setobjective.来自您的语言API的方法(例如,model.setObjective.在Python)。对于具有单个目标的模型,该主要目标可以是线性的,二次或分段线性的。通常,不特异于多目标优化的属性和方法将与主要目标函数合作。

多目标模型中的每个目标都具有以下可设置的属性:ObjNCon默认值为0,objnpriority.默认值为0,objnweight.默认值1,objnreltol.默认值为0,objnabstol.默认值为0,和objname.

提供额外的目标,使用setobjectiven.来自您的语言API的方法(例如model.setobjectiven.在Python)。目标是编号0.通过numobj-1。目标的顺序是任意的,但您必须为每个的唯一索引提供(使用该指定指数争论setobjectiven.)。您可以使用模型中的目标数量使用numobj.属性。请注意,所有目标(包括主要目标)必须是多目标模型的线性。

您可以使用该信息查询和修改有关多目标的信息objnumber.参数,与多个模型和可变属性一起使用。例如,检索变量系数X目标是<span> $ </ span> 2 <span> $ </ span>,你设置了objnumber.参数到<span> $ </ span> 2 <span> $ </ span>,然后查询objn.属性X。同样,查询objname.设置后属性objnumber.<span> $ </ span> 3 <span> $ </ span>会给目标名称<span> $ </ span> 3 <span> $ </ span>

我们应该注意到,我们的陈述存在一个重要的例外,目标秩序是任意的:目标<span> $ </ span> 0 <span> $ </ span>被视为主要目标。结果是原始目标自动变得客观<span> $ </ span> 0 <span> $ </ span>当您添加第二个目标时。另一个是询问objn.属性等同于查询obj.属性objnumber.<span> $ </ span> 0 <span> $ </ span>

请注意,模型具有单个客观意义(由此控制)模型属性)。这意味着您无法最大限度地提高第一个目标并最小化第二个目标。但是,您可以通过简单的技巧实现相同的结果。每个目标具有重量,并且允许这些重量为负。最小化目标函数相当于最大化该功能的否定。

您可以随心所欲地更改模型中的目标数量(通过修改numobj.属性)。当您增加客观计数时,新目标及其相关属性将设置为0.减少计数时,丢弃新计数的目标。如果将目标的数量设置为零,则该模型将成为纯粹的可行性问题。

我们已经扩展了LP和MPS文件格式,因此编写一个具有多个目标的模型将捕获这些目标。同样,如果您读取包含多个目标的模型文件,那么numobj.objn.将捕获存储在文件中的目标。看看文件格式有关详情的部分。