problem5.h

来自「文化算法的实际应用」· C头文件 代码 · 共 97 行

H
97
字号
#ifndef CAEP_PROBLEM_H
#define CAEP_PROBLEM_H

#include <cmath>
#include <iostream>
#include <algorithm>
#include "config.h"
#include "cell.h"

static const int  Pi = 3.1415926;
using namespace std;

namespace CAEP
{
	class Individual
	{
	private:
		float mValue;
		vector<float> mConstraints;
		float mViolation;
		bool mIsFeasible;
		Cell *mCell;
		int mVictoryCount;
		vector<float> mVariables;
		Configer &mConfiger;

	public:
		Individual(Configer &cfg):mConfiger(cfg),mConstraints(cfg.ConstraintCount),mVariables(cfg.VariableCount)
		{
		}

		void Evaluate()
		{
			int i;
			float s1 = 0.0, s2 = 0.0, s3 = 0.0;
			float delta = 0.001; // For the equality restrictions  

			s1 = 21.5 + mVariables[0]*sin(4 * Pi * mVariables[0]) + mVariables[1]*sin(20*Pi*mVariables[1]);
			mValue = -s1;

			mIsFeasible = true;
			mConstraints[0] = -1;
		}

		void Violation(vector<float> max)
		{
			int i;
			float v;

			if (mConfiger.IsTrustIndividual) {
				return;
			}

			mViolation = 0;

			for (i = 0; i < mConfiger.ConstraintCount; i++) {
				// Inequiality constraints 
				if (i < mConfiger.ConstraintCount - mConfiger.EqConstraintCount) {
					v = (mConstraints[i] > 0)? mConstraints[i]: 0;
				}
				// Equality constraints 
				else {
					v = fabs(mConstraints[i]);
				}

				if (v > max[i]) {
					max[i] = v;
				}
				mViolation += v/max[i];
			}
		}

		static void Limit(vector<float>& low, vector<float>& high)
		{
			low[0] = -3.5;
			low[1] = 4.1;
			high[0] = 12.1;
			high[1] = 5.8;
		}

		static void SetConfiger(Configer *cfg)
		{
			cfg->VariableCount = 2;
			cfg->ConstraintCount = 1;
			cfg->EqConstraintCount = 1;
			cfg->TestTreeCount = 5;
			cfg->MaxDepth = 5;
			cfg->TreeDim = 3;
			cfg->TreeNodeCount = 8;
			cfg->PopulationSize = 100;
			cfg->TopCount = 3;
			cfg->IsTrustIndividual = true;
		}
	};
}

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?