Третье его письмо.
===============================================
Сегодня, наконец, добрался до домашнего компьютера, начинаю отвечать на письма в порядке поступления.
Первым прочитал это, отвечаю.
'2) каждый ген представлен в геноме (пока, для упрощения модели) в единственном экземпляре (т.е. гены не амплифицируются)
'3) максимальная длина генома ограничена
'4) есть три типа генов - влияющие на скорость роста, частоту рекомбинаций, частоту мутаций
имеется в виду скорость роста чего? Количества молекул ДНК в моделируемой популяции?
Да, конечно. Просто я по микробиологической привычке ростом назвал размножение (профессиональный сленг).
'5) скорость роста зависит от как от активности отдельных генов, так и от длины генома (увеличение длины в среднем снижает скорость роста из-за увеличения времени копирования ДНК, по крайней мере для прокариотов и вирусов это утверждение справедливо)
Таким образом, с каждым геном ассоциируется так же некоторый параметер - "активность гена", так?
Да. Активность для простоты (пока?) принимает только целые значения в диапазоне 0-255 (точнее, от MinValue до MaxValue).
Type Gene 'описание гена
locus As Byte 'номер локуса, в котором расположен ген
activity As Byte 'активность гена
type As Byte 'тип гена
name As String 'название аллели (временно не используется)
End Type
С биологической точки зрения, активность гена - это количество молекул белка, синтезируемых на его основе за единицу времени. В дальнейшем предполагается разделить гены на группы (опероны), каждый оперон снабдить своим геном-регулятором активности (который тоже может мутировать), и дать генам возможность случайным образом скакать из оперона в оперон. Тогда геном будет гораздо более похож на реальный. А модель сможет в ходе эволюции группировать гены по оперонам, что должно резко повысить ее "обучаемость".
'6) перед каждым размножением происходит генетическая рекомбинация по принципу "каждый с каждым"
Здесь я чего-то запутался. Если рекомбинация происходит перед размножением, то что есть само размножение?
Положим, мы моделируем N экземпляров ДНК, представленных в виде векторов типа
- ABC0EF
- 0BCDEF
- 000D00
и т.д.
Скрещивание - по принципу каждый с каждым. Т.е. в Вашем примере ABC0EF "попарно" скрестится с ABC0EF, с 0BCDEF, с 000D00, 0BCDEF скрестится с 0BCDEF, 000D00 и т.д. Все "родители" выпустили в окружающую среду гаметы (сперматозоиды и яйцеклетки), в количествах, пропорциональном своей "родительской" численности, гаметы перемешались, попарно скрестились и образовали новые генотипы. Эти новые генотипы начнут размножаться в следующем цикле.
("большая шведская семья" ). Эту процедурку я уже написал.
Означает ли размножение попросту увеличение в определённое число раз числа определённых экземпляров ДНК (чем они "успешнее", тем больше коэффициент мультипликации).
Да. Правило, по которому вычисляется коэффициент мультипликации (т.е. вклад отдельных генов в этот коэффициент), будет плавно меняться по очень простому закону.
А не получится ли так, что установится "тривиальное равновесие", когдв выживет лишь один генотип?
Для этого я ввожу ограничение на длину генома (конечно, организму выгодно собрать в одном геноме все "хорошие" гены, но, с другой стороны, увеличение длины генома при прочих равных условиях снижает коэффициент репликации). Возможно, окажется выгоднее иметь маленький геном с большим количеством "пустых" локусов. Т.е., "на вскидку", единственного решения ("идеального генома") быть не должно.
Вообще, это сильно напоминает классические генетические алгоритмы в ИИ.
Как показывает практика, они способны адаптироваться (выходить в состояние устойчивого равновесия), но к настоящему обучению в нашем понимании (подстройка не только под статическую, но и под динамическую среду, правила игры в которой меняются по достаточно простым законам), похоже, не способны. По видимому, для этого нужно учитывать взаимное влияния генов друг на друга, что бы они могли постепенно выстраиваться в генные сети определённой функциональности и иерархические пирамиды управления.
Про генетические алгоритмы не знаю (не встречался, только слышал краем уха).
А насчет взаимного влияния - см. выше организацию генов в динамически меняющиеся опероны.
Но, как я уже говорил, если уж писать, то, имхо, лучше сразу на С. На одном VB далеко не уедешь.
Согласен. Просто я плохо (очень плохо?) пишу на С. Поэтому хочу отладить логику на хорошо знакомом VB (здесь мне не надо думать о языке, а только - о модели и алгоритмах), а потом перевести уже отлаженные алгоритмы на С. Мне так проще. А если сразу писать на С, буду думать не столько о логике, сколько о "кодировании".