2013-03-01 1 views
1

저는 유전 알고리즘 문제에 대해 연구하고 있습니다. Individual()의 목록을 가진 Population() 클래스가 있다고 가정합니다. 각 개인은 그것에 관련된 점수를 가지고 있습니다. 인구에서 자신의 점수에 따라 이들 개인을 순위를 매기거나 순위를 매기는 좋은 방법은 무엇입니까? 예 :클래스에 따른 구성원의 속성으로 주문하십시오.

class Individual(object): 
    rr = 100 
    def __init__(self): 
     self.score = random.randrange(self.rr) 

class Population(object): 
    def __init__(self, size): 
     self.size = size 
     self.population = [Individual() for _ in xrange(self.size)] 

pop = Population(5) 
for i in xrange(pop.size): 
    print pop.population[i].score 

이러한 개인을 점수별로 분류 할 수있는 방법이 있습니까? 감사!

답변

3

확실히는 .sort() 방법에 key 매개 변수를 사용

from operator import attrgetter 
pop.population.sort(key=attrgetter('score')) 

operator.attrgetter()이 좀 더 쉽게 만들지 만 필요하지 않은 사용.

더 많은 도움말과 유용한 정보는 Python wiki의 Sorting Howto을 참조하십시오. 어떤 라이브러리를 가져 오지 않고

+0

...... 화려한! – Rock

+0

'rr'이 아닌 'score'가 있어야합니다. 그러나 좋은 대답입니다. – mVChr

+0

@mVChr : 실제로 수정되었습니다. 감사. –

1
sorted_pop = sorted(pop.population, lambda x, y: cmp(x.score, y.score)) 
+1

cmp 함수를 사용하면 더 많은 작업이 가능하며 [해결 방법] (http://docs.python.org/3/library/functools.html#functools.cmp_to_key)이 있지만이 옵션은 Python 3에서 제거되었습니다. . –

+0

@MartijnPieters 잘 알려 줘서 고마워. – mVChr

0

:

pop.population.sort(key=lambda x: x.score) 
관련 문제