Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Эволюция в виртуальной машине

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
2 unconnected
 
Хорошо, поработаю. Тут надо вспомнить перегрузку функций.
Представлю в понедельник.
 
Скрещнивание... Тут есть несколько методов. Самый часто используемый: берется хромосома одного родителя и в него вставляется участок случайной длины хромомомы другого родителя начиная со слуайной позиции. Можно брать биты с обейх хромосом по одному, но это, как мне кажется туповато... В общем, я остановился на первом методе.
И нужно время от времени делать мутации. Будет какой-то, еще не придумал какой, коефициент для задания их частоты, вернее, вероятности.  
 
2 beeos  
 
Модификаторы... нужно подумать... сейчас ничего не скажу...
 
До понедельника!

Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 18:23 23-04-2004
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Надо бы радиацию ввести, которая будет увеличивать коэфициент мутации.

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 19:34 23-04-2004
Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да, мутагенность среды...

Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 19:48 23-04-2004
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
И еще устойчивость к мутации!  
Таким макаром будет эволиционная развилка, может создасться тип - устойчивый к радиации

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 20:42 23-04-2004
unhappy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хромосомы скрещивать как в у Лукьяненко :))
Ну и как в обычной биологии :)
Берется доминирующий ген. То есть нужна тейбла с иерархией генов :)
 
И кста - а что если координаты сделать двойственые несколько - поясню - например сделать так, что система изначально считает, что точка(1,1), точка(1,2), точка(2,1), точка(2,2) находятся в "одной локации" с именем область(1,1).
Э потом идет простая проверка на вхождение, работа с элементами набора.
И потом - можно реализовать это в нормальной таблице - имхо тогда обраббатывать данные будет легче?

Всего записей: 681 | Зарегистр. 25-10-2002 | Отправлено: 23:53 23-04-2004
ArtSh

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На счет координаты типа double я может быть поторопился, однако, если вы проходите только по клеткам, которые содержат клетки, то зачем хранить информацию о других клетках?  
 
На счет вставки. Лучше всего хранить данные в динамическом массиве или списке, в таком случае, при обработке данных основной операцией (при небольших размерах хранящихся объектов, как например класс нашего объекта) будет вставка значений в массив.  
 
И на счет скрещивания генов. Можно обрабатывать их по формуле НГ=х*ПГ+у*МГ
где НГ ген ребенка, ПГ ген "папы", МГ ген "мамы", х*х+у*у=1

Всего записей: 92 | Зарегистр. 30-03-2004 | Отправлено: 16:05 24-04-2004
Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Давйте пока обсудим такой вопрос. Может быть, самый главный. Возможно ли в подобной модели запустить бесконечное совершенствование или все закончится тривиально - будет найден оптимальный организм? Может нужны какие-то базы знаний для каждого организма, в которых будут храниться всякие сведения о пережитых событиях, там,.. самые важные будут наследоваться и т.д...

Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 10:40 27-04-2004
ArtSh

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
на мой взгляд сперва надо понять алгоритмы основных действий наших объектов, а затем, по мере прояснения ситуации вносить изменения в типы данных.

Всего записей: 92 | Зарегистр. 30-03-2004 | Отправлено: 18:00 27-04-2004
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Crazy_Shrike
Нужно предусмотреть возможность этой эволюции, а в конечном итоге это мы и увидим - получим ли идеальный организм Это и есть конечная цель.

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 11:47 28-04-2004
Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот, родил, наконец-то:
 
/*
 
Параметр     длина   диапазон  биты  
 
Life time     - 20 bit, [~10^6];   0-19
Mass          - 10 bit, [~10^3];   20-29
Energy       - 10 bit, [~10^3];   30-39
Sex            - 1  bit,                  40    
Libido         - 10 bit, [~10^3];   41-50
Predator     - 1  bit,                  51
ViewRadius- 7  bit, [64];           52-58;
 
*/
class CEssence{
     public:
          CEssence();
 
          int GetX();
          int GetY();
 
          void LoadCurrentCellInfo(int,int,int); //Info about Cell properties
 
          void LoadInfoAboutEnvironment();
 
          int RandomMove();
          int MoveE();
          int MoveSE();
          int MoveS();
          int MoveSW();
          int MoveW();
          int MoveNW();
          int MoveN();
          int MoveNE();
 
          int GetLifeTime();
          void IncLifeTime();
          void DecLifeTime();
 
          int GetMass();
          void IncMass();
          void DecMass();
 
          int GetEnergy();
          void IncEnergy();
          void DecEnergy();
 
          bool GetSex();
 
          int GetLibido();
          void IncLibido();
          void DecLibido();
 
          void SetPredator(bool);
          bool GetPredator();
 
          int GetViewRadius();
          void IncViewRadius();
          void DecViewRadius();
 
          int GetAge();
          void IncAge();
 
     private:
          bool hromosoma[100];
          int lifetime;
          int mass;
          int energy;
          bool sex;
          int libido;
          bool predator;
          int viewradius;
          int x;
          int y;
          int age;
 
          void SetBinary(int,int,int);
          int GetDecimal(int,int);
          void VarInitialization();              //hromosoma->vars;
          void HromosomaInitialization();  //vars->hromosoma;
 
 
};
 
