using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Text.RegularExpressions; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; using HeuristicLab.Optimization; using HeuristicLab.Parameters; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using HeuristicLab.PluginInfrastructure; namespace HeuristicLab.Problems.GrammaticalOptimization { [NonDiscoverableType] [StorableClass] [Item("GenericSymbExprProblem", "Represents grammatical optimization problems (using a symbolic expression tree encoding).")] public class GenericSymbExprProblem : SingleObjectiveHeuristicOptimizationProblem { #region string consts private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar"; private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth"; private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength"; #endregion #region parameter properties public IValueParameter SymbolicExpressionTreeGrammarParameter { get { return (IValueParameter)Parameters[SymbolicExpressionTreeGrammarParameterName]; } } public IFixedValueParameter MaximumSymbolicExpressionTreeDepthParameter { get { return (IFixedValueParameter)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; } } public IFixedValueParameter MaximumSymbolicExpressionTreeLengthParameter { get { return (IFixedValueParameter)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; } } #endregion #region properties public ISymbolicExpressionTreeGrammar SymbolicExpressionTreeGrammar { get { return SymbolicExpressionTreeGrammarParameter.Value; } set { SymbolicExpressionTreeGrammarParameter.Value = value; } } public IntValue MaximumSymbolicExpressionTreeDepth { get { return MaximumSymbolicExpressionTreeDepthParameter.Value; } } public IntValue MaximumSymbolicExpressionTreeLength { get { return MaximumSymbolicExpressionTreeLengthParameter.Value; } } public new GenericSymbExprEvaluator Evaluator { get { return (GenericSymbExprEvaluator)base.Evaluator; } } #endregion [StorableConstructor] public GenericSymbExprProblem(bool deserializing) : base(deserializing) { } public GenericSymbExprProblem(GenericSymbExprProblem original, Cloner cloner) : base(original, cloner) { } public GenericSymbExprProblem(ISymbolicExpressionTreeProblem problem) : base(new GenericSymbExprEvaluator(problem.ConvertTreeToSentence, problem.Evaluate), new ProbabilisticTreeCreator()) { var grammar = new GenericSymbExprGrammar(problem.TreeBasedGPGrammar); Parameters.Add(new ValueParameter(SymbolicExpressionTreeGrammarParameterName, grammar)); Parameters.Add(new FixedValueParameter(MaximumSymbolicExpressionTreeLengthParameterName, new IntValue(50))); Parameters.Add(new FixedValueParameter(MaximumSymbolicExpressionTreeDepthParameterName, new IntValue(15))); Maximization = new BoolValue(true); BestKnownQuality = new DoubleValue(1.0); Operators.AddRange(ApplicationManager.Manager.GetInstances()); } public override IDeepCloneable Clone(Cloner cloner) { return new GenericSymbExprProblem(this, cloner); } } }