我有一个合理易处理的问题,其中有两个目标,我在其中应用了多目标进化算法(MOEA),如PSO,ACO,GA。
我想比较这些算法产生的帕累托与帕累托前沿的性能和质量。
由于可以列举问题中变量的范围,并且假设问题易于处理,我想使用暴力来获得Pareto前沿以与MOEAs进行比较。
然而,目前还不清楚如何使用蛮力获得帕累托前线?是否有可能在蛮力中使用支配地位?
欢迎任何想法/建议。
示例
考虑一个简单的多目标问题实例:
目标是在x,y,z上运行暴力,并评估objA,objB,objC并生成帕累托前沿。
答案 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)。