Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/28/11 15:08:14 (13 years ago)
Author:
mkofler
Message:

#852: PSO code refactoring. Worked on swarm updater and particle updater.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorSwarmUpdater.cs

    r5561 r5566  
    132132    public override IOperation Apply() {
    133133      InitializeBestPoint();
     134      UpdateSwarm();
    134135      UpdateNeighbors();
    135136      UpdateVelocityBounds();
    136       UpdateSwarm();
    137137      return base.Apply();
    138138    }
     
    140140    private void InitializeBestPoint() {
    141141      if (BestQuality == null)
    142         BestQualityParameter.ActualValue = new DoubleValue(); 
     142        BestQualityParameter.ActualValue = new DoubleValue();
    143143      BestQuality.Value = Maximization ? Quality.Max(v => v.Value) : Quality.Min(v => v.Value);
    144144      int bestIndex = Quality.FindIndex(v => v.Value == BestQuality.Value);
     
    167167    private void UpdateSwarm() {
    168168      if (PersonalBestQuality.Length == 0) {
    169         PersonalBestQualityParameter.ActualValue = new ItemArray<DoubleValue>(RealVector.Length);
     169        ItemArray<DoubleValue> personalBestQualities = new ItemArray<DoubleValue>(RealVector.Length);
    170170        for (int i = 0; i < RealVector.Length; i++) {
    171171          if (Maximization) {
    172             PersonalBestQuality[i] = new DoubleValue();
     172            personalBestQualities[i] = new DoubleValue(double.MinValue);
    173173          } else {
    174             PersonalBestQuality[i] = new DoubleValue(double.MaxValue);
     174            personalBestQualities[i] = new DoubleValue(double.MaxValue);
    175175          }
    176176        }
     177        PersonalBestQualityParameter.ActualValue = personalBestQualities;
    177178      }
    178179      if (NeighborsBestQuality.Length == 0) {
    179         NeighborsBestQualityParameter.ActualValue = new ItemArray<DoubleValue>(RealVector.Length);
    180         for (int i = 0; i < RealVector.Length; i++) {
    181           if (Maximization) {
    182             NeighborsBestQuality[i] = new DoubleValue();
    183           } else {
    184             NeighborsBestQuality[i] = new DoubleValue(double.MaxValue);
     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            }
    185188          }
    186         }
    187       }
    188       if (NeighborsBest.Length == 0) {
    189         NeighborsBestParameter.ActualValue = new ItemArray<RealVector>(RealVector.Length);
    190       }
     189          NeighborsBestQualityParameter.ActualValue = neighborsBestQualities;
     190        }
     191      }
     192      ItemArray<RealVector> neighborsBest = new ItemArray<RealVector>(RealVector.Length);
    191193      for (int i = 0; i < RealVector.Length; i++) {
    192194        if (Maximization && Quality[i].Value > PersonalBestQuality[i].Value ||
     
    197199             !Maximization && PersonalBestQuality[i].Value < NeighborsBestQuality[i].Value) {
    198200            NeighborsBestQuality[i].Value = PersonalBestQuality[i].Value;
    199             NeighborsBest[i] = PersonalBest[i];
     201            neighborsBest[i] = PersonalBest[i];
    200202          }
    201203        }
     204      }
     205      if (NeighborsParameter != null && Neighbors.Length > 0) {
     206        NeighborsBestParameter.ActualValue = neighborsBest;
    202207      }
    203208    }
Note: See TracChangeset for help on using the changeset viewer.