2013-02-09 3 views
1

Я пытаюсь понять, как работают генетические алгоритмы. Как и все, чему я научился, пытаясь написать что-то на моем, однако мои знания очень ограничены, и я не уверен, что я делаю это правильно.Что не так с моим генетическим алгоритмом

Цель этого алгоритма состоит в том, чтобы увидеть, сколько времени потребуется половине стада для заражения болезнью, если половина этой популяции уже заражена. Это всего лишь пример, который я придумал в своей голове, поэтому я не уверен, что это даже будет жизнеспособным примером.

Некоторые отзывы о том, как я могу улучшить свои знания, будут приятными.

Вот код:

import random 

def disease(): 
    herd = [] 
    generations = 0 
    pos = 0 
    for x in range(100): 
     herd.append(random.choice('01')) 
    print herd 
    same = all(x == herd[0] for x in herd) 
    while same == False: 
     same = all(x == herd[0] for x in herd) 
     for animal in herd: 
      try: 
       if pos != 0: 
        after = herd[pos+1] 
        before = herd[pos-1] 
        if after == before and after == '1' and before == '1' and animal == '0': 
         print "infection at", pos 
         herd[pos] = '1' 
      #print herd 
       pos += 1 
      except IndexError: 
       pass 
     pos = 0 
     generations += 1 
     random.shuffle(herd) 
     #print herd 
    print "Took",generations,"generations to infect all members of herd." 
if __name__ == "__main__": 
    disease() 
+0

Действительно, что * неправильно с вашим алгоритмом? Вы говорите нам. Вы получаете какие-либо ошибки? Получает ли он неожиданный результат? – Volatility

+0

Нет ошибок, я имею в виду логику моего кода. Я не уверен, что он на 100% точным. Трудно отлаживать логику. – Max00355

+2

Это может быть лучше подходит для http://codereview.stackexchange.com/ – tacaswell

ответ

2

Ваш код не реализует GeneticAlgorithm. Я предлагаю вам начать сначала библиотеку с открытым исходным кодом, чтобы понять, как это работа, прежде чем реализовать свои собственные (в случае необходимости)

Чтобы иметь генетического алгоритма вам понадобится следующее:

1- Objective функция, которую вы стараются свести к минимуму

2- Хромосомное представление (например, реальное значение), которое моделирует переменные решения в вашей целевой функции. Ваша цель, чтобы найти лучшие хромосомы, которые минимизируют целевую функцию

3- Начальная популяция хромосом, чтобы начать поиск с (может быть случайным)

4- Генетические операторы т.е. отбора, кроссовера и мутации, которые вы претендуете к текущему населению, чтобы перейти к следующему поколению

5- Идите, пока не достигните критерия остановки, например максимальное количество генерации или желаемое значение пригодности

Это просто краткое описание того, что должно иметь реализация генетического алгоритма.

+0

Благодарим вас за отзыв, я знаю о недостатках в моем коде, поэтому я разместил это! Можете ли вы предложить любые библиотеки, на которые я могу посмотреть? – Max00355

+0

Я знаю, что несколько библиотек Java видят этот вопрос http://stackoverflow.com/questions/3300423/which-java-library-libraries-for-genetic-algorithms – iTech