linearscaling.cpp

来自「我自己写的一个用于图编码的遗传算法」· C++ 代码 · 共 44 行

CPP
44
字号
#include "LinearScaling.h"
#include "Genome.h"

void LinearScaling::applyScaling(Population* pop)
{
	if(pop==NULL)
	{
		throw GAException("传递给LinearScaling::applyScaling方法的population不能为空");
	}
	else
	{
		double pmin = pop->min();
		double pmax = pop->max();
		double pave = pop->ave();

		double delta, a, b;
		if(pave == pmax)
		{	// no scaling - population is all the same(不进行尺度变换)
			a = 1.0; 
			b = 0.0;
		}
		else if(pmin > ((double)c * pave - pmax)/((double)c - 1.0))
		{
			delta = pmax - pave;
			a = ((double)c - 1.0) * pave / delta;
			b = pave * (pmax - (double)c * pave) / delta;
		}
		else
		{				// stretch to make min be 0
			delta = pave - pmin;
			a = pave / delta;
			b = -pmin * pave / delta;
		}

		Population::PopIterator itr;
		for(itr=pop->begin();itr!=pop->end();itr++)
		{
			double f = (*itr)->getScore();
			f = f * a + b;				// 线性尺度变换的关键代码
			if(f < 0) f = 0.0;	
			(*itr)->setFitness(f);
		}
	}
}

⌨️ 快捷键说明

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