Я работаю над задачей многокритериальной оптимизации, в которой используется генетический алгоритм для отображения наилучшего решения уже более года.
Проблема заключается в распределении людей по разным командам в соответствии с рядом критериев. Я уже завершил этап инициализации, и кодирование фитнес-функции также завершено. Однако у меня возникают проблемы с сохранением сгенерированных (двумерных массивов) решений в виде объектов и их временным хранением в памяти, чтобы их можно было использовать на более поздних этапах GA: Selection, Crossover и Mutation.
Я использую селекцию по принципу колеса рулетки и немного другие алгоритмы кроссовера и мутации. У меня нет проблем с этим. Просто я не смог найти способ временно сохранить 1 сгенерированное решение (в данном случае полное распределение команды) в памяти, а затем сгенерировать другое решение и сохранить его в памяти, затем еще одно и так далее.
Я пробовал довольно много разных вещей, которые я мог придумать, из которых я могу вспомнить две: (i) изменил тип 2d-массива с int на Object, но это дало ошибку, поскольку 2d-массив, который создает команды, использует другой массив int для определения позиции индекса идентификатора человека в списке; (ii) использование статической переменной поля класса, которая должна увеличиваться каждый раз после запуска класса начальной генерации популяции.
Я исследовал это в течение нескольких месяцев и перепробовал все, что мог придумать. Если бы кто-то мог направить меня или даже дать мне подсказку о том, как я могу сохранить массив 2d, чтобы я мог использовать его на более поздних этапах GA, это было бы очень полезно.
Спасибо
отредактировано: это начальный класс населения, который имеет бит массива 2d, который создает команды: каждая строка представляет номер команды, а столбцы - это идентификаторы членов (я исключил некоторый код, который ссылался на другие классы, и вместо этого выразил это словами):
int
кObject
— не очень хорошая идея, вы хотели бы, по крайней мере, подняться доInteger
, если видите преимущество использования класса-оболочки. - person Makoto   schedule 20.07.2012noTeams
заполнено целочисленным значением? Если это так, причина, по которой ваши массивы не будут работать, заключается в том, что вы не выделяете места в первом измерении. - person Makoto   schedule 21.07.2012member.mList.size()
; Не могли бы вы прямо сообщить нам, что это такое, или подтвердить, что оно больше 1? - person Makoto   schedule 21.07.2012