Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/05/17 17:50:03 (7 years ago)
Author:
abeham
Message:

#2701:

  • Added BinaryVectorEqualityComparer (identical to the one in the P3 plugin) to binaryvector plugin
  • Added delinking for absolute coded permutations
  • Some tweaks
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/MemPRContext.cs

    r14544 r14550  
    114114
    115115    [Storable]
     116    private IValueParameter<DoubleValue> localOptimaLevel;
     117    public double LocalOptimaLevel {
     118      get { return localOptimaLevel.Value.Value; }
     119      set { localOptimaLevel.Value.Value = value; }
     120    }
     121
     122    [Storable]
    116123    private IValueParameter<IntValue> byBreeding;
    117124    public int ByBreeding {
     
    257264      bestSolution = cloner.Clone(original.bestSolution);
    258265      localSearchEvaluations = cloner.Clone(original.localSearchEvaluations);
     266      localOptimaLevel = cloner.Clone(original.localOptimaLevel);
    259267      byBreeding = cloner.Clone(original.byBreeding);
    260268      byRelinking = cloner.Clone(original.byRelinking);
     
    290298      Parameters.Add(bestSolution = new ValueParameter<TSolution>("BestSolution"));
    291299      Parameters.Add(localSearchEvaluations = new ValueParameter<IntValue>("LocalSearchEvaluations", new IntValue(0)));
     300      Parameters.Add(localOptimaLevel = new ValueParameter<DoubleValue>("LocalOptimaLevel", new DoubleValue(0)));
    292301      Parameters.Add(byBreeding = new ValueParameter<IntValue>("ByBreeding", new IntValue(0)));
    293302      Parameters.Add(byRelinking = new ValueParameter<IntValue>("ByRelinking", new IntValue(0)));
     
    495504    }
    496505
    497     protected double ProbabilityAccept(ISingleObjectiveSolutionScope<TSolution> scope, IList<Tuple<double, double>> data) {
    498       if (double.IsNaN(scope.Fitness)) throw new ArgumentException("solution not evaluated or quality unknown", "scope");
    499       return ProbabilityAccept2d(scope.Fitness, data);
    500     }
    501 
    502506    private double ProbabilityAccept2dModel(double a, IConfidenceRegressionModel model) {
    503507      var ds = new Dataset(new[] { "in", "out" }, new[] { new List<double> { a }, new List<double> { double.NaN } });
     
    509513      return Problem.Maximization ? 1.0 - Phi(z) /* P(X >= z) */ : Phi(z); // P(X <= z)
    510514    }
    511     protected double ProbabilityAccept2d(double startingFitness, IList<Tuple<double, double>> data) {
    512       if (data.Count < 10) return 1.0;
    513       var samples = 0;
    514       double meanStart = 0, meanStartOld = 0, meanEnd = 0, meanEndOld = 0;
    515       double varStart = 0, varStartOld = 0, varEnd = 0, varEndOld = 0;
    516       for (var i = 0; i < data.Count; i++) {
    517         samples++;
    518         var x = data[i].Item1;
    519         var y = data[i].Item2;
    520 
    521         if (samples == 1) {
    522           meanStartOld = x;
    523           meanEndOld = y;
    524         } else {
    525           meanStart = meanStartOld + (x - meanStartOld) / samples;
    526           meanEnd = meanEndOld + (y - meanEndOld) / samples;
    527           varStart = varStartOld + (x - meanStartOld) * (x - meanStart) / (samples - 1);
    528           varEnd = varEndOld + (y - meanEndOld) * (y - meanEnd) / (samples - 1);
    529 
    530           meanStartOld = meanStart;
    531           meanEndOld = meanEnd;
    532           varStartOld = varStart;
    533           varEndOld = varEnd;
    534         }
    535       }
    536       var cov = data.Select((v, i) => new { Index = i, Value = v }).Select(x => x.Value).Sum(x => (x.Item1 - meanStart) * (x.Item2 - meanEnd)) / data.Count;
    537 
    538       var biasedMean = meanEnd + cov / varStart * (startingFitness - meanStart);
    539       var biasedStdev = Math.Sqrt(varEnd - (cov * cov) / varStart);
    540 
    541       if (Problem.Maximization) {
    542         var goal = Population.Min(x => x.Fitness);
    543         var z = (goal - biasedMean) / biasedStdev;
    544         return 1.0 - Phi(z); // P(X >= z)
    545       } else {
    546         var goal = Population.Max(x => x.Fitness);
    547         var z = (goal - biasedMean) / biasedStdev;
    548         return Phi(z); // P(X <= z)
    549       }
    550     }
    551515
    552516    private double ProbabilityAccept3dModel(double a, double b, IConfidenceRegressionModel model) {
     
    558522      var z = (goal - mean) / sdev;
    559523      return Problem.Maximization ? 1.0 - Phi(z) /* P(X >= z) */ : Phi(z); // P(X <= z)
    560     }
    561     protected double ProbabilityAccept3d(double startingFitness1, double startingFitness2, IList<Tuple<double, double, double>> data) {
    562       if (data.Count < 20) return 1.0;
    563       var samples = 0;
    564       double meanX1 = 0, meanX1Old = 0, meanX2 = 0, meanX2Old = 0, meanY = 0, meanYOld = 0;
    565       double varX1 = 0, varX1Old = 0, varX2 = 0, varX2Old = 0, varY = 0, varYOld = 0;
    566       for (var i = 0; i < data.Count; i++) {
    567         samples++;
    568         var x1 = data[i].Item1;
    569         var x2 = data[i].Item2;
    570         var y = data[i].Item3;
    571 
    572         if (samples == 1) {
    573           meanX1Old = x1;
    574           meanX2Old = x2;
    575           meanYOld = y;
    576         } else {
    577           meanX1 = meanX1Old + (x1 - meanX1Old) / samples;
    578           meanX2 = meanX2Old + (x2 - meanX2Old) / samples;
    579           meanY = meanYOld + (y - meanYOld) / samples;
    580           varX1 = varX1Old + (x1 - meanX1Old) * (x1 - meanX1) / (samples - 1);
    581           varX2 = varX2Old + (x2 - meanX2Old) * (x2 - meanX2) / (samples - 1);
    582           varY = varYOld + (y - meanYOld) * (y - meanY) / (samples - 1);
    583 
    584           meanX1Old = meanX1;
    585           meanX2Old = meanX2;
    586           meanYOld = meanY;
    587           varX1Old = varX1;
    588           varX2Old = varX2;
    589           varYOld = varY;
    590         }
    591       }
    592       double covX1X2 = 0, covX1Y = 0, covX2Y = 0;
    593       for (var i = 0; i < data.Count; i++) {
    594         covX1X2 += (data[i].Item1 - meanX1) * (data[i].Item2 - meanX2) / data.Count;
    595         covX1Y += (data[i].Item1 - meanX1) * (data[i].Item3 - meanY) / data.Count;
    596         covX2Y += (data[i].Item2 - meanX2) * (data[i].Item3 - meanY) / data.Count;
    597       }
    598 
    599       var biasedMean = meanY + ((covX1Y * varX2 - covX2Y * covX1X2) * (startingFitness1 - meanX1) - (covX1Y * covX1X2 - covX2Y * varX1) * (startingFitness2 - meanX2)) / (varX1 * varX2 - covX1X2 * covX1X2);
    600       var biasedStdev = Math.Sqrt(varY - (covX1Y * covX1Y * varX2 - 2 * covX1Y * covX2Y * covX1X2 + covX2Y * covX2Y * varX1) / (varX1 * varX2 - covX1X2 * covX1X2));
    601       if (Problem.Maximization) {
    602         var goal = Population.Min(x => x.Fitness);
    603         var z = (goal - biasedMean) / biasedStdev;
    604         return 1.0 - Phi(z); // P(X >= z)
    605       } else {
    606         var goal = Population.Max(x => x.Fitness);
    607         var z = (goal - biasedMean) / biasedStdev;
    608         return Phi(z); // P(X <= z)
    609       }
    610524    }
    611525
Note: See TracChangeset for help on using the changeset viewer.