Как перевести набор / хромосому / ы в атрибут?
Итак, поскольку ответ на это в основном сказал, что я действительно должен изучить кодирование генов моих существ *, что я и сделал!
Итак, я создал следующую аккуратную маленькую (byte[]-) структуру:
Gene = {X, X, X, X, Y, Y, Y, Y, Z, Z, Z, Z}
куда
- X = представляет определенную черту в существе.
Y = Эти блоки контролируют, как, если и когда произойдут кроссоверы и мутации (16 возможных значений, я думаю, этого должно быть более чем достаточно!)
Z = длина цепи (в основном это для будущих сборок, где я хочу, чтобы эволюция контролировала даже длину всей цепи).
(То есть Z и Y можно рассматривать как META-информацию)
(Прежде чем спросить, да, это 12 байт:))
Мой вопрос к вам следующий:
Как бы я связал эти характеристики каждого "существа"?
По сути, я вижу это так (и, вероятно, именно так я и буду реализовывать): каждое "существо" может бегать, есть и размножаться, основные вещи. Я не думаю (я уверен, что, по крайней мере, я на это не надеюсь!) Мне понадобится фитнес-функция как таковая, но я надеюсь, что эволюция, поскольку в гонке за едой, партнерами и космосом, толкает существ к эволюции.
Это неправильный взгляд? Будет ли проще (заметьте, я программист, а не математик!) Смотреть на него как на один большой граф и "просто" взять его оттуда?
Или tl;dr: Можете ли вы указать мне правильное направление на статьи, исследования и / или примеры реализации этого?
(Еще больше; д-р; как мне перевести ген, например, на длину ноги?)
* Прочтите вопрос, я строю своего рода симулятор.
2 ответа
Раньше я не видел метаинформации, подобной вашим Y и Z, в последовательности генов генетического алгоритма (в моем ограниченном знакомстве с техникой). Ваш генетический алгоритм нетрадиционный?
Сколько черт у существа? Если ваши X представляют значения признаков, а последовательность гена может иметь переменную длину (Z), то что произойдет, если для всех признаков не определено достаточно X? Что произойдет, если у вас будет больше Х, чем черт вашего существа?
- Z должен быть фиксированным значением.
- Y должен быть параметрами вашей рутины генетической эволюции
- должен быть X (или набор X) для каждой черты существа (не больше, не меньше)
Если число X у вас фиксированное, то для каждой черты вы назначаете определенный индекс (или набор индексов) для представления этой черты.
РЕДАКТИРОВАТЬ:
Вы должны определить кодировку своих черт, которые должен представлять X: для длины ноги, например, у вас может быть несколько байтов, представляющих длину ноги. Если бы байты 3-5 были длиной ноги, вы могли бы представить длину в вашем X- векторе следующим образом:
[...101......]
Где точки являются другими представлениями черты. Вышеуказанный фрагмент представляет длину ноги 5 (что бы это ни значило). В приведенном ниже геноме по-прежнему имеется 5 в качестве длины ноги, но другие черты также заполнены.
[001101011011]
Взгляд на Митчелла, 1998, Введение в генетические алгоритмы, гл. 3.3, я нашел ссылку на Форрест и Джонс, 1994, Моделирование сложных адаптивных систем с помощью Echo. это относится к программному эхо, которое, кажется, делает то, что вы ищете (развивающееся существо в мире). На данный момент я не могу найти ссылку на него, но вот диссертация по реализации jEcho, Брайан Макиндои.