- Timestamp:
- 01/05/17 17:50:03 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/MemPRContext.cs
r14544 r14550 114 114 115 115 [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] 116 123 private IValueParameter<IntValue> byBreeding; 117 124 public int ByBreeding { … … 257 264 bestSolution = cloner.Clone(original.bestSolution); 258 265 localSearchEvaluations = cloner.Clone(original.localSearchEvaluations); 266 localOptimaLevel = cloner.Clone(original.localOptimaLevel); 259 267 byBreeding = cloner.Clone(original.byBreeding); 260 268 byRelinking = cloner.Clone(original.byRelinking); … … 290 298 Parameters.Add(bestSolution = new ValueParameter<TSolution>("BestSolution")); 291 299 Parameters.Add(localSearchEvaluations = new ValueParameter<IntValue>("LocalSearchEvaluations", new IntValue(0))); 300 Parameters.Add(localOptimaLevel = new ValueParameter<DoubleValue>("LocalOptimaLevel", new DoubleValue(0))); 292 301 Parameters.Add(byBreeding = new ValueParameter<IntValue>("ByBreeding", new IntValue(0))); 293 302 Parameters.Add(byRelinking = new ValueParameter<IntValue>("ByRelinking", new IntValue(0))); … … 495 504 } 496 505 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 502 506 private double ProbabilityAccept2dModel(double a, IConfidenceRegressionModel model) { 503 507 var ds = new Dataset(new[] { "in", "out" }, new[] { new List<double> { a }, new List<double> { double.NaN } }); … … 509 513 return Problem.Maximization ? 1.0 - Phi(z) /* P(X >= z) */ : Phi(z); // P(X <= z) 510 514 } 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 }551 515 552 516 private double ProbabilityAccept3dModel(double a, double b, IConfidenceRegressionModel model) { … … 558 522 var z = (goal - mean) / sdev; 559 523 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 }610 524 } 611 525
Note: See TracChangeset
for help on using the changeset viewer.