Changeset 17892 for branches/3076_IA_evaluators_analyzers_reintegration/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator.cs
- Timestamp:
- 03/12/21 16:42:21 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3076_IA_evaluators_analyzers_reintegration/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator.cs
r17882 r17892 22 22 #endregion 23 23 24 using System;25 24 using System.Collections.Generic; 26 25 using System.Linq; … … 37 36 [StorableType("8E9D76B7-ED9C-43E7-9898-01FBD3633880")] 38 37 public class 39 SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator : SymbolicRegressionMultiObjectiveEvaluator 40 { 38 SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator : SymbolicRegressionMultiObjectiveEvaluator { 41 39 public const string DimensionsParameterName = "Dimensions"; 42 40 private const string BoundsEstimatorParameterName = "Bounds estimator"; 43 41 44 42 public IFixedValueParameter<IntValue> DimensionsParameter => 45 (IFixedValueParameter<IntValue>) 43 (IFixedValueParameter<IntValue>)Parameters[DimensionsParameterName]; 46 44 47 45 public IValueParameter<IBoundsEstimator> BoundsEstimatorParameter => 48 (IValueParameter<IBoundsEstimator>) Parameters[BoundsEstimatorParameterName]; 46 (IValueParameter<IBoundsEstimator>)Parameters[BoundsEstimatorParameterName]; 47 48 public int Dimensions { 49 get => DimensionsParameter.Value.Value; 50 set => DimensionsParameter.Value.Value = value; 51 } 49 52 50 53 public IBoundsEstimator BoundsEstimator { … … 57 60 public SymbolicRegressionMultiObjectiveMultiSoftConstraintEvaluator() { 58 61 Parameters.Add(new FixedValueParameter<IntValue>(DimensionsParameterName, new IntValue(2))); 59 Parameters.Add(new ValueParameter<IBoundsEstimator>(BoundsEstimatorParameterName, new I ABoundsEstimator()));62 Parameters.Add(new ValueParameter<IBoundsEstimator>(BoundsEstimatorParameterName, new IntervalArithBoundsEstimator())); 60 63 } 61 64 … … 74 77 75 78 if (!Parameters.ContainsKey(BoundsEstimatorParameterName)) 76 Parameters.Add(new ValueParameter<IBoundsEstimator>(BoundsEstimatorParameterName, new I ABoundsEstimator()));79 Parameters.Add(new ValueParameter<IBoundsEstimator>(BoundsEstimatorParameterName, new IntervalArithBoundsEstimator())); 77 80 } 78 81 … … 121 124 if (node.Symbol.Name == "Offset") { 122 125 node.RemoveSubtree(1); 123 var alphaNode = new ConstantTreeNode(new Constant()) { Value = alpha};126 var alphaNode = new ConstantTreeNode(new Constant()) { Value = alpha }; 124 127 node.AddSubtree(alphaNode); 125 128 } else if (node.Symbol.Name == "Scaling") { 126 129 node.RemoveSubtree(1); 127 var betaNode = new ConstantTreeNode(new Constant()) { Value = beta};130 var betaNode = new ConstantTreeNode(new Constant()) { Value = beta }; 128 131 node.AddSubtree(betaNode); 129 132 } … … 165 168 var estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows); 166 169 var targetValues = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, rows); 167 var constraints = problemData. IntervalConstraints.Constraints.Where(c => c.Enabled);170 var constraints = problemData.ShapeConstraints.Where(c => c.Enabled); 168 171 var intervalCollection = problemData.VariableRanges; 169 172 … … 177 180 nmse = 1.0; 178 181 179 var objectives = new List<double> { nmse};180 var results = IntervalUtil.IntervalConstraintsViolation(constraints, estimator, intervalCollection, solution);181 foreach (var result in results) {182 if (double.IsNaN( result) || double.IsInfinity(result)) {182 var objectives = new List<double> { nmse }; 183 var violations = IntervalUtil.GetConstraintViolations(constraints, estimator, intervalCollection, solution); 184 foreach (var violation in violations) { 185 if (double.IsNaN(violation) || double.IsInfinity(violation)) { 183 186 objectives.Add(double.MaxValue); 184 187 } else { 185 objectives.Add( result);188 objectives.Add(violation); 186 189 } 187 190 } 188 191 189 192 return objectives.ToArray(); 190 193 } … … 197 200 public override IEnumerable<bool> Maximization { 198 201 get { 199 var objectives = new List<bool> {false}; //First NMSE ==> min 200 objectives.AddRange(Enumerable.Repeat(false, DimensionsParameter.Value.Value)); //Constraints ==> min 202 var objectives = new List<bool> { false }; // NMSE ==> min 203 var dim = Dimensions; 204 objectives.AddRange(Enumerable.Repeat(false, dim)); // Constraints ==> min 201 205 202 206 return objectives;
Note: See TracChangeset
for help on using the changeset viewer.