📄 linearscaling.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 + -