Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/15/20 14:52:22 (3 years ago)
Author:
dpiringe
Message:

#3076

  • updated SymbolicRegressionSingleObjectiveMetaModelAnalyzer to find a meta model with and without constant optimization
  • added a new result parameter of type DataTable in SymbolicRegressionConstraintAnalyzer to show the absolute number of unsatisfied individuals
  • added soft constraints handling for SymbolicRegressionSingleObjectiveConstraintEvaluator
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionConstraintAnalyzer.cs

    r17769 r17792  
    2525    private const string MaximumStepsParameterName = "Maximum Steps";
    2626    private const string StartPenalityParameterName = "Start Penality";
     27    private const string ConstraintUnsatisfiedSolutionsParameterName = "Constraint Unsatisfied Solutions";
    2728
    2829    #region parameter properties
     
    4950      (IValueParameter<DoubleValue>) Parameters[StartPenalityParameterName];
    5051
     52    public IResultParameter<DataTable> ConstraintUnsatisfiedSolutionsParameter =>
     53      (IResultParameter<DataTable>)Parameters[ConstraintUnsatisfiedSolutionsParameterName];
     54
    5155    #endregion
    5256
    5357    public override bool EnabledByDefault => false;
    5458    public static int Iterations { get; set; } = 0;
     59
     60    public IBoundsEstimator BoundsEstimator { get; set; } = new IABoundsEstimator();
    5561
    5662    [StorableConstructor]
     
    7985      Parameters.Add(new ValueParameter<DoubleValue>(StartPenalityParameterName,
    8086        "The start value for the penality multiplier.", new DoubleValue(0.5)));
     87      Parameters.Add(new ResultParameter<DataTable>(ConstraintUnsatisfiedSolutionsParameterName,
     88        "Shows the number of solutions with unsatisfied constraints."));
    8189
    8290
     
    92100          XAxisTitle = "Generations",
    93101          YAxisTitle = "Penality Multiplier"
     102        }
     103      };
     104
     105      ConstraintUnsatisfiedSolutionsParameter.DefaultValue = new DataTable(ConstraintUnsatisfiedSolutionsParameterName) {
     106        VisualProperties = {
     107          XAxisTitle = "Generations",
     108          YAxisTitle = "Constraint Unsatisfied Solutions"
    94109        }
    95110      };
     
    137152        Parameters.Add(new ValueParameter<DoubleValue>(StartPenalityParameterName,
    138153          "The start value for the penality multiplier.", new DoubleValue(0.5)));
     154
     155
     156      if(!Parameters.ContainsKey(ConstraintUnsatisfiedSolutionsParameterName)) {
     157        Parameters.Add(new ResultParameter<DataTable>(ConstraintUnsatisfiedSolutionsParameterName,
     158          "Shows the number of solutions with unsatisfied constraints."));
     159
     160        ConstraintUnsatisfiedSolutionsParameter.DefaultValue = new DataTable(ConstraintUnsatisfiedSolutionsParameterName) {
     161            VisualProperties = {
     162            XAxisTitle = "Generations",
     163            YAxisTitle = "Constraint Unsatisfied Solutions"
     164          }
     165        };
     166      }
    139167    }
    140168
     
    158186      var constraints = problemData.IntervalConstraints.EnabledConstraints;
    159187      var variableRanges = problemData.VariableRanges.GetReadonlyDictionary();
     188      var intervalCollection = problemData.VariableRanges;
    160189      var newDataTable = ConstraintViolationParameter.ActualValue;
     190      var solutions = this.SymbolicExpressionTree.ToArray();
    161191
    162192      if (newDataTable.Rows.Count == 0)
     
    176206        penalityDataTable.Rows.Add(new DataRow(rowName));
    177207      penalityDataTable.Rows[rowName].Values.Add(penalityMultiplier.Value);
     208
     209      var constraintUnsatisfiedSolutionsDataTable = ConstraintUnsatisfiedSolutionsParameter.ActualValue;
     210      if (constraintUnsatisfiedSolutionsDataTable.Rows.Count == 0)
     211        constraintUnsatisfiedSolutionsDataTable.Rows.Add(new DataRow(ConstraintUnsatisfiedSolutionsParameterName));
     212
     213      constraintUnsatisfiedSolutionsDataTable.Rows[ConstraintUnsatisfiedSolutionsParameterName]
     214        .Values
     215        .Add(
     216          solutions
     217          .Where(s => IntervalUtil.IntervalConstraintsViolation(constraints, BoundsEstimator, intervalCollection, s).Any(x => x != 0.0))
     218          .Count());
    178219
    179220      return base.Apply();
Note: See TracChangeset for help on using the changeset viewer.