Вот, значит, сделал, как предлагали. Новшество в том, что параметры хранятся теперь в приватных переменных. Пока не происходит скрещивания, оперируем с этими переменными, а перед скрещиванием, функцией HromosomaInitialization() загоняем все в хромосому - кодируем. После скрещивания происходит декодирование - VarInitialization() и дальше до следующего скрещивания снова работаем с переменными. Короче, не нужно каждый раз делать кодирование/декодирование.  
 
Функции           void SetBinary(int,int,int);     int GetDecimal(int,int);  -
это функции - кодировщик и декодеровщик, соответственно. Кодировщик - записывает инфу в гены. Принимает десятичное число, стартовую и конечную позицию гена, переводит в двоичный код и записывает в ген. Декодировщи - обратно. Принимает стартовую и конечную позицию гена и возвращает десятичное.
 
 
 
Добавлено
Да, остальные методы я описывал. Разве что движение... Методы, типа MoveX() - это шаги по всем сторонам горизонта, как на карте, 8 направлений.
 
Добавлено
И это... говорил, по-моему,  про молчащие области... или хотел только...
В общем, в живых хромомсомах "говорящие" гены занимают всего несколько процентов длины самой хромосомы. Остальные - молчащие области, которые ни за что не отвечают и белки с них не синтезируются. Кстати, может кто не знает... сам офигел недавно. Рак - это когда информация начинает читаться именно с молчащих участков хромосомы...  
Так вот, предлагаю ввести такие области. Они могут быть резервом для мутаций. Как вам идея?

Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:30 28-04-2004
Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ну что?
Unconnected !? Где вы, люди? Скажите что-нибудь!

Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 08:37 30-04-2004
beeos



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Идея неплохая, но опять же ведет к усложнению системы. Не совсем понятно, как эти участки будут храниться, т.е. как определять их и отделять от информативных участков.

Всего записей: 329 | Зарегистр. 06-01-2004 | Отправлено: 09:55 30-04-2004
Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не вижу проблемы...
Главное, следить за картой хромомсомы...  
Я сайтик наваял, там подробнее написано...
www.e-volution.freehost.kiev.ua

Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 11:30 30-04-2004
Dimoneo



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
чето не могу достучаться до сайта...

Всего записей: 9 | Зарегистр. 06-04-2004 | Отправлено: 22:17 30-04-2004
ArtSh

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А зачем так много функций? И вообще, какой алгоритм программы?
Как инициализируется мир? Когда и при каких условиях вызываются функции?

Всего записей: 92 | Зарегистр. 30-03-2004 | Отправлено: 17:18 04-05-2004
Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Зачем много функций? Как зачем? Хоть написано еще не много, но все они создавались по мере необходимости...  
В начале программы создается массив 100х100 объектов типа Cell. У каждой клетки есть запас ресурсов и время их регенерации. Также инициализируется динамический массив объектов Essence, которые имеют случайные начальные координаты. Потом идет бесконечный цикл - такты. В каждом такте кажый организм получает информацию о клетке, в которой находится, осматривается (собирает матрицу с информацией о соседних клетках) и принимает решение куда ему податься или остаться на месте.  Пока вкратце так...  
 
Добавлено
Большинство методов использются приватно. Например, когда метод сбора информации о соседних клетках обрабатывает инфу, то принимает решение в какую сторону шагнуть... Стараюсь вызывать как можно меньше методов извне, а всю нагрузку об обработке и принтятии решений переложить на внутренние методы. Так объект будет максимально "независим" что ли, от главной программы, т.е. "думать" самостоятельно. По-моему, это логично... да и так учили на ООП...

Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 11:32 06-05-2004
ArtSh

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Методы можно упростить, например функции Move.. можно заменить одной с тремя параметрами (объект будет занимать меньше места и быстрей копироваться). Тоже касается остальных функций.
 
И, пожалуйста,напиши алгоритм инициализации на алгоритмическом языке, будет понятней и удобней.  И еще, все параметры изменяются в конце такта у всех объектов?

Всего записей: 92 | Зарегистр. 30-03-2004 | Отправлено: 10:32 07-05-2004
Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А чего писать-то? Я не понимаю...
Когда объявляется массивы клеток и существ, их конструкторы присваивают всем необходимым переменным какие-либо значения - стартовые параметры.

Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 11:14 07-05-2004
ArtSh

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Например:
 
Выделение памяти.
цикл: (по всем клеткам ?)
   вызов конструктора.
   вставка объекта в массив.
конец.
 
/*Вызов конструткора:
  ????
конец.*/
 
цикл: бесконечный
   цикл: по всем объектам
        вызвать  ххх процедуру.
   конец.
конец.
 
/*процедура ххх
 ?????
конец.*/

Всего записей: 92 | Зарегистр. 30-03-2004 | Отправлено: 11:35 07-05-2004
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Crazy_Shrike
int Move(int where);
 
Зачем функции типа GetMass если можно просто обратится к параметру объекта Obj->Mass ?
Соответственно делать inc(Obj->Mass) и dec(Obj->Mass)
 
К остальным функциям то же самое.
 

Код:
 
private:  
          bool hromosoma[100];  
          int lifetime;  
          int mass;  
          int energy;  
          bool sex;  
          int libido;  
          bool predator;  
          int viewradius;  
          int x;  
          int y;  
          int age;  
 
          void SetBinary(int,int,int);  
          int GetDecimal(int,int);  
          void VarInitialization();              //hromosoma->vars;  
          void HromosomaInitialization();  //vars->hromosoma;  

Здесь неплохо было бы прокомментировать.

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 11:35 07-05-2004
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Эволюция в виртуальной машине


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru