algorithm - 获得超过 2 个目标的帕累托前沿

标签 algorithm search optimization evolutionary-algorithm

我有一个相当容易处理的问题,有 >2 个目标,我在其中应用多目标进化算法 (MOEA),如 PSO、ACO、GA。

我想将这些算法生成的 Pareto 的性能和质量与 Pareto 前沿进行比较。

由于问题中的变量范围是可以枚举的,而且只要问题是易于处理的,我想用蛮力来获得 Pareto 前沿来与 MOEAs 进行比较。

但是,目前还不清楚如何通过暴力破解得到Pareto前沿?是否可以在蛮力中使用优势排名?

欢迎提出任何想法/建议。

示例

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

  1. 整数变量 x,y,z [1,100]
  2. 目标:objA、objB、objC

目标是在 x、y、z 上运行暴力计算并评估 objA、objB、objC 并生成帕累托前沿。

最佳答案

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

这里有一些 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)

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

关于algorithm - 获得超过 2 个目标的帕累托前沿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28707998/

相关文章:

java - Ford-Fulkerson 不规则性(多个顶点与回流)

java - Realm 数据库中的搜索操作速度

python - 在 Python 中查找图像像素和调色板颜色之间差异的最快方法

java - 海量IO操作服务器选择哪种技术

给定所有其他数字出现两次,查找在数组中仅出现一次的数字的算法

algorithm - 16 位哈佛机中的冒泡排序

algorithm - 对未排序数组中最大的 n 个数求和

javascript - 搜索引擎是否可以抓取 AJAX 网站?

search - 在 Elastic Search 中模拟字段折叠/按字段分组

python - 减少 MapReduce 结果的有效方法?