113 lines
2.2 KiB
C++
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;
|
|
} |