优化中的多个目标

时间:2018-10-30 14:49:44

标签: python optimization or-tools

所以在一个典型的线性优化问题中,我将有一个这样的目标:

Example of a Linear Program
   maximize:
     3x + y
   subject to:
     1.5 x + 2 y <= 12
     0 <= x <= 3
     0 <= y <= 5

但是,也许我想有两个目标?例如(不确定是否可以添加一个简单的示例)

maximize:
         3x + y
  maximize:
          3x
       subject to:
         1.5 x + 2 y <= 12
         0 <= x <= 3
         0 <= y <= 5

所以说类似我想最大化3x + y的值,但是在这些解决方案中最大3 * x。 基本上,我要问的是有两个变量优化吗?在哪里可以设定两个目标?

我使用专门的Google-OR工具在python中执行此操作。只需要有人将我指向正确的方向

2 个答案:

答案 0 :(得分:1)

当您有多个目标时,通常没有一个目标,而是一组最佳解决方案,因为您通常会在目标之间进行权衡。 这意味着,如果您采用最佳解决方案,则可以在维持最佳性的同时,以牺牲其他目标为代价,进一步提高其中一个目标。

要解决您的问题,也许您可​​以为每个目标分配一个权重,然后将它们组合为一个目标,例如:

maximize:
     5(3x + y) + 2(3x)
   subject to:
     1.5 x + 2 y <= 12
     0 <= x <= 3
     0 <= y <= 5

在此示例中,我是说我想最大化两个目标,但是为了消除最优解的多样性,我是在说我希望第一个目标的优先级高于第二个目标(权重52

当然,我可以将前面的示例重写为:

maximize:
     21x + 5y
   subject to:
     1.5 x + 2 y <= 12
     0 <= x <= 3
     0 <= y <= 5

这表明问题再次是单个目标优化。

答案 1 :(得分:0)

如果按@guissoares的回答进行加权还不够好,那么最好的选择是: 1.尝试许多不同的权重,保留所有解决方案,并观察帕累托前沿(即权衡) 2.使用NSGA2等多目标算法。