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 направлений. Добавлено И это... говорил, по-моему, про молчащие области... или хотел только... В общем, в живых хромомсомах "говорящие" гены занимают всего несколько процентов длины самой хромосомы. Остальные - молчащие области, которые ни за что не отвечают и белки с них не синтезируются. Кстати, может кто не знает... сам офигел недавно. Рак - это когда информация начинает читаться именно с молчащих участков хромосомы... Так вот, предлагаю ввести такие области. Они могут быть резервом для мутаций. Как вам идея? |