Моделирование Виртуальной Вычислительной Системы.
 
Выпуск №21
home URL
автор рассылки: noonv (noonv@narod.ru)
"Сегодня ему исполнялось двести лет, но то было лишь еще одним случайным совпадением."
Дуглас Адамс. Автостопом по Галактике

Доброго времени суток, уважаемые читатели!
Главное - ни слова о футболе! :-)

В 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]
		}
	}
}


Продолжение следует...

Счастливо!

[noonv@volodia noonv]$ logout

XIII

Рейтинг@Mail.ru
Хостинг от uCoz