- Timestamp:
- 07/11/19 16:30:22 (5 years ago)
- Location:
- branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMAlgorithm
- Files:
-
- 1 added
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMAlgorithm/EMMAlgorithm.cs
r17133 r17134 25 25 using HeuristicLab.Data; 26 26 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 27 using HeuristicLab.Problems.DataAnalysis; 27 28 using HeuristicLab.Problems.DataAnalysis.Symbolic; 29 using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression; 28 30 using HeuristicLab.Random; 29 31 using HeuristicLab.Selection; … … 34 36 35 37 namespace HeuristicLab.Algorithms.EvolvmentModelsOfModels { 36 [Item("Evolv ment Models Of Models Algorithm (EMM) ", "EMM implementation")]38 [Item("Evolvement Models Of Models Algorithm (EMM) ", "EMM implementation")] 37 39 [Creatable(CreatableAttribute.Categories.PopulationBasedAlgorithms, Priority = 125)] 38 40 [StorableType("AD23B21F-089A-4C6C-AD2E-1B01E7939CF5")] 39 41 public class EMMAlgorithm : EvolvmentModelsOfModelsAlgorithmBase { 42 #region Constructors 40 43 public EMMAlgorithm() : base() { } 41 44 protected EMMAlgorithm(EMMAlgorithm original, Cloner cloner) : base(original, cloner) { } … … 46 49 [StorableConstructor] 47 50 protected EMMAlgorithm(StorableConstructorFlag _) : base(_) { } 48 51 #endregion 52 #region Algorithm run 49 53 protected override void Run(CancellationToken cancellationToken) { 54 55 Map.DistanceParametr = DistanceType.Value; 56 50 57 if (AlgorithmImplemetationType.Value == "Read") { 51 Map.MapRead( RandomParameter.Value, trees, "Map.txt");58 Map.MapRead(trees); 52 59 } else { 53 60 Map.MapCreationPrepare(trees); 54 Map.CreateMap(RandomParameter.Value, ClusterNumbersParameter.Value.Value); 55 // Map.WriteMapToTxtFile(RandomParameter.Value); хайв этого не любит.. ворчит 56 } 57 ClusterNumbersShowParameter.Value.Value = Map.Map.Count; 58 59 if (AlgorithmImplemetationType.Value == "OnlyMap") { 60 globalScope = new Scope("Global Scope"); 61 executionContext = new ExecutionContext(null, this, globalScope); 62 } else { 63 if (previousExecutionState != ExecutionState.Paused) { 64 InitializeAlgorithm(cancellationToken); 65 } 66 if (!globalScope.Variables.ContainsKey("TreeModelMap")) 67 globalScope.Variables.Add(new Variable("TreeModelMap", Map)); 68 if (!globalScope.Variables.ContainsKey("Map")) 69 globalScope.Variables.Add(new Variable("Map", Map)); 70 EMMAlgorithmRun(cancellationToken); 71 } 61 Map.CreateMap(RandomParameter.Value, Problem); 62 } 63 if (previousExecutionState != ExecutionState.Paused) { 64 InitializeAlgorithm(cancellationToken); 65 } 66 if (!globalScope.Variables.ContainsKey("TreeModelMap")) 67 globalScope.Variables.Add(new Variable("TreeModelMap", Map)); 68 if (!globalScope.Variables.ContainsKey("Map")) 69 globalScope.Variables.Add(new Variable("Map", Map)); 70 EMMAlgorithmRun(cancellationToken); 72 71 } 73 72 private void EMMAlgorithmRun(CancellationToken cancellationToken) { … … 88 87 var rand = RandomParameter.Value; 89 88 var elites = Elites.Value; 90 91 // cancellation token for the inner operations which should not be immediately cancel led89 var fmd = new InfixExpressionFormatter(); 90 // cancellation token for the inner operations which should not be immediately canceled 92 91 var innerToken = new CancellationToken(); 92 // for future 93 //var mutatorTypes = new SymbolicExpressionTreeManipulator[] 94 //{ 95 // new EMMMultyPointsMutator(), 96 // new EMMMultyPointsMutatorNodeTypeSaving (), 97 // new EMMMutators() 98 //}; 99 //var tuu = MutatorParameter.ValidValues; 100 //var select = SelectorParameter.ValidValues; 93 101 94 102 while (EvaluatedSolutions < maximumEvaluatedSolutions && !cancellationToken.IsCancellationRequested) { … … 113 121 114 122 for (int i = 0; i < selector.NumberOfSelectedSubScopesParameter.Value.Value; i += 2) { 115 // crossover116 123 IScope childScope = null; 124 // for future 125 //var obbbb = CrossoverParameter.ValidValues.ToList(); 126 //int nn = 3; 127 //if (rand.NextDouble() < crossoverProbability) { 128 // childScope = new Scope($"{i}+{i + 1}") { Parent = executionContext.Scope }; 129 // childScope.SubScopes.Add(selected.SubScopes[i]); 130 // childScope.SubScopes.Add(selected.SubScopes[i + 1]); 131 // var op1 = executionContext.CreateChildOperation(obbbb[nn], childScope); 132 // ExecuteOperation(executionContext, innerToken, op1); 133 // childScope.SubScopes.Clear(); 134 //} 135 117 136 if (rand.NextDouble() < crossoverProbability) { 118 137 childScope = new Scope($"{i}+{i + 1}") { Parent = executionContext.Scope }; … … 133 152 // evaluation 134 153 if (childScope != null) { 135 var op3 = executionContext.CreateChildOperation(evaluator, childScope); 136 ExecuteOperation(executionContext, innerToken, op3); 137 //if (Problem.ProblemData is IRegressionProblemData problemData) { 138 // SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(Problem.SymbolicExpressionTreeInterpreter, (ISymbolicExpressionTree)childScope.Variables["SymbolicExpressionTree"].Value, problemData, problemData.TestIndices, true, 100 /*max iterration*/, true); 139 //} 140 ++EvaluatedSolutions; 141 Population.Add(new EMMSolution(childScope)); 154 if (!childScope.Variables.ContainsKey("Quality")) 155 childScope.Variables.Add(new Variable("Quality")); 156 EvaluationComplex(executionContext, innerToken, childScope); 142 157 } else {// no crossover or mutation were applied, a child was not produced, do nothing 143 158 Population.Add(new EMMSolution(selected.SubScopes[i])); … … 146 161 break; 147 162 } 148 149 } 150 if (Map is EMMSucsessMap) { 151 var population = new Dictionary<ISymbolicExpressionTree, double>(); 152 foreach (var individ in Population) { 153 var tree = (ISymbolicExpressionTree)(((IScope)individ.Individual).Variables["SymbolicExpressionTree"].Value); 154 population.Add(tree, individ.Qualities.Value); 155 } 156 Map.MapUpDate(population); 157 population.Clear(); 158 } 159 //List<object> A = new List<object>(); 160 //A.Add(new Scope ()); 161 //A.Add(new SymbolicExpressionTree()); 163 } 164 165 UpDateParameters(); 162 166 163 167 globalScope.SubScopes.Replace(Population.Select(x => (IScope)x.Individual)); … … 165 169 var analyze = executionContext.CreateChildOperation(analyzer, globalScope); 166 170 ExecuteOperation(executionContext, innerToken, analyze); 171 167 172 Results.AddOrUpdateResult("Evaluated Solutions", new IntValue(EvaluatedSolutions)); 168 173 } 169 174 } 175 protected virtual void UpDateParameters() { 176 if (Map is EMMSucsessMap) { 177 var population = new Dictionary<ISymbolicExpressionTree, double>(); 178 foreach (var individ in Population) { 179 var tree = (ISymbolicExpressionTree)(((IScope)individ.Individual).Variables["SymbolicExpressionTree"].Value); 180 population.Add(tree, individ.Qualities.Value); 181 } 182 Map.MapUpDate(population); 183 population.Clear(); 184 } 185 } 186 #endregion 187 #region Initialization 170 188 protected void InitializeAlgorithm(CancellationToken cancellationToken) { 171 189 globalScope = new Scope("Global Scope"); … … 181 199 if (SetSeedRandomly) Seed = RandomSeedGenerator.GetSeed(); 182 200 rand.Reset(Seed); 183 201 EvaluatedSolutions = 0; 202 // InitializeParametrs(); for future 184 203 InitializePopulation(executionContext, cancellationToken, rand); 185 EvaluatedSolutions = PopulationSize.Value; 204 186 205 187 206 base.Initialize(cancellationToken); 188 207 } 208 protected virtual void InitializeParametrs() { } 189 209 190 210 private void InitializePopulation(ExecutionContext executionContext, CancellationToken cancellationToken, IRandom random) { 191 211 Population = new List<IEMMSolution>(); 212 var fmd = new InfixExpressionFormatter(); 192 213 var evaluator = Problem.Evaluator; 193 214 var creator = Problem.SolutionCreator; 215 var parser = new InfixExpressionParser(); 216 194 217 var parentScope = executionContext.Scope; //main scope for the next step work 195 218 // first, create all individuals … … 199 222 var name = ((ISymbolicExpressionTreeCreator)creator).SymbolicExpressionTreeParameter.ActualName; 200 223 var tree = (ISymbolicExpressionTree)childScope.Variables[name].Value; 224 201 225 foreach (var node in tree.IterateNodesPostfix().OfType<TreeModelTreeNode>()) { 202 226 Map.NodeManipulationForInizializtion(random, node); … … 207 231 for (int i = 0; i < PopulationSize.Value; ++i) { 208 232 var childScope = parentScope.SubScopes[i]; 209 ExecuteOperation(executionContext, cancellationToken, executionContext.CreateChildOperation(evaluator, childScope)); 210 Population.Add(new EMMSolution(childScope)); // Create solution and push individual inside. push solution to Population 211 } 212 } 213 233 if (!childScope.Variables.ContainsKey("Quality")) 234 childScope.Variables.Add(new Variable("Quality", new DoubleValue(0))); 235 EvaluationComplex(executionContext, cancellationToken, childScope); 236 } 237 } 238 #endregion 239 #region Evaluators 240 private void EvaluationComplex(ExecutionContext executionContext, CancellationToken cancellationToken, IScope childScope) { 241 var evaluator = Problem.Evaluator; 242 if (evaluator is SymbolicRegressionConstantOptimizationEvaluator eval) { 243 var creator = Problem.SolutionCreator; 244 var name = ((ISymbolicExpressionTreeCreator)creator).SymbolicExpressionTreeParameter.ActualName; 245 var tree = (ISymbolicExpressionTree)childScope.Variables[name].Value; 246 var treeWithModelInside = ModelToTreePusher(tree); 247 248 //ExecuteOperation(executionContext, cancellationToken, executionContext.CreateChildOperation(evaluator, treeScope)); 249 var pd = (IRegressionProblemData)Problem.ProblemData; 250 var estimationLimits = ((SymbolicRegressionSingleObjectiveProblem)Problem).EstimationLimits; 251 var interpreter = new SymbolicDataAnalysisExpressionTreeBatchInterpreter(); 252 var quality = SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(interpreter, treeWithModelInside, pd, pd.TrainingIndices, applyLinearScaling: true, maxIterations: 10, updateVariableWeights: true, lowerEstimationLimit: estimationLimits.Lower, upperEstimationLimit: estimationLimits.Upper, updateConstantsInTree: true); 253 childScope.Variables["Quality"].Value = new DoubleValue(quality); 254 255 int index = 0; 256 ConstuntValuesInTreeUpdate(tree, ConstantValuesFromTreeToListExtruction(treeWithModelInside), ref index); 257 childScope.Variables[name].Value = tree; 258 EvaluatedSolutions += 10; 259 } else { 260 var op3 = executionContext.CreateChildOperation(evaluator, childScope); 261 ExecuteOperation(executionContext, cancellationToken, op3); 262 EvaluatedSolutions += 1; 263 } 264 Population.Add(new EMMSolution(childScope)); 265 } 266 private ISymbolicExpressionTree ModelToTreePusher(ISymbolicExpressionTree tree) { 267 //All model nodes in tree are exchange to trees that are stored in model nodes. 268 // After this function we have deal with usual tree 269 var clone = (ISymbolicExpressionTree)tree.Clone(); 270 foreach (var node in clone.IterateNodesPostfix().OfType<TreeModelTreeNode>()) { 271 var newChild = node.Tree.Root.GetSubtree(0).GetSubtree(0); 272 Swap(node, newChild); 273 } 274 return clone; 275 } 276 protected static void Swap(ISymbolicExpressionTreeNode oldChild, ISymbolicExpressionTreeNode newChild) { 277 var parent = oldChild.Parent; 278 if (parent == null) 279 return; 280 281 var index = parent.IndexOfSubtree(oldChild); 282 parent.RemoveSubtree(index); 283 parent.InsertSubtree(index, newChild); 284 } 285 private List<double> ConstantValuesFromTreeToListExtruction(ISymbolicExpressionTree tree) { 286 //This function stored in a list all constants and coefficients from the tree 287 var constants = new List<double>(); 288 foreach (var node in tree.IterateNodesPostfix()) { 289 if (node is ConstantTreeNode cNode) { 290 constants.Add(cNode.Value); 291 } 292 if (node is VariableTreeNode vNode) { 293 constants.Add(vNode.Weight); 294 } 295 } 296 return constants; 297 } 298 private void ConstuntValuesInTreeUpdate(ISymbolicExpressionTree tree, List<double> constants, ref int index) { 299 foreach (var node in tree.IterateNodesPostfix()) { 300 if (node is ConstantTreeNode cNode) { 301 cNode.Value = constants[index]; 302 index++; 303 } else if (node is VariableTreeNode vNode) { 304 vNode.Weight = constants[index]; 305 index++; 306 } else if (node is TreeModelTreeNode mNode) { 307 ConstuntValuesInTreeUpdate(mNode.Tree, constants, ref index); 308 } 309 310 } 311 } 312 #endregion 313 #region Local Search 214 314 // next function was not tested in real work 215 315 private void LocalDecent(ISymbolicDataAnalysisSingleObjectiveProblem problem, CancellationToken cancellationToken, IScope childScope) { … … 257 357 } 258 358 } 359 #endregion 259 360 } 260 361 -
branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMAlgorithm/EMMBaseAlgorithm.cs
r17133 r17134 41 41 42 42 namespace HeuristicLab.Algorithms.EvolvmentModelsOfModels { 43 [Item(" MOEADAlgorithmBase", "Base class for all MOEA/Dalgorithm variants.")]43 [Item("EMMAlgorithmBase", "Base class for all EMM algorithm variants.")] 44 44 [StorableType("A56A396B-965A-4ADE-8A2B-AE3A45F9C239")] 45 45 public abstract class EvolvmentModelsOfModelsAlgorithmBase : FixedDataAnalysisAlgorithm<ISymbolicDataAnalysisSingleObjectiveProblem> { … … 78 78 private const string AnalyzerParameterName = "Analyzer"; 79 79 private const string InputFileParameterName = "InputFile"; 80 private const string ClusterNumbersParameterName = "ClusterNumbers";81 private const string ClusterNumbersShowParameterName = "ClusterNumbersShow";82 80 private const string AlgorithmImplementationTypeParameterName = "AlgorithmImplementationType"; 81 private const string DistanceTypeParameterName = "DistanceType"; 83 82 private const string MapParameterName = "Map"; 84 private const string NegbourTypeParameterName = "NegbourType";85 private const string NegbourNumberParameterName = "NegbourNumber";86 83 public IValueParameter<MultiAnalyzer> AnalyzerParameter { 87 84 get { return (ValueParameter<MultiAnalyzer>)Parameters[AnalyzerParameterName]; } … … 90 87 get { return (IFixedValueParameter<IntValue>)Parameters[SeedParameterName]; } 91 88 } 92 public IValueParameter<IntValue> ClusterNumbersParameter {93 get { return (IValueParameter<IntValue>)Parameters[ClusterNumbersParameterName]; }94 }95 public IValueParameter<IntValue> ClusterNumbersShowParameter {96 get { return (IValueParameter<IntValue>)Parameters[ClusterNumbersShowParameterName]; }97 }98 89 public IConstrainedValueParameter<StringValue> AlgorithmImplementationTypeParameter { 99 90 get { return (IConstrainedValueParameter<StringValue>)Parameters[AlgorithmImplementationTypeParameterName]; } 100 91 } 92 public IConstrainedValueParameter<StringValue> DistanceTypeParameter { 93 get { return (IConstrainedValueParameter<StringValue>)Parameters[DistanceTypeParameterName]; } 94 } 101 95 public IConstrainedValueParameter<EMMMapBase<ISymbolicExpressionTree>> MapParameter { 102 96 get { return (IConstrainedValueParameter<EMMMapBase<ISymbolicExpressionTree>>)Parameters[MapParameterName]; } 103 97 } 104 public IFixedValueParameter<StringValue> NegbourTypeParameter { 105 get { return (IFixedValueParameter<StringValue>)Parameters[NegbourTypeParameterName]; } 106 } 107 public IFixedValueParameter<IntValue> NegbourNumberParameter { 108 get { return (IFixedValueParameter<IntValue>)Parameters[NegbourNumberParameterName]; } 109 } 98 110 99 public IFixedValueParameter<StringValue> InputFileParameter { 111 100 get { return (IFixedValueParameter<StringValue>)Parameters[InputFileParameterName]; } … … 151 140 set { SeedParameter.Value.Value = value; } 152 141 } 153 public IntValue ClusterNumbers {154 get { return ClusterNumbersParameter.Value; }155 set { ClusterNumbersParameter.Value = value; }156 }157 public IntValue ClusterNumbersShow {158 get { return ClusterNumbersShowParameter.Value; }159 set { ClusterNumbersShowParameter.Value = value; }160 }161 142 public StringValue AlgorithmImplemetationType { 162 143 get { return AlgorithmImplementationTypeParameter.Value; } 163 144 set { AlgorithmImplementationTypeParameter.Value.Value = value.Value; } 164 145 } 146 public StringValue DistanceType { 147 get { return DistanceTypeParameter.Value; } 148 set { DistanceTypeParameter.Value.Value = value.Value; } 149 } 165 150 public EMMMapBase<ISymbolicExpressionTree> Map { 166 151 get { return MapParameter.Value; } 167 152 set { MapParameter.Value = value; } 168 153 } 169 public StringValue NegbourType {170 get { return NegbourTypeParameter.Value; }171 set { NegbourTypeParameter.Value.Value = value.Value; }172 }173 public IntValue NegbourNumber {174 get { return NegbourNumberParameter.Value; }175 set { NegbourNumberParameter.Value.Value = value.Value; }176 }177 154 public StringValue InputFile { 178 155 get { return InputFileParameter.Value; } … … 229 206 Parameters.Add(new FixedValueParameter<IntValue>(SeedParameterName, "The random seed used to initialize the new pseudo random number generator.", new IntValue(0))); 230 207 Parameters.Add(new FixedValueParameter<StringValue>(InputFileParameterName, "The file with set of models that will be.", new StringValue("input.txt"))); 231 Parameters.Add(new ConstrainedValueParameter<StringValue>(AlgorithmImplementationTypeParameterName, "The Type of possible algorith, implemetation, choose one: OnlyMap, Full, Read.")); 232 Parameters.Add(new ConstrainedValueParameter<EMMMapBase<ISymbolicExpressionTree>>(MapParameterName, "The type of map crearion algorithm. Use one from: IslandMap, NetworkMap.")); 233 Parameters.Add(new FixedValueParameter<IntValue>(NegbourNumberParameterName, "The parametr for FullMap type of map crearion algorithm. Use one from: 10, 20.", new IntValue(10))); 234 Parameters.Add(new FixedValueParameter<StringValue>(NegbourTypeParameterName, "The parametr for FullMap type of map crearion algorithm. Use one from: Percent, Number.", new StringValue("Number"))); 208 Parameters.Add(new ConstrainedValueParameter<StringValue>(AlgorithmImplementationTypeParameterName, "The Type of possible algorithm, implementation, choose one: OnlyMap, Full, Read.")); 209 Parameters.Add(new ConstrainedValueParameter<StringValue>(DistanceTypeParameterName, "The Type of possible distance calculator for case of only distance calculation.")); 210 Parameters.Add(new ConstrainedValueParameter<EMMMapBase<ISymbolicExpressionTree>>(MapParameterName, "The type of map creation algorithm. Use one from: IslandMap, NetworkMap.")); 235 211 Parameters.Add(new FixedValueParameter<BoolValue>(SetSeedRandomlyParameterName, "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true))); 236 212 Parameters.Add(new ValueParameter<IntValue>(PopulationSizeParameterName, "The size of the population of Solutions.", new IntValue(100))); 237 Parameters.Add(new ConstrainedValueParameter<ISelector>(SelectorParameterName, "The operator used to sel lect parents."));213 Parameters.Add(new ConstrainedValueParameter<ISelector>(SelectorParameterName, "The operator used to select parents.")); 238 214 Parameters.Add(new ValueParameter<PercentValue>(CrossoverProbabilityParameterName, "The probability that the crossover operator is applied.", new PercentValue(0.9))); 239 215 Parameters.Add(new ValueParameter<IntValue>(GroupSizeParameterName, "The GoupSize that the Selector operator is applied.", new IntValue(3))); … … 244 220 Parameters.Add(new ValueParameter<IntValue>(MaximumEvaluatedSolutionsParameterName, "The maximum number of evaluated Solutions (approximately).", new IntValue(100_000))); 245 221 Parameters.Add(new ValueParameter<IRandom>(RandomParameterName, new MersenneTwister())); 246 Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite Solutions which are kept in each generation.", new IntValue(1))); 247 Parameters.Add(new ValueParameter<IntValue>(ClusterNumbersParameterName, "The number of clusters for model Map.", new IntValue(10))); 248 Parameters.Add(new ValueParameter<IntValue>(ClusterNumbersShowParameterName, "The number of clusters for model Map.", new IntValue(10))); 222 Parameters.Add(new ValueParameter<IntValue>("Elites", "The number of elite Solutions which are kept in each generation.", new IntValue(1))); 249 223 foreach (ISelector selector in ApplicationManager.Manager.GetInstances<ISelector>().Where(x => !(x is IMultiObjectiveSelector)).OrderBy(x => x.Name)) 250 224 SelectorParameter.ValidValues.Add(selector); … … 274 248 if (Problem != null) { 275 249 Problem.SymbolicExpressionTreeInterpreter = new SymbolicDataAnalysisExpressionTreeBatchInterpreter(); 276 //Problem.SymbolicExpressionTreeGrammar = new EMMGrammar();277 250 } 278 251 } 279 252 protected void MapParameterUpdate() { 280 int neghboorNumber = 10;281 282 switch (NegbourType.Value) {283 case "Percent": neghboorNumber = Convert.ToInt32((Convert.ToDouble(ClusterNumbersParameter.Value.Value)) * (Convert.ToDouble(NegbourNumber.Value)) / 100.0); break;284 case "Number": neghboorNumber = NegbourNumber.Value; break;285 default: neghboorNumber = NegbourNumber.Value; break;286 }287 253 var mapTypes = new EMMMapBase<ISymbolicExpressionTree>[] 288 254 { 289 255 new EMMIslandMap(), 290 new EMMNetworkMap( neghboorNumber),256 new EMMNetworkMap(), 291 257 new EMMDisatanceMap(), 292 258 new EMMRankMap(), … … 301 267 new StringValue("Full"), 302 268 new StringValue("Read"), 303 new StringValue ("OnlyMap")304 269 }; 305 270 foreach (var t in algorithmType) { 306 271 AlgorithmImplementationTypeParameter.ValidValues.Add(t); 307 272 } 273 var distanceType = new StringValue[] 274 { 275 new StringValue("MSE"), 276 new StringValue("PearsonsRSquared"), 277 new StringValue ("Covariance"), 278 new StringValue ("MaxAbsoluteError"), 279 new StringValue ("MeanAbsoluteError"), 280 new StringValue ("Symbolic") 281 }; 282 foreach (var t in distanceType) { 283 DistanceTypeParameter.ValidValues.Add(t); 284 } 308 285 } 309 286 … … 320 297 } 321 298 322 //if (original.offspringPopulation != null) {323 // offspringPopulation = original.offspringPopulation.Select(cloner.Clone).ToList();324 //}325 326 //if (original.jointPopulation != null) {327 // jointPopulation = original.jointPopulation.Select(x => cloner.Clone(x)).ToList();328 //}329 330 299 if (original.executionContext != null) { 331 300 executionContext = cloner.Clone(original.executionContext); … … 335 304 globalScope = cloner.Clone(original.globalScope); 336 305 } 337 338 // hack 339 trees = original.trees.Select(x => cloner.Clone(x)).ToArray(); 306 // hack 307 if (original.trees != null) { 308 trees = original.trees.Select(x => cloner.Clone(x)).ToArray(); 309 } 340 310 } 341 311 -
branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMAlgorithm/EMMSolution.cs
r17133 r17134 24 24 using HeuristicLab.Core; 25 25 using DoubleValue = HeuristicLab.Data.DoubleValue; 26 // Can be deleted pot netinaly26 // Can be deleted potentially 27 27 namespace HeuristicLab.Algorithms.EvolvmentModelsOfModels { 28 28 [StorableType("AB38211D-5F52-4420-A606-1C3CB58BA27C")]
Note: See TracChangeset
for help on using the changeset viewer.