获得超过2个目标的帕累托前线

时间:2015-02-24 22:56:43

标签: algorithm search optimization evolutionary-algorithm

我有一个合理易处理的问题,其中有两个目标,我在其中应用了多目标进化算法(MOEA),如PSO,ACO,GA。

我想比较这些算法产生的帕累托与帕累托前沿的性能和质量。

由于可以列举问题中变量的范围,并且假设问题易于处理,我想使用暴力来获得Pareto前沿以与MOEAs进行比较。

然而,目前还不清楚如何使用蛮力获得帕累托前线?是否有可能在蛮力中使用支配地位?

欢迎任何想法/建议。

示例

考虑一个简单的多目标问题实例:

  1. [1,100]
  2. 中的整数变量x,y,z
  3. 目标:objA,objB,objC
  4. 目标是在x,y,z上运行暴力,并评估objA,objB,objC并生成帕累托前沿。

1 个答案:

答案 0 :(得分:1)

维持一组正在运行的帕累托最优点,并在观察每个新点时逐步更新它。在实践中,这可以比生成所有点然后进行强力O(n 2 )计算以找到帕累托最优点更好。

这是一些Python代码来演示这个想法。

S = {}
def update(p):
  if any(q > p for q in S):
    return
  for q in [q for q in S if p > q]:
    S.remove(q)
  S.add(p)

如果n次更新的S的平均大小为k,则复杂度为O(nk)。