Имя: Пароль:
IT
 
Хочу написать генетический алгоритм. Нужен совет.
0 batmansoft
 
30.09.13
18:03
В общем, решил я написать некую игру, в которой бы эволюционировали некие виртуальные роботы, живущие в виртуальном пространстве. Посоветуйте плз, как лучше всего кодировать в "генах" структуру этого робота?
1 Fragster
 
модератор
30.09.13
18:04
ну нужны какие-то параметры, которые бы определяли целевую функцию...
2 Fenrik
 
30.09.13
18:04
(0) Это важно, в игре можно будет грабить корованы?
3 batmansoft
 
30.09.13
18:06
(2) А если нельзя грабить корованы, то игра плохая?
4 Джинн
 
30.09.13
18:07
(3) Совсем негодная!
5 Fenrik
 
30.09.13
18:08
(3) И совершенно бессмысленная.
6 Mikeware
 
30.09.13
18:08
(3) ну хотя бы враги и трупы - трехмерные?
7 badboychik
 
30.09.13
18:11
(6) Босс = главбух?
8 Господин ПЖ
 
30.09.13
18:13
бутылка с ядом традиционно содержит больше полигонов чем модель 1с-ника?
9 batmansoft
 
30.09.13
18:15
(1) Ну ту целевая функция имеет только два значения - выжил или помер.
Я вот ту подумал над концепцией, зацените плз, вы бы захотели в такую игру играть?
"Задумал я тут намедни замутить что то типа игры, в котором пользователи, аки Боги, могли бы наблюдать и за ходом эволюции неких виртуальных существ  и направлять ее. В дальнейшем можно даже устраивать турниры подобных виртуальных созданий. Но, прежде чем приступить к программированию, необходимо определиться с набором неких "кирпичиков", из которых будет строиться модель. Прежде всего, вспомним научную гипотезу о происхождении жизни на Земле и попытаемся пересказать ее своими словами, что бы можно было почерпнуть некоторые идеи для будущей модели.
И так, обратимся к википедии.
Давным давно, около четырех миллиардов лет назад  на Земле была голая земля и лужи (а может быть и реки с океанами), состоящими из так называемого первичного бульона. Что представлял собой этот первичный бульон? Это обычная вода, в которой растворены органические соединения: аминокислоты (строительные кирпичики для белков), жиры и прочие молекулы. Прямо как реальный супчик, только несъедобный. Откуда все это взялось? Типа, само образовалось. Так это или нет, не суть важно, не будем спорить с умными учеными, тем более, они проверили эксперимент, который доказал, что это вполне реально.  Главное, что было дальше. А дальше каким то волшебным образом в этом первичном бульоне появились коацерватные капли - некие уплотнения, окруженные слоем специфических молекул, который защищал их от распада. Кстати, мыльные пузыри - тоже своего рода коацерватные капли, только большие. Эти коацерватные капли могли адсорбировать из окружающей среды разные вещества и увеличиваться в размерах. А потом, когда становились ну очень большими, коацерватные капли распадались на более мелкие. Так типа зародились первые одноклеточные.
Какую идею можно вынести из этого для модели? Вот прямо так и напрашивается включить в модель атомы, которые соединяются в молекулы, формируют цепочки органических соединений. Но даже если не принимать во внимание квантовую механику, а рассматривать атомы просто как твердые шарики, между которыми присутствуют силы притяжения и отталкивания, меняющиеся по разным законам, благодаря чему между атомами могут возникать устойчивые связи, модель получиться слишком сложной. И, боюсь, результатов расчета даже маленького промежутка моделируемого времени придется ждать очень и очень долго. Скажу больше, жизнь зарождалась на земле в течении порядка миллиарда лет. Так что вряд ли мне удастся получить что то "живое", беспорядочно сталкивая виртуальные молекулы.  Определенно нужно выбрать что то попроще.
Еще одна идея. Раньше, когда науки совсем не было, люди думали, что все предметы состоят из четырех перемешанных в разных пропорциях стихий: огонь, вода, земля и воздух (некоторые любители гороскопов до сих пор в это верят). И так, пусть в нашей модели иматься четыре вида атомов:
Fire  - переносит  некую субстанцию, которая необходима для предания материальному объекту движения.
Water - переносит субстанцию, которая необходима для того, что бы затормозить материальный объект.
Ground - собственно, это и есть материальный объект.
Air - Субстанция, хранящая информацию (программу) о том, как должен объект Ground взаимодействовать с объектами Fire, Water а так же другими объектами Ground.
Все эти объекты "живут" в квадратном двумерном пространстве Universe.  Это пространство ограничено непроходимыми стенками. Пространство поделено на ограниченное число локаций, имеющих координаты x и y. В каждой локации может быть только один объект. Объекты могут двигаться строго вдоль оси x ли y (по диагонали двигаться не могут). Если надо поменять направление движения, то объекты должны остановиться. Скорость может быть равна 1 или -1. Случайным образом  любой из локаций может родиться пара Fire и Water, эти объекты разлетаются в разных направлениях. Если эти объекты встречаются то они взаимоуничтожаються.
Остальные объекты взаимодействуют следующим образом:
Ground. Если столкнулся с Fire, то поглощает его. Но емкость объекта для субстанции Fire ограничена.  Если емкость переполнена, то Fire отражается.  С Water взаимодействует аналогичным образом. Накопленную субстанцию Fire или Water может использовать для движения.
Air. При столкновении с Ground соединяется с ней. При этом заложенная в объекте программа запускается на выполнение. После выполнения этой программы Ground, который присоединил Air,  испускает копию присоединенного Air. При это с некоторой долей вероятности может произойти мутация.  Способы и вероятность мутации задается самой же программой, которая заложена в Air. Если Air столкнулся с Air то они отскакивают друг от друга.
Программа, которая будет храниться в Air представляет собой некий виртуальный код, похожий на ассемблер. Примерный набор команд:
Команда условного перехода.
Команда безусловного перехода.
Арифметические команды.
Логические команды.
Команды сравнения.
Команды управления объектом Ground.
Плюс еще надо сделать что то типа "зрения", что бы объекты Ground могли как то "видеть" окружающую реальность. Но на "зрение" они тоже должны расходовать энергию (Fire), да и на само выполнения программы. И еще, время жизни Air в свободном состоянии ограничено. Что бы не было перенаселения "вселенной".  
Естественно, это только первый шаг. В дальнейшем я планирую усовершенствовать и запрограммировать модель, так, что бы было интересно в это играть. Слушаю ваши мнения.
"
10 Зойч
 
