using HEAL.Attic; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Parameters; using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression; namespace HeuristicLab.Problems.DataAnalysis.Symbolic { [Item("Symbolic regression single-objective user-defined evaluator", "Encapsulates a collection of single-objective evaluators and aggregates their output.")] [StorableType("BCA2D407-576B-4529-8586-A4DFCE117F4C")] public class SymbolicRegressionSingleObjectiveUserDefinedEvaluator : SymbolicDataAnalysisSingleObjectiveUserDefinedEvaluator, ISymbolicRegressionSingleObjectiveEvaluator { private const string OptimizeConstantsParameterName = "OptimizeConstants"; private const string ConstantOptimizationIterationsParameterName = "ConstantOptimizationIterations"; public IFixedValueParameter OptimizeConstantsParameter { get { return (IFixedValueParameter)Parameters[OptimizeConstantsParameterName]; } } public IFixedValueParameter ConstantOptimizationIterationsParameter { get { return (IFixedValueParameter)Parameters[ConstantOptimizationIterationsParameterName]; } } public bool OptimizeConstants => OptimizeConstantsParameter.Value.Value; public int ConstantOptimizationIterations => ConstantOptimizationIterationsParameter.Value.Value; public ILookupParameter QualitiesParameter => throw new System.NotImplementedException(); public SymbolicRegressionSingleObjectiveUserDefinedEvaluator() { Parameters.Add(new FixedValueParameter(OptimizeConstantsParameterName, new BoolValue(false))); Parameters.Add(new FixedValueParameter(ConstantOptimizationIterationsParameterName, new IntValue(10))); } protected SymbolicRegressionSingleObjectiveUserDefinedEvaluator(SymbolicRegressionSingleObjectiveUserDefinedEvaluator original, Cloner cloner) : base(original, cloner) { } public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicRegressionSingleObjectiveUserDefinedEvaluator(this, cloner); } [StorableConstructor] protected SymbolicRegressionSingleObjectiveUserDefinedEvaluator(StorableConstructorFlag _) : base(_) { } public override IOperation InstrumentedApply() { var tree = SymbolicExpressionTreeParameter.ActualValue; var problemData = ProblemDataParameter.ActualValue; if (OptimizeConstants) { var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue; var estimationLimits = EstimationLimitsParameter.ActualValue; var applyLinearScaling = ApplyLinearScalingParameter.ActualValue.Value; var iterations = ConstantOptimizationIterations; SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(interpreter, tree, problemData, problemData.TrainingIndices, applyLinearScaling, iterations, true, estimationLimits.Lower, estimationLimits.Upper, true); } return base.InstrumentedApply(); } } }