📄 savgeneticreducer.cpp
字号:
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 + -