30.09.13
18:18
(9) тогда целевая функция должна быть - время которое выжил бот
11 badboychik
 
30.09.13
18:21
(9) И это все на 1С? Мощно задумано!
12 batmansoft
 
30.09.13
18:22
(10) кстати да, вместо выжил ли робот в течении тайма, можно действительно учитывать, а сколько он прожил. Но вопрос то не в целевой функции, а том как кодировать. Вообще, хороша ли идя с "примитивным ассемблерообразным языком" или лучше придумать че то другое?
13 batmansoft
 
30.09.13
18:22
(11) Нет, на C#
14 Зойч
 
30.09.13
18:23
это что то типо танков будет? (ai cup)
15 Зойч
 
30.09.13
18:23
colobot видел?
16 Eugene_life
 
30.09.13
18:27
(9)ИМХО,в игру нужно-таки внести доп условие - внешнюю силу. Иначе ты просто убедишься, что первичный бульон так им и останется. Потому что коацерватные капли будут распадаться на другие капли, но не на одноклеточных. Так сталагмиты растут, но не переходят в качественно новое существо. Т.е. математическая модель не даст образования жизни никогда. Нужно вводить "божью волю", которая будет менять правила игры и допускать качественные изменения.
17 batmansoft
 
30.09.13
23:53
(16) Ну да, без "божьей воли" мне надо будет ждать миллиарды лет, как это происходило в природе.
18 Asmody
 
01.10.13
00:04
Когда я в прошлый раз встретил чувака с похожей идеей, я ему посоветовал отделить свет от тьмы…
19 batmansoft
 
