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