⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rouletteselector.cpp

📁 我自己写的一个用于图编码的遗传算法
💻 CPP
字号:
#include "RouletteSelector.h"
#include <cfloat>
#include "MyRandom.h"

void RouletteSelector::prepare()
{
	clean();
	
	Population::PopIterator itr;

	for(itr=population->begin();itr!=population->end();itr++)
	{
		totalFitness += (*itr)->getFitness() + DBL_MIN;
	}

	double currentTotal = 0.0;

	for (itr=population->begin();itr!=population->end();itr++)  
	{
		currentTotal += ((*itr)->getFitness() + DBL_MIN) / totalFitness;
		wheel.push_back(currentTotal);
	}
}

inline void RouletteSelector::clean()
{
	wheel.clear();    
	totalFitness = 0;
}


void RouletteSelector::applySelect(Genome*& child1,Genome*& child2)
{
	prepare();
    double selection1 = MyRandom::randomDouble();
    double selection2 = MyRandom::randomDouble();
    
    int geneSize = population->size();
    
	child1 = population->getGenome(geneSize-1);
    child2 = population->getGenome(geneSize-1);

	Population::PopIterator itr;

	int i=0;
	for(itr=population->begin();itr!=population->end();itr++,i++)
    {
        if (selection1 < wheel[i])
        {
            child1 = *itr;
            break;
        }
    }

	i=0;
	for(itr=population->begin();itr!=population->end();itr++,i++)
    {
        if (selection2 < wheel[i])
        {
            child2 = *itr;
            break;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -