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

📄 linearscaling.cpp

📁 我自己写的一个用于图编码的遗传算法
💻 CPP
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -