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

📄 savgeneticreducer.cpp

📁 粗集的各种算法程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	parameters += Keyword::Separator();

	// Number, mutation.
	parameters += Keyword::Number() + Keyword::Dot() + Keyword::Mutation();
	parameters += Keyword::Assignment();
	parameters += String::Format(GetNoMutations());

	parameters += Keyword::Separator();

	// Number, inversions/transpositions.
	parameters += Keyword::Number() + Keyword::Dot() + Keyword::Inversion();
	parameters += Keyword::Assignment();
	parameters += String::Format(GetNoTranspositions());

	parameters += Keyword::Separator();

	// Bias.
	parameters += Keyword::Bias();
	parameters += Keyword::Assignment();
	parameters += String::Format(GetBias());

	parameters += Keyword::Separator();

	// Costs.
	parameters += Keyword::Cost();
	parameters += Keyword::Assignment();
	parameters += String::Format(UseCosts());

	if (UseCosts()) {

		// Costs, filename.
		parameters += Keyword::Separator();
		parameters += Keyword::Cost() + Keyword::Dot() + Keyword::Filename();
		parameters += Keyword::Assignment();
		parameters += GetCostFilename();

	}

	parameters += Keyword::Separator();

	// Approximate solutions.
	parameters += Keyword::Approximate();
	parameters += Keyword::Assignment();
	parameters += String::Format(ApproximateSolutions());

	if (ApproximateSolutions()) {

		// Hitting fraction.
		parameters += Keyword::Separator();
		parameters += Keyword::Fraction();
		parameters += Keyword::Assignment();
		parameters += String::Format(GetHittingFraction());

		// Keep steps.
		parameters += Keyword::Separator();
		parameters += Keyword::Keep() + Keyword::Dot() + Keyword::Levels();
		parameters += Keyword::Assignment();
		parameters += String::Format(GetNoKeepSteps());

	}

	return parameters;

}

//-------------------------------------------------------------------
// Method........: SetParameter
// Author........: Aleksander 豩rn
// Date..........:
// Description...:
// Comments......:
// Revisions.....:
//===================================================================

