Changeset 5568
- Timestamp:
- 02/28/11 17:25:28 (14 years ago)
- Location:
- trunk/sources
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimization.cs
r5561 r5568 26 26 using HeuristicLab.Core; 27 27 using HeuristicLab.Data; 28 using HeuristicLab.Encodings.RealVectorEncoding;29 28 using HeuristicLab.Operators; 30 29 using HeuristicLab.Optimization; … … 78 77 get { return (IValueParameter<DoubleValue>)Parameters["PersonalBestAttraction"]; } 79 78 } 80 public IValueParameter<DoubleValue> Neighbor sBestAttractionParameter {81 get { return (IValueParameter<DoubleValue>)Parameters["Neighbor sBestAttraction"]; }79 public IValueParameter<DoubleValue> NeighborBestAttractionParameter { 80 get { return (IValueParameter<DoubleValue>)Parameters["NeighborBestAttraction"]; } 82 81 } 83 82 public IValueParameter<MultiAnalyzer> AnalyzerParameter { … … 99 98 get { return (OptionalConstrainedValueParameter<IDiscreteDoubleValueModifier>)Parameters["InertiaUpdater"]; } 100 99 } 100 public ConstrainedValueParameter<ISwarmUpdater> SwarmUpdaterParameter { 101 get { return (ConstrainedValueParameter<ISwarmUpdater>)Parameters["SwarmUpdater"]; } 102 103 } 101 104 #endregion 102 105 … … 113 116 [Storable] 114 117 private ParticleSwarmOptimizationMainLoop mainLoop; 115 116 [Storable]117 private CombinedOperator swarmUpdater;118 118 119 119 public ITopologyInitializer TopologyInitializer { … … 145 145 solutionsCreator = cloner.Clone(original.solutionsCreator); 146 146 mainLoop = cloner.Clone(original.mainLoop); 147 swarmUpdater = cloner.Clone(original.swarmUpdater);148 147 Initialize(); 149 148 } … … 157 156 Parameters.Add(new ValueParameter<DoubleValue>("Inertia", "Inertia weight on a particle's movement (omega).", new DoubleValue(-0.2))); 158 157 Parameters.Add(new ValueParameter<DoubleValue>("PersonalBestAttraction", "Weight for particle's pull towards its personal best soution (phi_p).", new DoubleValue(-0.01))); 159 Parameters.Add(new ValueParameter<DoubleValue>("Neighbor sBestAttraction", "Weight for pull towards the neighborhood best solution or global best solution in case of a totally connected topology (phi_g).", new DoubleValue(3.7)));158 Parameters.Add(new ValueParameter<DoubleValue>("NeighborBestAttraction", "Weight for pull towards the neighborhood best solution or global best solution in case of a totally connected topology (phi_g).", new DoubleValue(3.7))); 160 159 Parameters.Add(new ConstrainedValueParameter<IParticleCreator>("ParticleCreator", "Operator creates a new particle.")); 161 160 Parameters.Add(new ConstrainedValueParameter<IParticleUpdater>("ParticleUpdater", "Operator that updates a particle.")); … … 163 162 Parameters.Add(new OptionalConstrainedValueParameter<ITopologyUpdater>("TopologyUpdater", "Updates the neighborhood description vectors.")); 164 163 Parameters.Add(new OptionalConstrainedValueParameter<IDiscreteDoubleValueModifier>("InertiaUpdater", "Updates the omega parameter.")); 164 Parameters.Add(new ConstrainedValueParameter<ISwarmUpdater>("SwarmUpdater", "Encoding-specific parameter which is provided by the problem. May provide additional encoding-specific parameters, such as velocity bounds for real valued problems")); 165 165 166 166 RandomCreator randomCreator = new RandomCreator(); … … 168 168 solutionsCreator = new SolutionsCreator(); 169 169 Placeholder topologyInitializerPlaceholder = new Placeholder(); 170 ResultsCollector resultsCollector = new ResultsCollector();171 170 Placeholder analyzerPlaceholder = new Placeholder(); 172 swarmUpdater = new CombinedOperator();173 171 mainLoop = new ParticleSwarmOptimizationMainLoop(); 174 172 … … 183 181 184 182 solutionsCreator.NumberOfSolutionsParameter.ActualName = "SwarmSize"; 185 ParameterizeSolutionsCreator(); 186 solutionsCreator.Successor = topologyInitializerPlaceholder; 183 ParameterizeSolutionsCreator(); 184 solutionsCreator.Successor = topologyInitializerPlaceholder; 187 185 188 186 topologyInitializerPlaceholder.Name = "(TopologyInitializer)"; 189 187 topologyInitializerPlaceholder.OperatorParameter.ActualName = "TopologyInitializer"; 190 topologyInitializerPlaceholder.Successor = swarmUpdater; 191 192 swarmUpdater.Successor = resultsCollector; 193 194 resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Iterations", null, "CurrentIteration")); 195 //resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Current Inertia", null, "Inertia")); 196 //resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions")); 197 resultsCollector.ResultsParameter.ActualName = "Results"; 198 resultsCollector.Successor = mainLoop; 188 topologyInitializerPlaceholder.Successor = mainLoop; 199 189 200 190 mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name; 201 191 mainLoop.InertiaParameter.ActualName = InertiaParameter.Name; 202 192 mainLoop.MaxIterationsParameter.ActualName = MaxIterationsParameter.Name; 203 mainLoop.Neighbor sBestAttractionParameter.ActualName = NeighborsBestAttractionParameter.Name;193 mainLoop.NeighborBestAttractionParameter.ActualName = NeighborBestAttractionParameter.Name; 204 194 mainLoop.InertiaUpdaterParameter.ActualName = InertiaUpdaterParameter.Name; 205 195 mainLoop.ParticleUpdaterParameter.ActualName = ParticleUpdaterParameter.Name; 206 196 mainLoop.PersonalBestAttractionParameter.ActualName = PersonalBestAttractionParameter.Name; 207 197 mainLoop.RandomParameter.ActualName = randomCreator.RandomParameter.ActualName; 208 mainLoop.SwarmSizeParameter.ActualName = SwarmSizeParameter.Name; 209 mainLoop.TopologyUpdaterParameter.ActualName = TopologyUpdaterParameter.Name; 198 mainLoop.SwarmSizeParameter.ActualName = SwarmSizeParameter.Name; 199 mainLoop.TopologyUpdaterParameter.ActualName = TopologyUpdaterParameter.Name; 210 200 mainLoop.RandomParameter.ActualName = randomCreator.RandomParameter.ActualName; 211 201 mainLoop.ResultsParameter.ActualName = "Results"; 212 // mainLoop.EvaluatedMovesParameter.ActualName = "EvaluatedMoves";202 // mainLoop.EvaluatedMovesParameter.ActualName = "EvaluatedMoves"; 213 203 214 204 InitializeAnalyzers(); … … 216 206 InitializeParticleCreator(); 217 207 InitializeSwarmUpdater(); 218 ParameterizeSolutionsCreator(); 208 ParameterizeSolutionsCreator(); 219 209 UpdateAnalyzers(); 220 210 UpdateInertiaUpdater(); … … 222 212 UpdateTopologyInitializer(); 223 213 Initialize(); 224 ParameterizeMainLoop(); 214 ParameterizeMainLoop(); 225 215 } 226 216 … … 257 247 InitializeParticleCreator(); 258 248 InitializeSwarmUpdater(); 259 ParameterizeSolutionsCreator(); 249 ParameterizeSolutionsCreator(); 260 250 base.OnProblemChanged(); 261 251 } … … 290 280 IParticleCreator creator = ParticleCreatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldParticleCreator.GetType()); 291 281 if (creator != null) ParticleCreator = creator; 292 } 282 } 293 283 } 294 284 } … … 400 390 401 391 private void ParameterizeMainLoop() { 402 if (Problem != null) { 392 if (Problem != null) { 403 393 mainLoop.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name; 404 394 } … … 408 398 if (Problem != null) { 409 399 ISwarmUpdater updater = Problem.Operators.OfType<ISwarmUpdater>().FirstOrDefault(); 410 swarmUpdater.OperatorGraph.InitialOperator = updater; 400 SwarmUpdaterParameter.ValidValues.Clear(); 401 SwarmUpdaterParameter.ValidValues.Add(updater); 402 SwarmUpdaterParameter.Value = updater; 411 403 } 412 404 } -
trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleSwarmOptimizationMainLoop.cs
r5566 r5568 20 20 #endregion 21 21 22 using System;23 using System.Collections.Generic;24 using System.Linq;25 using System.Text;26 using HeuristicLab.Operators;27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;28 22 using HeuristicLab.Common; 29 23 using HeuristicLab.Core; 24 using HeuristicLab.Data; 25 using HeuristicLab.Operators; 26 using HeuristicLab.Optimization; 27 using HeuristicLab.Optimization.Operators; 30 28 using HeuristicLab.Parameters; 31 using HeuristicLab.Data; 32 using HeuristicLab.Analysis; 33 using HeuristicLab.Optimization; 34 using HeuristicLab.Random; 35 using HeuristicLab.Optimization.Operators; 36 using HeuristicLab.Encodings.RealVectorEncoding; 29 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 37 30 38 31 namespace HeuristicLab.Algorithms.ParticleSwarmOptimization { … … 59 52 get { return (IValueLookupParameter<DoubleValue>)Parameters["PersonalBestAttraction"]; } 60 53 } 61 public IValueLookupParameter<DoubleValue> Neighbor sBestAttractionParameter {62 get { return (IValueLookupParameter<DoubleValue>)Parameters["Neighbor sBestAttraction"]; }54 public IValueLookupParameter<DoubleValue> NeighborBestAttractionParameter { 55 get { return (IValueLookupParameter<DoubleValue>)Parameters["NeighborBestAttraction"]; } 63 56 } 64 57 public IValueLookupParameter<DoubleMatrix> VelocityBoundsParameter { 65 58 get { return (IValueLookupParameter<DoubleMatrix>)Parameters["VelocityBounds"]; } 66 } 59 } 67 60 public IValueLookupParameter<IOperator> ParticleUpdaterParameter { 68 61 get { return (IValueLookupParameter<IOperator>)Parameters["ParticleUpdater"]; } … … 74 67 get { return (IValueLookupParameter<IOperator>)Parameters["InertiaUpdater"]; } 75 68 } 76 public IValueLookupParameter< VariableCollection> ResultsParameter {77 get { return (IValueLookupParameter< VariableCollection>)Parameters["Results"]; }69 public IValueLookupParameter<ResultCollection> ResultsParameter { 70 get { return (IValueLookupParameter<ResultCollection>)Parameters["Results"]; } 78 71 } 79 72 public IValueLookupParameter<IOperator> EvaluatorParameter { 80 73 get { return (IValueLookupParameter<IOperator>)Parameters["Evaluator"]; } 81 74 } 75 public ValueLookupParameter<ISwarmUpdater> SwarmUpdaterParameter { 76 get { return (ValueLookupParameter<ISwarmUpdater>)Parameters["SwarmUpdater"]; } 77 } 82 78 #endregion 83 79 84 80 public ParticleSwarmOptimizationMainLoop() 85 81 : base() { … … 102 98 Parameters.Add(new ValueLookupParameter<IntValue>("SwarmSize", "Size of the particle swarm.", new IntValue(10))); 103 99 Parameters.Add(new ValueLookupParameter<IntValue>("MaxIterations", "Maximal number of iterations.", new IntValue(1000))); 104 100 105 101 Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each generation.")); 106 102 107 103 Parameters.Add(new ValueLookupParameter<DoubleValue>("Inertia", "Inertia weight on a particle's movement (omega).")); 108 104 Parameters.Add(new ValueLookupParameter<DoubleValue>("PersonalBestAttraction", "Weight for particle's pull towards its personal best soution (phi_p).")); 109 Parameters.Add(new ValueLookupParameter<DoubleValue>("Neighbor sBestAttraction", "Weight for pull towards the neighborhood best solution or global best solution in case of a totally connected topology (phi_g)."));110 105 Parameters.Add(new ValueLookupParameter<DoubleValue>("NeighborBestAttraction", "Weight for pull towards the neighborhood best solution or global best solution in case of a totally connected topology (phi_g).")); 106 111 107 Parameters.Add(new ValueLookupParameter<IOperator>("ParticleUpdater", "Operator that calculates new position and velocity of a particle")); 112 108 Parameters.Add(new ValueLookupParameter<IOperator>("TopologyUpdater", "Updates the neighborhood description vectors")); … … 114 110 Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "Evaluates a particle solution.")); 115 111 116 Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored.")); 112 Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The variable collection where results should be stored.")); 113 114 Parameters.Add(new ValueLookupParameter<ISwarmUpdater>("SwarmUpdater", "The encoding-specific swarm updater.")); 117 115 #endregion 118 116 119 117 #region Create operators 118 ResultsCollector resultsCollector = new ResultsCollector(); 119 Placeholder swarmUpdaterPlaceholer1 = new Placeholder(); 120 120 Placeholder evaluatorPlaceholder = new Placeholder(); 121 121 Placeholder analyzerPlaceholder = new Placeholder(); … … 135 135 136 136 #region Create operator graph 137 OperatorGraph.InitialOperator = analyzerPlaceholder; 137 OperatorGraph.InitialOperator = resultsCollector; 138 resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Iterations", null, "CurrentIteration")); 139 //resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Current Inertia", null, "Inertia")); 140 //resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Solutions", null, "EvaluatedSolutions")); 141 resultsCollector.ResultsParameter.ActualName = "Results"; 142 resultsCollector.Successor = swarmUpdaterPlaceholer1; 143 144 swarmUpdaterPlaceholer1.Name = "(Swarm Updater)"; 145 swarmUpdaterPlaceholer1.OperatorParameter.ActualName = SwarmUpdaterParameter.ActualName; 146 swarmUpdaterPlaceholer1.Successor = analyzerPlaceholder; 138 147 139 148 analyzerPlaceholder.Name = "(Analyzer)"; 140 analyzerPlaceholder.OperatorParameter.ActualName = AnalyzerParameter.Name; 149 analyzerPlaceholder.OperatorParameter.ActualName = AnalyzerParameter.Name; 141 150 analyzerPlaceholder.Successor = uniformSubScopeProcessor; 142 151 … … 145 154 146 155 particleUpdaterPlaceholder.Name = "(ParticleUpdater)"; 147 particleUpdaterPlaceholder.OperatorParameter.ActualName = ParticleUpdaterParameter.Name; 156 particleUpdaterPlaceholder.OperatorParameter.ActualName = ParticleUpdaterParameter.Name; 148 157 149 158 evaluationProcessor.Parallel = new BoolValue(true); … … 152 161 153 162 evaluatorPlaceholder.Name = "(Evaluator)"; 154 evaluatorPlaceholder.OperatorParameter.ActualName = EvaluatorParameter.Name; 163 evaluatorPlaceholder.OperatorParameter.ActualName = EvaluatorParameter.Name; 155 164 156 165 topologyUpdaterPlaceholder.Name = "(TopologyUpdater)"; 157 topologyUpdaterPlaceholder.OperatorParameter.ActualName = TopologyUpdaterParameter.Name; 166 topologyUpdaterPlaceholder.OperatorParameter.ActualName = TopologyUpdaterParameter.Name; 158 167 topologyUpdaterPlaceholder.Successor = swarmUpdater; 159 168 160 169 swarmUpdater.Name = "Swarm Updater"; 161 swarmUpdater.OperatorParameter.ActualName = "SwarmUpdater"; 162 swarmUpdater.Successor = currentIterationCounter; 170 swarmUpdater.OperatorParameter.ActualName = SwarmUpdaterParameter.ActualName; 171 swarmUpdater.Successor = inertiaUpdaterPlaceholder; 172 173 inertiaUpdaterPlaceholder.Name = "(Inertia Updater)"; 174 inertiaUpdaterPlaceholder.OperatorParameter.ActualName = InertiaUpdaterParameter.ActualName; 175 inertiaUpdaterPlaceholder.Successor = currentIterationCounter; 163 176 164 177 currentIterationCounter.Name = "CurrentIteration++"; 165 178 currentIterationCounter.ValueParameter.ActualName = "CurrentIteration"; 166 currentIterationCounter.Successor = inertiaUpdaterPlaceholder; 167 168 inertiaUpdaterPlaceholder.Name = "(Inertia Updater)"; 169 inertiaUpdaterPlaceholder.OperatorParameter.ActualName = InertiaUpdaterParameter.ActualName; 170 inertiaUpdaterPlaceholder.Successor = currentIterationComparator; 179 currentIterationCounter.Successor = currentIterationComparator; 171 180 172 181 currentIterationComparator.LeftSideParameter.ActualName = "CurrentIteration"; -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorParticleUpdater.cs
r5560 r5568 31 31 ILookupParameter<DoubleMatrix> BoundsParameter { get; } 32 32 ILookupParameter<RealVector> PersonalBestParameter { get; } 33 ILookupParameter<RealVector> Neighbor sBestParameter { get; }33 ILookupParameter<RealVector> NeighborBestParameter { get; } 34 34 } 35 35 } -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorSwarmUpdater.cs
r5561 r5568 25 25 namespace HeuristicLab.Encodings.RealVectorEncoding { 26 26 public interface IRealVectorSwarmUpdater : ISwarmUpdater, IRealVectorOperator { 27 IScopeTreeLookupParameter<RealVector> Neighbor sBestParameter { get; }27 IScopeTreeLookupParameter<RealVector> NeighborBestParameter { get; } 28 28 IScopeTreeLookupParameter<RealVector> PersonalBestParameter { get; } 29 29 IScopeTreeLookupParameter<RealVector> RealVectorParameter { get; } -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorNeighborhoodParticleUpdater.cs
r5560 r5568 22 22 using HeuristicLab.Common; 23 23 using HeuristicLab.Core; 24 using HeuristicLab. Encodings.RealVectorEncoding;24 using HeuristicLab.Optimization; 25 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 26 using HeuristicLab.Optimization;27 26 28 27 namespace HeuristicLab.Encodings.RealVectorEncoding { … … 47 46 double omega = Inertia.Value; 48 47 double phi_p = PersonalBestAttraction.Value; 49 double phi_g = Neighbor sBestAttraction.Value;48 double phi_g = NeighborBestAttraction.Value; 50 49 for (int i = 0; i < velocity.Length; i++) { 51 50 velocity[i] = 52 51 Velocity[i] * omega + 53 52 (PersonalBest[i] - RealVector[i]) * phi_p * r_p + 54 ( NeighborsBest[i] - RealVector[i]) * phi_g * r_g;53 (BestPoint[i] - RealVector[i]) * phi_g * r_g; 55 54 } 56 55 BoundsChecker.Apply(velocity, VelocityBounds); -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorParticleUpdater.cs
r5566 r5568 45 45 get { return (ILookupParameter<RealVector>)Parameters["PersonalBest"]; } 46 46 } 47 public ILookupParameter<RealVector> NeighborsBestParameter { 48 get { return (ILookupParameter<RealVector>)Parameters["NeighborsBest"]; } 47 public ILookupParameter<RealVector> NeighborBestParameter { 48 get { return (ILookupParameter<RealVector>)Parameters["NeighborBest"]; } 49 } 50 public LookupParameter<RealVector> BestPointParameter { 51 get { return (LookupParameter<RealVector>)Parameters["BestPoint"]; } 49 52 } 50 53 public ILookupParameter<RealVector> RealVectorParameter { … … 63 66 get { return (ILookupParameter<DoubleValue>)Parameters["PersonalBestAttraction"]; } 64 67 } 65 public ILookupParameter<DoubleValue> Neighbor sBestAttractionParameter {66 get { return (ILookupParameter<DoubleValue>)Parameters["Neighbor sBestAttraction"]; }68 public ILookupParameter<DoubleValue> NeighborBestAttractionParameter { 69 get { return (ILookupParameter<DoubleValue>)Parameters["NeighborBestAttraction"]; } 67 70 } 68 71 #endregion … … 79 82 get { return PersonalBestParameter.ActualValue; } 80 83 } 84 protected RealVector BestPoint { 85 get { return BestPointParameter.ActualValue; } 86 } 81 87 protected RealVector RealVector { 82 88 get { return RealVectorParameter.ActualValue; } 83 89 set { RealVectorParameter.ActualValue = value; } 84 90 } 85 protected RealVector Neighbor sBest {86 get { return Neighbor sBestParameter.ActualValue; }91 protected RealVector NeighborBest { 92 get { return NeighborBestParameter.ActualValue; } 87 93 } 88 94 protected DoubleMatrix Bounds { … … 98 104 get { return PersonalBestAttractionParameter.ActualValue; } 99 105 } 100 protected DoubleValue Neighbor sBestAttraction {101 get { return Neighbor sBestAttractionParameter.ActualValue; }106 protected DoubleValue NeighborBestAttraction { 107 get { return NeighborBestAttractionParameter.ActualValue; } 102 108 } 103 109 #endregion … … 108 114 protected RealVectorParticleUpdater(bool deserializing) : base(deserializing) { } 109 115 protected RealVectorParticleUpdater(RealVectorParticleUpdater original, Cloner cloner) : base(original, cloner) { } 110 116 111 117 public RealVectorParticleUpdater() 112 118 : base() { … … 116 122 Parameters.Add(new LookupParameter<RealVector>("PersonalBest", "Particle's personal best solution.")); 117 123 Parameters.Add(new LookupParameter<RealVector>("BestPoint", "Global best position.")); 118 Parameters.Add(new LookupParameter<RealVector>("Neighbor sBest", "Best neighboring solution."));124 Parameters.Add(new LookupParameter<RealVector>("NeighborBest", "Best neighboring solution.")); 119 125 Parameters.Add(new LookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds for each dimension of the position vector for the current problem.")); 120 126 Parameters.Add(new LookupParameter<DoubleMatrix>("VelocityBounds", "Upper and lower bounds for the particle's velocity vector.")); 121 127 Parameters.Add(new LookupParameter<DoubleValue>("Inertia", "The weight for the particle's velocity vector.")); 122 128 Parameters.Add(new LookupParameter<DoubleValue>("PersonalBestAttraction", "The weight for the particle's personal best position.")); 123 Parameters.Add(new LookupParameter<DoubleValue>("Neighbor sBestAttraction", "The weight for the global best position."));129 Parameters.Add(new LookupParameter<DoubleValue>("NeighborBestAttraction", "The weight for the global best position.")); 124 130 } 125 131 -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorSwarmUpdater.cs
r5566 r5568 25 25 using HeuristicLab.Data; 26 26 using HeuristicLab.Operators; 27 using HeuristicLab.Optimization; 27 28 using HeuristicLab.Parameters; 28 29 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; … … 43 44 get { return (IScopeTreeLookupParameter<DoubleValue>)Parameters["PersonalBestQuality"]; } 44 45 } 45 public IScopeTreeLookupParameter<DoubleValue> Neighbor sBestQualityParameter {46 get { return (IScopeTreeLookupParameter<DoubleValue>)Parameters["Neighbor sBestQuality"]; }46 public IScopeTreeLookupParameter<DoubleValue> NeighborBestQualityParameter { 47 get { return (IScopeTreeLookupParameter<DoubleValue>)Parameters["NeighborBestQuality"]; } 47 48 } 48 49 public IScopeTreeLookupParameter<RealVector> RealVectorParameter { … … 52 53 get { return (IScopeTreeLookupParameter<RealVector>)Parameters["PersonalBest"]; } 53 54 } 54 public IScopeTreeLookupParameter<RealVector> Neighbor sBestParameter {55 get { return (IScopeTreeLookupParameter<RealVector>)Parameters["Neighbor sBest"]; }56 } 57 public I ValueLookupParameter<BoolValue> MaximizationParameter {58 get { return (I ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }55 public IScopeTreeLookupParameter<RealVector> NeighborBestParameter { 56 get { return (IScopeTreeLookupParameter<RealVector>)Parameters["NeighborBest"]; } 57 } 58 public ILookupParameter<BoolValue> MaximizationParameter { 59 get { return (ILookupParameter<BoolValue>)Parameters["Maximization"]; } 59 60 } 60 61 public ILookupParameter<DoubleValue> BestQualityParameter { … … 66 67 public IScopeTreeLookupParameter<IntArray> NeighborsParameter { 67 68 get { return (IScopeTreeLookupParameter<IntArray>)Parameters["Neighbors"]; } 69 } 70 public ValueLookupParameter<IDiscreteDoubleMatrixModifier> VelocityBoundsUpdaterParameter { 71 get { return (ValueLookupParameter<IDiscreteDoubleMatrixModifier>)Parameters["VelocityBoundsUpdater"]; } 72 } 73 public LookupParameter<DoubleMatrix> VelocityBoundsParameter { 74 get { return (LookupParameter<DoubleMatrix>)Parameters["VelocityBounds"]; } 68 75 } 69 76 #endregion … … 82 89 private ItemArray<DoubleValue> PersonalBestQuality { 83 90 get { return PersonalBestQualityParameter.ActualValue; } 84 } 85 private ItemArray<DoubleValue> NeighborsBestQuality { 86 get { return NeighborsBestQualityParameter.ActualValue; } 91 set { PersonalBestQualityParameter.ActualValue = value; } 92 } 93 private ItemArray<DoubleValue> NeighborBestQuality { 94 get { return NeighborBestQualityParameter.ActualValue; } 95 set { NeighborBestQualityParameter.ActualValue = value; } 87 96 } 88 97 private ItemArray<RealVector> RealVector { … … 93 102 set { PersonalBestParameter.ActualValue = value; } 94 103 } 95 private ItemArray<RealVector> Neighbor sBest {96 get { return Neighbor sBestParameter.ActualValue; }97 set { Neighbor sBestParameter.ActualValue = value; }104 private ItemArray<RealVector> NeighborBest { 105 get { return NeighborBestParameter.ActualValue; } 106 set { NeighborBestParameter.ActualValue = value; } 98 107 } 99 108 private bool Maximization { … … 102 111 private ItemArray<IntArray> Neighbors { 103 112 get { return NeighborsParameter.ActualValue; } 113 } 114 private IDiscreteDoubleMatrixModifier VelocityBoundsUpdater { 115 get { return VelocityBoundsUpdaterParameter.ActualValue; } 116 } 117 private DoubleMatrix VelocityBounds { 118 get { return VelocityBoundsParameter.ActualValue; } 119 set { VelocityBoundsParameter.ActualValue = value; } 104 120 } 105 121 #endregion … … 116 132 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "Particle's quality")); 117 133 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("PersonalBestQuality", "Particle's personal best quality")); 118 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Neighbor sBestQuality", "Global best particle quality"));134 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("NeighborBestQuality", "Global best particle quality")); 119 135 Parameters.Add(new ScopeTreeLookupParameter<RealVector>("RealVector", "Particle's position")); 120 136 Parameters.Add(new ScopeTreeLookupParameter<RealVector>("PersonalBest", "Particle's personal best position")); 121 Parameters.Add(new ScopeTreeLookupParameter<RealVector>("Neighbor sBest", "Neighborhood (or global in case of totally connected neighborhood) best particle position"));137 Parameters.Add(new ScopeTreeLookupParameter<RealVector>("NeighborBest", "Neighborhood (or global in case of totally connected neighborhood) best particle position")); 122 138 Parameters.Add(new ScopeTreeLookupParameter<IntArray>("Neighbors", "The list of neighbors for each particle.")); 123 Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false.")); 139 Parameters.Add(new LookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false.")); 140 Parameters.Add(new ValueLookupParameter<IDiscreteDoubleMatrixModifier>("VelocityBoundsUpdater", "Modifies the velocity bounds in the course of optimization.")); 141 Parameters.Add(new LookupParameter<DoubleMatrix>("VelocityBounds", "Maximum velocity for each dimension.")); 124 142 } 125 143 … … 132 150 public override IOperation Apply() { 133 151 InitializeBestPoint(); 152 UpdateNeighbors(); 134 153 UpdateSwarm(); 135 UpdateNeighbors(); 136 UpdateVelocityBounds(); 137 return base.Apply(); 154 if (VelocityBoundsUpdater != null) { 155 var ops = new OperationCollection(); 156 ops.Add(ExecutionContext.CreateChildOperation(VelocityBoundsUpdater)); 157 ops.Add(ExecutionContext.CreateOperation(Successor)); 158 return ops; 159 } else { 160 return base.Apply(); 161 } 138 162 } 139 163 … … 148 172 private void UpdateNeighbors() { 149 173 if (Neighbors != null & Neighbors.Length > 0) { 150 if (this.Neighbor sBest == null || NeighborsBest.Length != Neighbors.Length)151 Neighbor sBest = new ItemArray<RealVector>(Neighbors.Length);174 if (this.NeighborBest == null || NeighborBest.Length != Neighbors.Length) 175 NeighborBest = new ItemArray<RealVector>(Neighbors.Length); 152 176 for (int n = 0; n < Neighbors.Length; n++) { 153 177 var pairs = Quality.Zip(RealVector, (q, p) => new { Quality = q, Point = p }) 154 178 .Where((p, i) => i == n || Neighbors[n].Contains(i)); 155 Neighbor sBest[n] = Maximization ?179 NeighborBest[n] = Maximization ? 156 180 pairs.OrderByDescending(p => p.Quality.Value).First().Point : 157 181 pairs.OrderBy(p => p.Quality.Value).First().Point; 158 182 } 159 NeighborsBestParameter.ActualValue = NeighborsBest; 160 } 161 } 162 163 private void UpdateVelocityBounds() { 164 // ToDo: Add code 183 NeighborBestParameter.ActualValue = NeighborBest; 184 } 165 185 } 166 186 167 187 private void UpdateSwarm() { 168 188 if (PersonalBestQuality.Length == 0) { 169 ItemArray<DoubleValue> personalBestQualities = new ItemArray<DoubleValue>(RealVector.Length); 170 for (int i = 0; i < RealVector.Length; i++) { 171 if (Maximization) { 172 personalBestQualities[i] = new DoubleValue(double.MinValue); 173 } else { 174 personalBestQualities[i] = new DoubleValue(double.MaxValue); 175 } 176 } 177 PersonalBestQualityParameter.ActualValue = personalBestQualities; 178 } 179 if (NeighborsBestQuality.Length == 0) { 180 if (NeighborsParameter != null && Neighbors.Length > 0) { 181 ItemArray<DoubleValue> neighborsBestQualities = new ItemArray<DoubleValue>(RealVector.Length); 182 for (int i = 0; i < RealVector.Length; i++) { 183 if (Maximization) { 184 neighborsBestQualities[i] = new DoubleValue(double.MinValue); 185 } else { 186 neighborsBestQualities[i] = new DoubleValue(double.MaxValue); 187 } 188 } 189 NeighborsBestQualityParameter.ActualValue = neighborsBestQualities; 190 } 191 } 192 ItemArray<RealVector> neighborsBest = new ItemArray<RealVector>(RealVector.Length); 189 PersonalBestQuality = (ItemArray<DoubleValue>)Quality.Clone(); 190 if (VelocityBounds == null) 191 VelocityBounds = new DoubleMatrix(new double[,] { { -1, 1 } }); 192 } 193 193 for (int i = 0; i < RealVector.Length; i++) { 194 194 if (Maximization && Quality[i].Value > PersonalBestQuality[i].Value || … … 196 196 PersonalBestQuality[i].Value = Quality[i].Value; 197 197 PersonalBest[i] = RealVector[i]; 198 if (Maximization && PersonalBestQuality[i].Value > NeighborsBestQuality[i].Value || 199 !Maximization && PersonalBestQuality[i].Value < NeighborsBestQuality[i].Value) { 200 NeighborsBestQuality[i].Value = PersonalBestQuality[i].Value; 201 neighborsBest[i] = PersonalBest[i]; 198 } 199 } 200 if (Neighbors.Length > 0) { 201 var neighborBestQuality = NeighborBestQuality; 202 var neighborBest = NeighborBest; 203 if (NeighborBestQuality.Length == 0) { 204 neighborBestQuality = (ItemArray<DoubleValue>)Quality.Clone(); 205 neighborBest = (ItemArray<RealVector>)RealVector.Clone(); 206 } 207 for (int i = 0; i < RealVector.Length; i++) { 208 if (Maximization && PersonalBestQuality[i].Value > NeighborBestQuality[i].Value || 209 !Maximization && PersonalBestQuality[i].Value < NeighborBestQuality[i].Value) { 210 neighborBestQuality[i].Value = PersonalBestQuality[i].Value; 211 neighborBest[i] = PersonalBest[i]; 202 212 } 203 213 } 204 } 205 if (NeighborsParameter != null && Neighbors.Length > 0) { 206 NeighborsBestParameter.ActualValue = neighborsBest; 207 } 208 } 209 214 NeighborBestQuality = neighborBestQuality; 215 NeighborBest = neighborBest; 216 } 217 } 210 218 } 211 219 } -
trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorTotallyConnectedParticleUpdater.cs
r5560 r5568 22 22 using HeuristicLab.Common; 23 23 using HeuristicLab.Core; 24 using HeuristicLab.Optimization; 24 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 using HeuristicLab.Optimization;26 26 27 27 namespace HeuristicLab.Encodings.RealVectorEncoding { … … 51 51 double omega = Inertia.Value; 52 52 double phi_p = PersonalBestAttraction.Value; 53 double phi_g = Neighbor sBestAttraction.Value;53 double phi_g = NeighborBestAttraction.Value; 54 54 for (int i = 0; i < velocity.Length; i++) { 55 55 velocity[i] = 56 56 Velocity[i] * omega + 57 57 (PersonalBest[i] - RealVector[i]) * phi_p * r_p + 58 ( NeighborsBest[i] - RealVector[i]) * phi_g * r_g;58 (BestPoint[i] - RealVector[i]) * phi_g * r_g; 59 59 } 60 60 BoundsChecker.Apply(velocity, VelocityBounds); -
trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IDiscreteDoubleMatrixModifier.cs
r5560 r5568 25 25 26 26 namespace HeuristicLab.Optimization { 27 public interface IDiscreteDoubleMatrixModifier : I Item{27 public interface IDiscreteDoubleMatrixModifier : IOperator { 28 28 ILookupParameter<DoubleMatrix> ValueParameter { get; } 29 29 ILookupParameter<DoubleValue> ScaleParameter { get; } -
trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IParticleUpdater.cs
r5560 r5568 29 29 public interface IParticleUpdater : IOperator { 30 30 ILookupParameter<DoubleValue> InertiaParameter { get; } 31 ILookupParameter<DoubleValue> Neighbor sBestAttractionParameter { get; }31 ILookupParameter<DoubleValue> NeighborBestAttractionParameter { get; } 32 32 ILookupParameter<DoubleValue> PersonalBestAttractionParameter { get; } 33 33 ILookupParameter<IRandom> RandomParameter { get; } -
trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISwarmUpdater.cs
r5561 r5568 26 26 public interface ISwarmUpdater : IOperator { 27 27 IScopeTreeLookupParameter<DoubleValue> QualityParameter { get; } 28 IScopeTreeLookupParameter<DoubleValue> Neighbor sBestQualityParameter { get; }28 IScopeTreeLookupParameter<DoubleValue> NeighborBestQualityParameter { get; } 29 29 IScopeTreeLookupParameter<DoubleValue> PersonalBestQualityParameter { get; } 30 I ValueLookupParameter<BoolValue> MaximizationParameter { get; }30 ILookupParameter<BoolValue> MaximizationParameter { get; } 31 31 } 32 32 }
Note: See TracChangeset
for help on using the changeset viewer.