Полупопулярный частично отображенный кроссовер (MPPMX) - псевдокод бесконечного цикла?

У меня есть следующий псевдокод: http://i.imgur.com/ls6NECn.png?1

7: мы создаем массив со значениями bool (очевидно, это не объясняется в статье). Мы присваиваем текущее значение (значение = индекс) "истина"

18: В этот момент у нас может быть массив, в котором все значения могут быть "истинными" и достигать условия k = len(parent)19-22: это создаст бесконечный цикл

Я что-то пропустил?

Бумага: многопользовательское расширение частично сопоставленного кроссовера для задач комбинаторной оптимизации. Chuan-Kang Tinga,, Chien-Hao Sub, Chung-Nan Leeb,

http://www.sciencedirect.com/science/article/pii/S0957417409006800

// РЕДАКТИРОВАТЬ: ЗДЕСЬ ИДЕТ МОЙ КОД PYTHON-2.6

def MappingListDetermination(parents):
    mapping_list = []
    startparent = parents[random.sample(xrange(0, len(parents)), 1)[0]]
    ptr = random.sample(xrange(0, len(startparent)), 1)[0]
    temp_value = startparent[ptr]
    boolean = [False] * listSize
    for j in xrange(0,len(startparent)):
        mapping_list.append(temp_value)
        boolean[temp_value-1] = True
        arr = random.sample(xrange(0, n), n)
        if arr[0] == parents.index(startparent):
          arr[0] = arr[random.sample(xrange(1, len(arr)), 1)[0]]
        endparent = parents[arr[0]]
        ptr = endparent.index(temp_value)
        k = 0
        while((boolean[startparent[ptr]-1] is True) and (k is not len(parents)-1)):
            k = k + 1           
            startparent = parents[arr[k]]
        if((boolean[startparent[ptr]-1] is True) and (k is len(parents)-1)):
            while(boolean[startparent[ptr]-1] is True ):
                startparent = parents[random.sample(xrange(0, len(parents)), 1)[0]]
                ptr = startparent[random.sample(xrange(0, len(startparent)), 1)[0]]-1
        temp_value = startparent[ptr]ere

1 ответ

Я только что скачал копию бумаги и пролистал ее. Это выглядит интересно, но вы правы, что boolean не определено В контексте это, кажется, массив, длина которого представляет собой количество родителей, которое отслеживает, какие родители были выбраны на определенном этапе алгоритма. Таким образом - начинается со всех записей false и после строки 7 в псевдокоде только одна запись true - таким образом, нет опасности бесконечной петли (учитывая, что есть по крайней мере три родителя).

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

Другие вопросы по тегам