bool
SAVGeneticReducer::SetParameter(const String &keyword, const String &value) {

	if (Reducer::SetParameter(keyword, value))
		return true;

	// Algorithm variation.
	if (keyword == Keyword::Algorithm()) {
		if (value == GetString(VARIATION_SIMPLE))
			return SetVariation(VARIATION_SIMPLE);
		if (value == GetString(VARIATION_MODIFIED))
			return SetVariation(VARIATION_MODIFIED);
		if (value == GetString(VARIATION_VARIABLE))
			return SetVariation(VARIATION_VARIABLE);
		return false;
	}

	// Lifetime, min.
	if (keyword == Keyword::Lifetime() + Keyword::Dot() + Keyword::Lower() && value.IsInteger())
		return SetMinimumLifetime(value.GetInteger());

	// Lifetime, min.
	if (keyword == Keyword::Lifetime() + Keyword::Dot() + Keyword::Upper() && value.IsInteger())
		return SetMaximumLifetime(value.GetInteger());

	// Scale fitness.
	if (keyword == Keyword::Scaling() && value.IsBoolean())
		return ScaleFitness(value.GetBoolean());

	// Scaling type.
	if (keyword == Keyword::Scaling() + Keyword::Dot() + Keyword::Type()) {
		if (value == GetString(SCALING_BOLTZMANN))
			return SetScaling(SCALING_BOLTZMANN);
		return false;
	}

	// Temperature, start.
	if (keyword == Keyword::Temperature() + Keyword::Dot() + Keyword::Upper() && value.IsFloat())
		return SetStartTemperature(value.GetFloat());

	// Temperature, stop.
	if (keyword == Keyword::Temperature() + Keyword::Dot() + Keyword::Lower() && value.IsFloat())
		return SetStopTemperature(value.GetFloat());

	// Temperature, delta.
	if (keyword == Keyword::Temperature() + Keyword::Dot() + Keyword::Delta() && value.IsFloat())
		return SetDeltaTemperature(value.GetFloat());

	// Report.
	if (keyword == Keyword::Report() && value.IsBoolean())
		return GenerateReport(value.GetBoolean());

	// Replacement sampling.
	if (keyword == Keyword::Replace() && value.IsBoolean())
		return ReplacementSampling(value.GetBoolean());

	// Elitism.
	if (keyword == Keyword::Elitism() && value.IsBoolean())
		return UseElitism(value.GetBoolean());

	// Seed.
	if (keyword == Keyword::Seed() && value.IsInteger())
		return SetSeed(value.GetInteger());

	// Size, keeplist.
	if (keyword == Keyword::Size() + Keyword::Dot() + Keyword::Keep() && value.IsInteger())
		return SetKeepSize(value.GetInteger());

	// Size, population.
	if (keyword == Keyword::Size() + Keyword::Dot() + Keyword::Population() && value.IsInteger())
		return SetPopulationSize(value.GetInteger());

	// Gap, generation.
	if (keyword == Keyword::Gap() + Keyword::Dot() + Keyword::Generation() && value.IsInteger())
		return SetGenerationGap(value.GetInteger());

	// Stopping, fitness.
	if (keyword == Keyword::Stop() + Keyword::Dot() + Keyword::Fitness() && value.IsBoolean())
		return UseFitnessStopping(value.GetBoolean());

	// Stopping, keeplist.
	if (keyword == Keyword::Stop() + Keyword::Dot() + Keyword::Keep() && value.IsBoolean())
		return UseKeepListStopping(value.GetBoolean());

	// Probability, crossover.
	if (keyword == Keyword::Probability() + Keyword::Dot() + Keyword::Crossover() && value.IsFloat())
		return SetCrossoverProbability(value.GetFloat());

	// Probability, mutation.
	if (keyword == Keyword::Probability() + Keyword::Dot() + Keyword::Mutation() && value.IsFloat())
		return SetMutationProbability(value.GetFloat());

	// Probability, inversion.
	if (keyword == Keyword::Probability() + Keyword::Dot() + Keyword::Inversion() && value.IsFloat())
		return SetInversionProbability(value.GetFloat());

	// Number, crossover.
	if (keyword == Keyword::Number() + Keyword::Dot() + Keyword::Crossover() && value.IsInteger())
		return SetNoCrossoverPoints(value.GetInteger());

	// Number, mutation.
	if (keyword == Keyword::Number() + Keyword::Dot() + Keyword::Mutation() && value.IsInteger())
		return SetNoMutations(value.GetInteger());

	// Number, inversions/transpositions.
	if (keyword == Keyword::Number() + Keyword::Dot() + Keyword::Inversion() && value.IsInteger())
		return SetNoTranspositions(value.GetInteger());

	// Bias.
	if (keyword == Keyword::Bias() && value.IsFloat())
		return SetBias(value.GetFloat());

	// Costs.
	if (keyword == Keyword::Cost() && value.IsBoolean())
		return UseCosts(value.GetBoolean());

	// Costs, filename.
	if (keyword == Keyword::Cost() + Keyword::Dot() + Keyword::Filename())
		return SetCostFilename(value);

	// Approximate solutions.
	if (keyword == Keyword::Approximate() && value.IsBoolean())
		return ApproximateSolutions(value.GetBoolean());

	// Hitting fraction.
	if (keyword == Keyword::Fraction() && value.IsFloat())
		return SetHittingFraction(value.GetFloat());

	// Keep steps.
	if (keyword == Keyword::Keep() + Keyword::Dot() + Keyword::Levels() && value.IsInteger())
		return SetNoKeepSteps(value.GetInteger());

	return false;

}

//-------------------------------------------------------------------
// Method........: Apply
// Author........: Aleksander 豩rn
// Date..........:
// Description...:
// Comments......:
// Revisions.....:
//===================================================================

Structure *
SAVGeneticReducer::Apply(Structure &structure) const {

	// Read cost information, if relevant.
	if (UseCosts()) {
		if (!structure.IsA(DECISIONTABLE))
			return NULL;
		Handle<DecisionTable>     table = dynamic_cast(DecisionTable *, &structure);
		Handle<SAVGeneticReducer> self  = const_cast(SAVGeneticReducer *, this);
		if (!self->costs_info_.Load(GetCostFilename(), *table, 1.0 /* default cost */)) {
			Message::Error("Failed to load cost information.");
			return NULL;
		}
	}

	return Reducer::Apply(structure);

}

//-------------------------------------------------------------------
// Methods inherited from Reducer.
//===================================================================

//-------------------------------------------------------------------
// Method........: CreateFunction
// Author........: Aleksander 豩rn
// Date..........:
// Description...:
// Comments......:
// Revisions.....: A

⌨️ 快捷键说明

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