"Сегодня ему исполнялось двести лет, но то было лишь еще одним случайным совпадением."
Дуглас Адамс. Автостопом по Галактике
|
Доброго времени суток, уважаемые читатели!
Главное - ни слова о футболе! :-)
В 0-ом приближении, идея проекта состоит в следующем:
Задан искусственный мир, со своими "физическими" законами.
В этот мирок помещаются сложные объекты - клетки, обладающие разными
свойствами.
Т.е. минимальный (и самый главный) наш объект в этом мире - клетка.
Далее просто дадим этому миру эволюционировать (клетки будут "пытаться выжить" в
жёстких условиях естественного отбора).
Хотя, думаю, впоследствии нужно будет реализовать программу-конструктор объектов,
чтобы двигать (или подправлять) эволюцию вручную :)
Идея такого подхода далеко не новая (да, да - нового уже ничего придумать
нельзя).
Вот, например, Джош Бонгард (Josh Bongard) использует данный подход.
Читайте статью Искусственная жизнь зарождается в компьютерах
(от 23 августа 2002г) на сайте membrana.ru.
Так же можете посетить домашнюю страничку Джоша Бонгарда, по ссылке
http://www.ifi.unizh.ch/groups/ailab/people/bongard/.
На ней можно скачать документы (в форматах .ps и .pdf ) в которых
рассказано о его успехах. Но, на мой взгляд, в его подходе есть ряд недочётов/недостатков(позже мы на
этом остановимся).
Как же будем моделировать мир?
Согласитесь - вопрос очень интересный.
Ведь так или иначе нам придётся задать в этом мире начало координат (сиречь точку отсчёта).
В данном случае поступим очень просто - "весь мир" запихнём в массив.
Таким образом Мир представлен динамическим одномерным массивом, с которым мы работаем,
как с двумерным(в будущем - как с трёхмерным).
// ниже приведён пример перебора двумерного поля
// (x,y,z - счётчики, типа РазмерМира (например - int-ы :)) (SizeZ,SizeY,SizeX - размеры Мира)
for(y=0;y<SizeY;y++)
{
for(x=0;x<SizeX;x++)
{
// функции, которы индексируют элементы следующим образом:
// [SizeX*y+x]
}
}
// для будущего трёхмерного случая функции будут выглядеть так:
for(z=0;z<SizeZ;z++)
{
for(y=0;y<SizeY;y++)
{
for(x=0;x<SizeX;x++)
{
// функции, которы индексируют элементы следующим образом:
// [SizeX*SizeY*z+SizeX*y+x]
}
}
}
|
Продолжение следует...
Счастливо!
|