Files
envi-code/SourceCode/Code2026/tg_shs/shs_subgeLib/TGAIndividual.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

113 lines
2.2 KiB
C++

//-------------------------------------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TGAIndividual 类
// = Version : ver2.0
// = Author : wlw
// = CreateDate : 2002-09-09
// = Description: TGAIndividual 定义
// = Maintainers:
//
//-------------------------------------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TGAIndividual.h"
#include "TGAPopulation.h"
TGAIndividual::TGAIndividual()
{
}
TGAIndividual::~TGAIndividual()
{
}
TGAIndividual* TGAIndividual::New() const
{
return NULL;
}
void TGAIndividual::Init()
{
}
TGAIndividual* TGAIndividual::Mutation() const
{
return NULL;
}
bool TGAIndividual::operator < (const TGAIndividual& rival) const
{
return false;
}
bool TGAIndividual::operator > (const TGAIndividual& rival) const
{
return false;
}
long TGAIndividual::Multiply(const TGAIndividual&mat,TGAPopulation* pRes)const
{
ASSERT(pRes != NULL);
if(mat.GetLength()>GetLength())
{
return mat.Multiply(*this,pRes);
}
TGAIndividual *pNew1 = New(),*pNew2 = New();
pNew1->SetLength(GetLength(),false);
pNew2->SetLength(GetLength(),false);
long first = rand() % mat.GetLength();
long last = (first + mat.GetLength() / 2 - 1) % mat.GetLength();
long i;
if(last >= first)
{
for(i = 0; i < first; i++)
{
(*pNew1)[i] = GetAt(i)->Clone();
(*pNew2)[i] = mat.GetAt(i)->Clone();
}
for(;i <= last; i++)
{
(*pNew1)[i] = mat.GetAt(i)->Clone();
(*pNew2)[i] = GetAt(i)->Clone();
}
for(;i < mat.GetLength(); i++)
{
(*pNew1)[i] = GetAt(i)->Clone();
(*pNew2)[i] = mat.GetAt(i)->Clone();
}
}
else
{
for(i = 0; i <= last; i++)
{
(*pNew1)[i] = mat.GetAt(i)->Clone();
(*pNew2)[i] = GetAt(i)->Clone();
}
for(; i < first; i++)
{
(*pNew1)[i] = GetAt(i)->Clone();
(*pNew2)[i] = mat.GetAt(i)->Clone();
}
for(; i < mat.GetLength(); i++)
{
(*pNew1)[i] = mat.GetAt(i)->Clone();
(*pNew2)[i] = GetAt(i)->Clone();
}
}
for(; i < GetLength(); i++)
{
(*pNew1)[i] = GetAt(i)->Clone();
(*pNew2)[i] = GetAt(i)->Clone();
}
pNew1->Init();
pNew2->Init();
pRes->Append(pNew1);
pRes->Append(pNew2);
return 2;
}