Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/ParticleUpdater.cs @ 3682

Last change on this file since 3682 was 3682, checked in by mkofler, 14 years ago

Worked on #852 (PSO)

File size: 2.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using HeuristicLab.Operators;
6using HeuristicLab.Parameters;
7using HeuristicLab.Encodings.RealVectorEncoding;
8using HeuristicLab.Data;
9using HeuristicLab.Core;
10
11namespace HeuristicLab.Algorithms.ParticleSwarmOptimization {
12  public class ParticleUpdater : SingleSuccessorOperator { // ParticleUpdater
13    #region Parameter properties
14
15    public ILookupParameter<RealVector> VelocityParameter {
16      get { return (ILookupParameter<RealVector>)Parameters["Velocity"]; }
17    }
18
19    public IParameter RandomParameter {
20      get { return (IParameter)Parameters["Random"]; }
21    }
22
23    public ILookupParameter<RealVector> CurrentPositionParameter {
24      get { return (ILookupParameter<RealVector>)Parameters["CurrentPosition"]; }
25    }
26
27    public ILookupParameter<RealVector> BestLocalParameter {
28      get { return (ILookupParameter<RealVector>)Parameters["BestLocal"]; }
29    }
30
31    public ILookupParameter<RealVector> BestGlobalParameter {
32      get { return (ILookupParameter<RealVector>)Parameters["BestGlobal"]; }
33    }
34    #endregion
35
36    public ParticleUpdater()
37      : base() {
38      Parameters.Add(new LookupParameter<IRandom>("Random", "Random number generator (to generate alpha an beta)."));
39      Parameters.Add(new LookupParameter<RealVector>("Velocity", "The velocity vector to update."));
40      Parameters.Add(new LookupParameter<RealVector>("CurrentPosition", "Current position"));
41      Parameters.Add(new LookupParameter<RealVector>("BestLocal", "Best local position"));
42      Parameters.Add(new LookupParameter<RealVector>("BestGlobal", "Best global position"));
43    }
44
45    public override IOperation Apply() {
46      double alpha = ((IRandom)RandomParameter.ActualValue).NextDouble();
47      double beta = ((IRandom)RandomParameter.ActualValue).NextDouble();
48      RealVector velocity = (RealVector) VelocityParameter.ActualValue;
49      for (int i = 0; i < velocity.Length; i++) {
50        velocity[i] = velocity[i] + alpha * (BestLocalParameter.ActualValue[i] - CurrentPositionParameter.ActualValue[i]) + beta * (BestGlobalParameter.ActualValue[i] - CurrentPositionParameter.ActualValue[i]);
51      }
52      VelocityParameter.ActualValue = velocity;
53      for (int i = 0; i < CurrentPositionParameter.ActualValue.Length; i++) {
54        CurrentPositionParameter.ActualValue[i] = CurrentPositionParameter.ActualValue[i] + VelocityParameter.ActualValue[i];
55      }
56      return base.Apply();
57    }
58
59    public override bool CanChangeName {
60      get { return false; }
61    }
62  }
63}
Note: See TracBrowser for help on using the repository browser.