2

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

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 中执行此操作.. 只需要有人指出我正确的方向

4

2 回答 2

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

这表明问题又是一个单一的目标优化。

于 2018-11-30T05:21:41.137 回答
0

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

于 2019-07-11T14:54:14.647 回答