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

📄 gadomainchromosome.h

📁 遗传算法做的排课系统
💻 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 + -