Извините, если это не ясно, поскольку я пишу это на мобильном устройстве, и я пытаюсь сделать это быстро.Использование GA в GUI
Я написал базовый генетический алгоритм с бинарным кодированием (генами), который строит значение пригодности и развивается через несколько итераций, используя выбор турнира, мутацию и кроссовер. В качестве базового примера командной строки, похоже, работает.
Проблема, с которой я столкнулся, заключается в применении генетического алгоритма в GUI, поскольку я пишу программу для решения лабиринта, которая использует GA для поиска метода через лабиринт. Как превратить мои случайные двоичные кодированные гены и функцию фитнеса (добавить все двоичные значения вместе) в метод управления ботом вокруг лабиринта? Я построил базовый графический интерфейс на Java, состоящий из лабиринта ярлыков (например, сетки) с доступными маршрутами в синем, а стены - черными.
Чтобы повторить, моя GA хорошо работает и содержит то, что любой обычный GA (метод пригодности, получение и установка совокупности, выбор, кроссовер и т. Д.), Но теперь мне нужно подключить его к графическому интерфейсу, чтобы запустить мой лабиринт. Что нужно делать, чтобы получить бота, который может двигаться в разных направлениях в зависимости от того, что говорит ГА? Грубый псевдокод был бы замечательным, если это возможно
В соответствии с запросом индивидуальный пользователь построил отдельный класс (Indiv), причем все основные работы выполнялись в классе Pop. Когда создается новый индивид, массив ints представляет гены упомянутого человека, причем гены выбираются случайным образом из числа от 0 до 1. Функция фитнеса просто добавляет вместе значение этих генов и в классе дескрипторов класса Pop , мутация и кроссовер двух отобранных индивидуумов. Там не так уж и много, программа командной строки просто показывает эволюцию в течение n поколений, при этом общая пригодность улучшается на каждой итерации.
EDIT: Это начинает делать немного больше смысла сейчас, хотя есть несколько вещей, которые давали мне покой ...
Как Адамской предложила я хочу создать «Агент» с опцией показана ниже , Проблема, с которой я столкнулся, заключается в том, что здесь играет случайная бит-строка. Агент знает, где находятся стены и выкладывается ли он в 4-битовой строке (то есть 0111), но как это влияет на случайную 32-битную строку? (Т.е. 10001011011001001010011011010101) Если у меня есть следующий лабиринт (х начало место, 2 цель, 1 стена):
x 1 1 1 1
0 0 1 0 0
1 0 0 0 2
Если я повернуть налево, я неправильно сориентирована и агент будет полностью перемещайтесь от лабиринта, если он движется вперед. Я предполагаю, что первое поколение строки будет полностью случайным, и оно будет развиваться по мере роста фитнеса, но я не понимаю, как строка будет работать в лабиринте.
Таким образом, чтобы получить это прямо ...
фитнес является результатом, когда агент способен двигаться и стеной.
Гены представляют собой строку из 32 бит, разделенную на 16 наборов из 2 битов, чтобы показать доступные действия, и для того, чтобы робот мог перемещать два бита, необходимо передать четыре бита из показания агента, его положение у стен , Если движение должно пройти мимо стены, движение не производится, и оно считается недействительным, и если ход сделан, и если новая стена будет найдена, то фитнес поднимается.
Это правильно?
Возможно, вы могли бы предоставить более подробную информацию о том, какая информация кодируется у каждого развитого человека? –
Я отредактировал главный вопрос, хотя на данный момент ничего действительно важного не кодируется, на данный момент для каждого человека существует 500 генов, а метод случайных чисел добавляет либо 1, либо 0 внутри. – AlexT