📄 gadomainchromosome.h
字号:
#ifndef __GA_DOMAIN_CHROMOSOME_H__
#define __GA_DOMAIN_CHROMOSOME_H__
#include "..\GaChromosome.h"
#include "..\..\CallConvention.h"
#include "GaValueSets.h"
using namespace Chromosome;
using namespace Chromosome::Representation;
namespace Chromosome
{
namespace Representation
{
template <typename T>
class GaDomainChromosome;
template <typename T>
class GaSingleValueChromosome;
template <typename T>
class GaSVArithmeticChromosome;
template <typename T>
class GaMultiValueChromosome;
template <typename T>
class GaMVArithmeticChromosome;
// Container for chromosome's value set, operations and parameters
template <typename T>
class GaChromosomeDomainBlock : public GaChromosomeOperationsBlock
{
friend class GaDomainChromosome<T>;
friend class GaSingleValueChromosome<T>;
friend class GaSVArithmeticChromosome<T>;
friend class GaMultiValueChromosome<T>;
friend class GaMVArithmeticChromosome<T>;
protected:
// Possibile values
GaValueSet<T>* _domain;
public:
// Initialize block
GaChromosomeDomainBlock(GaValueSet<T>* domain,
GaCrossoverOperation* crossoverOperation,
GaMutationOperation* mutationOperation,
GaFitnessOperation* fitnessOperation,
GaFitnessComparator* fitnessComparator,
GaChromosomeParams* parameters) : GaChromosomeOperationsBlock(crossoverOperation,
mutationOperation, fitnessOperation, fitnessComparator, parameters),
_domain(domain) { }
// Copy constructor
GaChromosomeDomainBlock(const GaChromosomeDomainBlock& rhs) : GaChromosomeOperationsBlock(rhs)
{
_domain = rhs._domain;
}
// Initialize empty block
GaChromosomeDomainBlock() : _domain(NULL) { }
// Returns reference to value set
const GaValueSet<T>& GACALL GetValueSet() const
{
return *_domain;
}
// Sets pointer to value set
void GACALL SetValueSet(GaValueSet<T>* domain)
{
_domain = domain;
}
};// END CLASS DEFINITION GaChromosomeDomainBlock
// Chromosome with defined domain of values
template <typename T>
class GaDomainChromosome : public GaDynamicOperationChromosome
{
public:
// Initialize chromosome
GaDomainChromosome(GaChromosomeDomainBlock<T>* configBlock) :
GaDynamicOperationChromosome(configBlock) { }
// Copy constructor
GaDomainChromosome(const GaDomainChromosome<T>& c,
bool setupOnly) : GaDynamicOperationChromosome(c, setupOnly) { }
// Returns closest value to the given value
const T& GetClosestValue(const T& value) const
{
GaValueSet<T>* d = ( (GaChromosomeDomainBlock<T>*)_configBlock )->_domain;
return d ? d->ClosestValue( value ) : value;
}
};// END CLASS DEFINITION GaDomainChromosome
} // Representation
} // Chromosome
#endif // __GA_DOMAIN_CHROMOSOME_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -