基于python

时间:2015-06-18 13:30:50

标签: python algorithm sorting genetic-algorithm

我正在用Python编写排序算法。

例如,

假设我有1个父母生成的10个孩子。 每个孩子都有两个属性" Fitness"和"噪音"。

让我们说,我计算"健身"首先为10个孩子选择并选择3个最好的孩子(更高"健身"被选为最佳孩子)。例如,让我们将60,50,40作为3个最佳孩子的健身值。

现在我继续计算"噪音"这3个孩子中。再举个例子,让我们假设我得到了#34;噪音" 3个孩子为5,8,6。 (较少"噪音"被认为更好)。

如何找到基于最佳"健身"选择的排序算法?和"噪音"。理想情况下,我需要一个健康状况良好的孩子。低噪音"。我需要以一种方式对它们进行排序,以便从3个孩子中选出最好的孩子。

Initial 3 children:

Fitness {60,50,40} Noise {5,8,6}

排序后我理想的3个孩子应该是:

Fitness {60,40,50} Noise {5,6,8}

我也不确定如何选择噪音作为次要变量。

基本上我在python中寻找一个好的排序算法。

2 个答案:

答案 0 :(得分:4)

>>> 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)]

答案 1 :(得分:1)

假设你有一个元组列表,其中每个元组代表两个属性的适应度和噪音 - [(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