using HEAL.Attic; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Parameters; namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression { [Item("Symbolic regression multi-objective user-defined evaluator", "Encapsulates a collection of single-objective evaluators and returns an array of qualities.")] [StorableType("9F77E2DA-B358-47FA-9DFF-EF04C9A7769A")] public class SymbolicRegressionMultiObjectiveUserDefinedEvaluator : SymbolicDataAnalysisMultiObjectiveUserDefinedEvaluator, ISymbolicRegressionMultiObjectiveEvaluator { 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 SymbolicRegressionMultiObjectiveUserDefinedEvaluator() { Parameters.Add(new FixedValueParameter(OptimizeConstantsParameterName, new BoolValue(false))); Parameters.Add(new FixedValueParameter(ConstantOptimizationIterationsParameterName, new IntValue(10))); } protected SymbolicRegressionMultiObjectiveUserDefinedEvaluator(SymbolicRegressionMultiObjectiveUserDefinedEvaluator original, Cloner cloner) : base(original, cloner) { } public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicRegressionMultiObjectiveUserDefinedEvaluator(this, cloner); } [StorableConstructor] protected SymbolicRegressionMultiObjectiveUserDefinedEvaluator(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(); } } }