Changeset 16137 for branches/2457_ExpertSystem/HeuristicLab.Analysis.FitnessLandscape/3.3/CharacteristicCalculator/RandomWalkCalculator.cs
- Timestamp:
- 09/12/18 15:12:29 (6 years ago)
- Location:
- branches/2457_ExpertSystem
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2457_ExpertSystem
- Property svn:ignore
-
old new 5 5 .gitignore 6 6 .vs 7 packages
-
- Property svn:ignore
-
branches/2457_ExpertSystem/HeuristicLab.Analysis.FitnessLandscape/3.3/CharacteristicCalculator/RandomWalkCalculator.cs
r14690 r16137 20 20 #endregion 21 21 22 using System.Collections.Generic; 23 using System.Linq; 22 24 using HeuristicLab.Common; 23 25 using HeuristicLab.Core; … … 25 27 using HeuristicLab.Optimization; 26 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 27 using System;28 using System.Collections.Generic;29 using System.Linq;30 using System.Threading;31 29 32 30 namespace HeuristicLab.Analysis.FitnessLandscape { 33 31 [Item("Random Walk Calculator", "Calculates characteristics from a random walk.")] 34 32 [StorableClass] 35 public class RandomWalkCalculator : NamedItem, ICharacteristicCalculator { 36 37 [Storable] 38 private IProblem problem; 39 public IProblem Problem { 40 get { return problem; } 41 set { 42 if (problem == value) return; 43 problem = value; 44 var soProblem = problem as ISingleObjectiveHeuristicOptimizationProblem; 45 walker.Problem = soProblem; 46 } 47 } 48 49 [Storable] 50 private RandomWalk walker; 33 public sealed class RandomWalkCalculator : AlgorithmCharacteristicCalculator<RandomWalk> { 51 34 52 35 [StorableConstructor] 53 36 private RandomWalkCalculator(bool deserializing) : base(deserializing) { } 54 private RandomWalkCalculator(RandomWalkCalculator original, Cloner cloner) 55 : base(original, cloner) { 56 problem = cloner.Clone(original.problem); 57 walker = cloner.Clone(original.walker); 58 characteristics = cloner.Clone(original.characteristics); 59 } 37 private RandomWalkCalculator(RandomWalkCalculator original, Cloner cloner) : base(original, cloner) { } 60 38 public RandomWalkCalculator() : this(new RandomWalk()) { } 61 public RandomWalkCalculator(RandomWalk walker) {39 public RandomWalkCalculator(RandomWalk walker) : base(walker) { 62 40 Name = ItemName; 63 41 Description = ItemDescription; 64 this.walker = walker;65 42 characteristics = new CheckedItemList<StringValue>( 66 43 new[] { "AutoCorrelation1", "CorrelationLength", "InformationContent", … … 74 51 } 75 52 76 private CheckedItemList<StringValue> characteristics; 77 public ReadOnlyCheckedItemList<StringValue> Characteristics { 78 get { return characteristics.AsReadOnly(); } 53 public override bool CanCalculate() { 54 return base.CanCalculate() && Problem.Operators.Any(x => x is IManipulator); 79 55 } 80 56 81 public bool CanCalculate() { 82 return Problem is ISingleObjectiveHeuristicOptimizationProblem 83 && Problem.Operators.Any(x => x is IManipulator); 84 } 85 86 public IEnumerable<IResult> Calculate() { 87 walker.Prepare(true); 88 using (var waitHandle = new AutoResetEvent(false)) { 89 EventHandler evHandle = (sender, e) => { 90 if (walker.ExecutionState == ExecutionState.Paused 91 || walker.ExecutionState == ExecutionState.Stopped) waitHandle.Set(); 92 }; 93 walker.ExecutionStateChanged += evHandle; 94 try { 95 walker.Start(); 96 waitHandle.WaitOne(); 97 } finally { walker.ExecutionStateChanged -= evHandle; } 98 } 99 foreach (var p in characteristics.CheckedItems) { 100 var resultName = "RandomWalk." + walker.MutatorParameter.Value.Name + "." + p.Value.Value; 101 IResult result; 102 if (walker.Results.TryGetValue(p.Value.Value, out result)) { 103 yield return new Result(resultName, result.Value); 104 } else yield return new Result(resultName, new DoubleValue(0)); 105 } 106 walker.Prepare(true); 107 } 108 109 public void CollectParameterValues(IDictionary<string, IItem> values) { 110 walker.CollectParameterValues(values); 111 } 112 113 public IKeyedItemCollection<string, IParameter> Parameters { 114 get { return ((IParameterizedItem)walker).Parameters; } 57 public override IEnumerable<IResult> Calculate() { 58 foreach (var result in base.Calculate()) 59 yield return new Result("RandomWalk." + Algorithm.MutatorParameter.Value.Name + "." + result.Name, result.Value); 115 60 } 116 61 }
Note: See TracChangeset
for help on using the changeset viewer.