Полупопулярный частично отображенный кроссовер (MPPMX) - псевдокод бесконечного цикла?
У меня есть следующий псевдокод:
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, где вы сможете получить рабочую функцию, которая короче псевдокода статьи.