我正在用Python编写排序算法。
例如,
让我说,我有10个孩子,从一个父母。每个孩子都有“健康”和“噪音”两个属性。
比如说,我先计算出10个孩子的“健康度”,然后只选择3个最好的孩子(较高的“健康度”被选为最佳)。例如,让我们以60,50,40作为三个最好的孩子的健身值。
现在我开始计算这三个孩子的“噪音”。同样的,让我们假设我得到了3个孩子的“噪音”作为5,8,6。(较少的“噪音”被认为更好)。
如何找到一种基于最佳“适应度”和“噪声”的排序算法。理想情况下,我需要一个高“健康”和“低噪音”的孩子。我需要从三个孩子中挑选出最好的孩子。
Initial 3 children:
Fitness {60,50,40} Noise {5,8,6}
我理想的三个孩子排序后应该是:
Fitness {60,40,50} Noise {5,6,8}
我也不知道如何给出选择噪声作为次要变量的权重。
基本上,我在python中寻找一个很好的排序算法。
发布于 2015-06-18 13:36:08
>>> from collections import namedtuple
>>> Child = namedtuple('Child', 'fitness noise')
>>> children = [Child(fitness=60, noise=5),
... Child(fitness=50, noise=8),
... Child(fitness=40, noise=6)]
您可以使用内置的sorted
函数,并传递一个lambda作为键。lambda返回用于比较的对象。如果我们返回一个元组,它将根据元组的第一个元素进行排序,然后是第二个元素,等等。
如果我们让元组首先是噪音,然后是适应度的负值,它会给出你想要的顺序:
>>> sorted(children, key=lambda child: (child.noise, -child.fitness))
[Child(fitness=60, noise=5),
Child(fitness=40, noise=6),
Child(fitness=50, noise=8)]
发布于 2015-06-18 13:39:52
假设您有一个元组列表,其中每个元组表示适合性和噪声- [(10,5),(90,7),(100,12) ...]
这两个属性,您可以使用以下代码-
>>> l = [(100,5),(89,13),(102,65),(10,3),(109,45)]
>>> l.sort(key = lambda x:x[0], reverse = True) ## Sorting(descending) on the basis of fitness
>>> l_ = l[:3] ## Extract the top 3 tuples
>>> l_.sort(key = lambda x:x[1]) ## Sorting on the basis of noise
https://stackoverflow.com/questions/30916782
复制相似问题