本文主要是介绍一个从全部解中找到pareto-front的方法的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这个方法简直是太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 = 0while i < len(a):j = 0while 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, vi2if (vj1 >= vi1 and vj2 <= vi2) and (vj1 > vi1 or vj2 < vi2):i += 1breakelse:j +=1if j == len(a):print a[i]i += 1 breakelse:j += 1 if i == len(a)-1 and j == len(a):print a[i] i += 1
这篇关于一个从全部解中找到pareto-front的方法的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!