Антошкин Александр
Гуру
(4697)
9 лет назад
//————————————————————————————————————————————————————————————————————————
//Естественный отбор.
int NaturalSelection()
{
//-----------------------Переменные-------------------------------------
int i=0,u=0;
double p=0.0,start=0.0;
double fit[][2];
ArrayResize (fit,PopulChromosCount);
ArrayInitialize(fit,0.0);
double delta=(Population[0][0]-Population[0][PopulChromosCount-1])*0.01-Population[0][PopulChromosCount-1];
//----------------------------------------------------------------------
for(i=0;i<PopulChromosCount;i++)
{
fit[i][0]=start;
fit[i][1]=start+MathAbs(Population[0][i]+delta);
start=fit[i][1];
}
p=RNDfromCI(fit[0][0],fit[PopulChromosCount-1][1]);
for(u=0;u<PopulChromosCount;u++)
if((fit[u][0]<=p && p<fit[u][1]) || p==fit[u][1])
break;
return(u);
}
//————————————————————————————————————————————————————————————————————————//————————————————————————————————————————————————————————————————————————//Удаление дубликатов с сортировкой по VFF
void RemovalDuplicates()
{
//-----------------------Переменные-------------------------------------
int chromosomeUnique[1000];//Массив хранит признак уникальности
//каждой хромосомы: 0-дубликат, 1-уникальная
ArrayInitialize(chromosomeUnique,1); //Предположим, что дубликатов нет
double PopulationTemp[][1000];
ArrayResize (PopulationTemp,GeneCount+1);
ArrayInitialize(PopulationTemp,0.0);
int Ge =0; //Индекс гена
int Ch =0; //Индекс хромосомы
int Ch2=0; //Индекс второй хромосомы
int cnt=0; //Счетчик
//----------------------------------------------------------------------
//----------------------Удалим дубликаты---------------------------1
//Выбираем первый из пары для сравнения.. .
for(Ch=0;Ch<PopulChromosCount;Ch++)
{
//Если не дубликат.. .
if(chromosomeUnique[Ch]!=0)
{
//Выбираем второй из пары.. .
for(Ch2=0;Ch2<PopulChromosCount;Ch2++)
{
if(Ch!=Ch2 && chromosomeUnique[Ch2]!=0)
{
//Обнулим счетчик количества идентичных генов
cnt=0;
//Сверяем гены, пока попадаются одинаковые гены
for(Ge=1;Ge<=GeneCount;Ge++)
{
if(Population[Ge][Ch]!=Population[Ge][Ch2])
break;
else
cnt++;
}
//Если набралось одинаковых генов столько же, сколько всего генов
//..хромосома признается дубликатом
if(cnt==GeneCount)
chromosomeUnique[Ch2]=0;
}
}
}
}
//Счетчик посчитает количество уникальных хромосом
cnt=0;
//Скопируем уникальные хромосомы во временный масив
for(Ch=0;Ch<PopulChromosCount;Ch++)
{
//Если хромосома уникальна, скопируем её, если нет, перейдем к следующей
if(chromosomeUnique[Ch]==1)
{
for(Ge=0;Ge<=GeneCount;Ge++)
PopulationTemp[Ge][cnt]=Population[Ge][Ch];
cnt++;
}
}
//Назначим переменной "Всего хромосом" значение счетчика уникальных хромосом
PopulChromosCount=cnt;
//Вернем уникальные хромосомы обратно в массив для временного хранения
//..обьединяемых популяций
for(Ch=0;Ch<PopulChromosCount;Ch++)
for(Ge=0;Ge<=GeneCount;Ge++)
Population[Ge][Ch]=PopulationTemp[Ge][Ch];
//=================================================================1
//----------------Ранжирование популяции---------------------------2
PopulationRanking();
//=================================================================2
}
//————————————————————————————————————————————————————————————————————————
Бакмистер
Просветленный
(33980)
9 лет назад
Один американский проповедник на вопрос слушателя: "Почему в Библии не описаны динозавры" ответил: "Их просто не существовало. Бог подбросил их кости, чтобы испытать нашу веру в Писание". Только вдумайтесь!