01.10.13
08:26
(18) То есть ввести классы Light и Dark?
20 Старик Юзергад
 
01.10.13
08:29
Опять бондарчук...
21 Wasya
 
01.10.13
08:32
(0) Будь осторожней. Вдруг опять объявят охоту на генетиков.
22 Sabbath
 
01.10.13
08:35
(0) Я думаю,, как и в любой учетной области, сначала надо разобраться, как это реально работает. В твоем случае можно почитать учебник биологии за 7-8 класс и сделать упрощенную генетическую модель. Имхо все будет определяться сочетанием групп генов и доминацией каких-то из них.
23 Wasya
 
01.10.13
08:36
(0) Не смог найти ссылку. Был подобный конкурс. Участники пишут бота - животное. Ботов запускают в виртуальный мир, где они борятся за выживание.
24 batmansoft
 
01.10.13
08:43
(22) Не, в реальности все работает очень сложно: в генах закодирован лишь синтез белков. А уже белок потом делает свое дело: служил катализатором какой либо биохимической реакции или чего то подобного. Белков великое множество. Так что ДНК, по сути, это программа на супераасембелере, в котором миллионы различных команд. Хотя, может быть, в ходе эволюции появились и языки высокого уровня.
25 floder
 
01.10.13
08:46
(1) Ты опоздал, это уже сделали в игре Spore.
26 Я не курил
 
01.10.13
08:50
(25) тоже про Spore сразу вспомнил
27 Salimbek
 
01.10.13
09:07
Блин, тут кто-то вообще хоть понимает, что же такое "Генетический алгоритм"? На какой математической формуле он, в данном случае, базируется? Обеспечена ли сходимость у этой формулы?
28 kosts
 
01.10.13
09:41
(0) Запрограммируй для тренировки генетический велосипед.
29 Sabbath
 
01.10.13
10:29
(24) Как раз в том и задача, я думаю. Отбросить сложные моменты, оставив базовые. Короче сделать упрощенную модель.

И кстати, вполне вероятно, что подобные алгоритмы уже реализованы, а код открыт. Надо просто не на мисте искать и спрашивать.
30 Принт
 
01.10.13
19:41
(19) ООП - 2
31 Вуглускр1991
 
01.10.13
20:14
(9) Тут не играть, тут смотреть. Если скажем программа из Air будет формировать направления движения Ground для поглощения Fire или Water, накапливать их и делать более совершенный Air ...
А! В Air мы сами пишем свои стратегии и смотрим, чья лучше.
32 batmansoft
 
07.10.13
08:22
Я вот тут подумал, решил что робот будет состоять из первокирпичиков, неких объектов, наследуемых от абстрактного класса Atom. Эти объекты будут иметь несколько типов: сенсор, нейрон и привод. Каждый из типов будет иметь еще и подтипы (сенсор визуальный, тактильный, нейроны с разными передаточными функциями и так далее. Привод типа движение, стреляние по другим роботам и поедание пищи. Атомы и связи между ними будут кодироваться в ген в виде массива чисел. Вопрос, а какие числа взять для кодировки? int, float или decimal. Для кодирования внутренней структуры нейронов надо float, потому что у него будут весовые коэффициенты. Для кодирования типа атома нужен int, так как float неудобно сравнивать между собой (там 2*2 может быть равно 3.99999999 и 1 может быть не равно 1).
А вы что посоветуете?
33 bambazamba
 
07.10.13
08:27
(32) Советую завязывать с плюшками.
34 batmansoft
 
07.10.13
08:31
(33) С каким плюшками?
35 Нуф-Нуф
 
07.10.13
08:34
Видел уже такую на айфоне, не spore. А именно так как описывал автор
36 Karavanych
 
07.10.13
09:04
Автор а есть хоть одна законченная игра ?
37 пипец
 
07.10.13
09:07
зарегся на симсах ;))) и не пудри людям голову
38 strange2007
 
07.10.13
09:08
И ни кто не вспомнил старую и добрую "жизнь"? Автор, развивай её, используй готовые алгоритмы
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn