一个从全部解中找到pareto-front的方法的实现

来源:互联网 发布:健身房软件哪个好 编辑:程序博客网 时间:2024/06/06 10:47

这个方法简直是太naive了,大概思路我先说下:

比如一共有N个solutions。从这里面找到彼此之间不互相dominate的solution,那么先从第一个解来看,然后来判断是否其它全部的解都不dominate它,如果有dominate它的solution的话,那么说明这个解不行,就接着判断第二个。知道最后一个,如果遍历过程中发现,其余的解都不dominate它,那么特就属于pareto-front中的一个解,写了个python的代码。

一共6组解,第一个解要求最大化,第二个要求最小化。


if __name__ == '__main__':        a = [[9, 2], [8, 5], [12, 1], [11, 3], [16, 2], [18, 7]]    b = []    i = 0    while i < len(a):        j = 0        while j < len(a):            if i != j:                vj1 = a[j][0]                vj2 = a[j][1]                vi1 = a[i][0]                vi2 = a[i][1]#                 print vj1, vi1, vj2, vi2                if (vj1 >= vi1 and vj2 <= vi2) and (vj1 > vi1 or vj2 < vi2):                    i += 1                    break                else:                    j +=1                if j == len(a):                    print a[i]                    i += 1                       break            else:                j += 1                   if i == len(a)-1 and j == len(a):                    print a[i]                        i += 1                                     


0 0