Я новичок в использовании Lua, и я создаю решение TSP в Lua с использованием генетического алгоритма, но функция рандомизации порядков населения, похоже, перезаписывает другие порядки.Каждый раз, когда новый порядок проходит через рандомизатор, он рандомизирует свой порядок иначе, чем все предыдущие заказы, но он также устанавливает все предыдущие заказы равными себе.
Я отладил, чтобы локализовать проблему, и я 'Я уверен, что это происходит, но независимо от того, сколько раз я прохожу это, я не могу понять, почему.Есть ли что-то явно очевидное, чего мне не хватает?
Просто показывает, что таблицы создаются правильно и задано начальное значение рандомизатора.
order = {}
population = {}
math.randomseed(os.time())
Вот используемые функции подкачки и перемешивания.Они должны работать должным образом на основе моих тестов, но всегда возможно, что я что-то пропустил.
function swap(tbl, i, j)
tbl[i], tbl[j] = tbl[j], tbl[i]
end
function shuffle(tbl)
for i = #tbl, 2, -1 do
local j = math.random(#tbl)
swap(tbl, i, j)
end
return tbl
end
Установка начального порядка
for i = 1, 10 do
order[i] = i
end
Вероятно, это проблемная область
for i = 1, 10 do
population[i] = order
shuffle(population[i])
end
То, что должно происходить здесь, это то, что начальный порядок должен быть установлен как базовый от 1 до 10, затем следующий цикл должен заполнить население 10 различными рандомизированными порядками.Вместо этого второй цикл назначает первую таблицу случайному порядку, а затем в следующий раз, когда она проходит через нее, очевидно, устанавливает следующий порядок и все порядки перед ним в новый случайный порядок, делая их равными друг другу к тому времени, когдацикл завершается.
Я проверил функции перемешивания и обмена в контролируемых средах и уверен, что они работают правильно.Кроме того, первоначальный порядок устанавливается правильно.
Любые идеи приветствуются, спасибо