Changeset 15558 for branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3
- Timestamp:
- 12/22/17 01:32:13 (6 years ago)
- Location:
- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASP.cs
r15553 r15558 108 108 } 109 109 [Storable] 110 private FixedValueParameter< PercentValue> minimumDifferenceParameter;111 public IFixedValueParameter< PercentValue> MinimumDifferenceParameter {110 private FixedValueParameter<IntValue> minimumDifferenceParameter; 111 public IFixedValueParameter<IntValue> MinimumDifferenceParameter { 112 112 get { return minimumDifferenceParameter; } 113 113 } … … 121 121 set { seedParameter.Value.Value = value; } 122 122 } 123 public int EliteSetSize { 124 get { return eliteSetSizeParameter.Value.Value; } 125 set { eliteSetSizeParameter.Value.Value = value; } 126 } 123 127 public int MinimumEliteSetSize { 124 128 get { return minimiumEliteSetSizeParameter.Value.Value; } 125 129 set { minimiumEliteSetSizeParameter.Value.Value = value; } 126 130 } 127 public int EliteSetSize { 128 get { return eliteSetSizeParameter.Value.Value; } 129 set { eliteSetSizeParameter.Value.Value = value; } 131 public int MaximumIterations { 132 get { return maximumIterationsParameter.Value.Value; } 133 set { maximumIterationsParameter.Value.Value = value; } 134 } 135 public int MaximumLocalSearchIterations { 136 get { return maximumLocalSearchIterationsParameter.Value.Value; } 137 set { maximumLocalSearchIterationsParameter.Value.Value = value; } 130 138 } 131 139 public double CandidateSizeFactor { … … 141 149 set { oneMoveProbabilityParameter.Value.Value = value; } 142 150 } 143 public doubleMinimumDifference {151 public int MinimumDifference { 144 152 get { return minimumDifferenceParameter.Value.Value; } 145 153 set { minimumDifferenceParameter.Value.Value = value; } … … 174 182 Parameters.Add(maximumCandidateListSizeParameter = new FixedValueParameter<IntValue>("MaximumCandidateListSize", "The maximum number of candidates that should be found in each step.", new IntValue(10))); 175 183 Parameters.Add(oneMoveProbabilityParameter = new FixedValueParameter<PercentValue>("OneMoveProbability", "The probability for performing a 1-move, which is the opposite of performing a 2-move.", new PercentValue(.5))); 176 Parameters.Add(minimumDifferenceParameter = new FixedValueParameter< PercentValue>("MinimumDifference", "The minimum amount of difference between two solutions so that they are both accepted in the elite set.", new PercentValue(1e-7)));184 Parameters.Add(minimumDifferenceParameter = new FixedValueParameter<IntValue>("MinimumDifference", "The minimum amount of difference between two solutions so that they are both accepted in the elite set.", new IntValue(4))); 177 185 Problem = new GQAP(); 178 186 } … … 252 260 var fit = Problem.ProblemInstance.ToSingleObjective(pi_prime.Evaluation); 253 261 double[] similarities = context.Population.Select(x => HammingSimilarityCalculator.CalculateSimilarity(x.Solution.Assignment, pi_prime.Assignment)).ToArray(); 254 if (similarities.Max() <= 1.0 - MinimumDifference) { // cond. 2 of line 13 in Algorithm 1262 if (similarities.Max() <= 1.0 - (MinimumDifference / (double)pi_prime.Assignment.Length)) { // cond. 2 of line 13 in Algorithm 1 255 263 var replacement = context.Population.Select((v, i) => new { V = v, Index = i }) 256 264 .Where(x => x.V.Fitness >= fit).ToArray(); … … 277 285 } 278 286 279 context.Iterations++;280 281 287 IResult result; 282 288 if (Results.TryGetValue("Iterations", out result)) … … 294 300 295 301 context.RunOperator(analyzerParameter.Value, context.Scope, cancellationToken); 302 303 context.Iterations++; 296 304 } 297 305 } … … 299 307 private bool IsSufficientlyDifferent(IntegerVector vec) { 300 308 return context.Population.All(x => 301 HammingSimilarityCalculator.CalculateSimilarity( x.Solution.Assignment, vec) <= 1.0 - MinimumDifference309 HammingSimilarityCalculator.CalculateSimilarity(vec, x.Solution.Assignment) <= 1.0 - (MinimumDifference / (double)vec.Length) 302 310 ); 303 311 } … … 329 337 var localSearchEvaluations = 0; 330 338 ApproximateLocalSearch.Apply(context.Random, pi_prime, MaximumCandidateListSize, 331 OneMoveProbability, 1000, Problem.ProblemInstance, out localSearchEvaluations);339 OneMoveProbability, MaximumLocalSearchIterations, Problem.ProblemInstance, out localSearchEvaluations); 332 340 context.EvaluatedSolutions += localSearchEvaluations; 333 341 } 334 342 335 343 private bool StoppingCriterion() { 336 return context.Iterations > MaximumIterations Parameter.Value.Value;344 return context.Iterations > MaximumIterations; 337 345 } 338 346 } -
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASPContext.cs
r15553 r15558 174 174 scope.Variables.Add(new Variable("Evaluation", code.Evaluation)); 175 175 return scope; 176 }177 178 public double Evaluate(GQAPSolution solution, CancellationToken token) {179 var solScope = ToScope(solution);180 Evaluate(solScope, token);181 return solScope.Fitness;182 }183 184 public void Evaluate(ISingleObjectiveSolutionScope<GQAPSolution> solScope, CancellationToken token) {185 var pdef = Problem as ISingleObjectiveProblemDefinition;186 if (pdef != null) {187 var ind = new SingleEncodingIndividual(pdef.Encoding, solScope);188 solScope.Fitness = pdef.Evaluate(ind, Random);189 } else {190 RunOperator(Problem.Evaluator, solScope, token);191 }192 }193 194 public GRASPSolutionContext CreateSingleSolutionContext(ISingleObjectiveSolutionScope<GQAPSolution> solution) {195 return new GRASPSolutionContext(this, solution);196 176 } 197 177 … … 274 254 #endregion 275 255 } 276 277 [Item("GRASP+PR (GQAP) SolutionContext", "SolutionContext for GRASP+PR (GQAP).")]278 [StorableClass]279 public sealed class GRASPSolutionContext : ParameterizedNamedItem, IExecutionContext {280 281 private GRASPContext parent;282 public IExecutionContext Parent {283 get { return parent; }284 set { throw new InvalidOperationException("Cannot set the parent of a single-solution context."); }285 }286 287 [Storable]288 private ISingleObjectiveSolutionScope<GQAPSolution> scope;289 public IScope Scope {290 get { return scope; }291 }292 293 IKeyedItemCollection<string, IParameter> IExecutionContext.Parameters {294 get { return Parameters; }295 }296 297 public GQAP Problem {298 get { return parent.Problem; }299 }300 public bool Maximization {301 get { return parent.Maximization; }302 }303 304 public double BestQuality {305 get { return parent.BestQuality; }306 set { parent.BestQuality = value; }307 }308 309 public GQAPSolution BestSolution {310 get { return parent.BestSolution; }311 set { parent.BestSolution = value; }312 }313 314 public IRandom Random {315 get { return parent.Random; }316 }317 318 [Storable]319 private IValueParameter<IntValue> evaluatedSolutions;320 public int EvaluatedSolutions {321 get { return evaluatedSolutions.Value.Value; }322 set { evaluatedSolutions.Value.Value = value; }323 }324 325 [Storable]326 private IValueParameter<IntValue> iterations;327 public int Iterations {328 get { return iterations.Value.Value; }329 set { iterations.Value.Value = value; }330 }331 332 [StorableConstructor]333 private GRASPSolutionContext(bool deserializing) : base(deserializing) { }334 private GRASPSolutionContext(GRASPSolutionContext original, Cloner cloner)335 : base(original, cloner) {336 scope = cloner.Clone(original.scope);337 evaluatedSolutions = cloner.Clone(original.evaluatedSolutions);338 iterations = cloner.Clone(original.iterations);339 }340 public GRASPSolutionContext(GRASPContext baseContext, ISingleObjectiveSolutionScope<GQAPSolution> solution) {341 parent = baseContext;342 scope = solution;343 344 Parameters.Add(evaluatedSolutions = new ValueParameter<IntValue>("EvaluatedSolutions", new IntValue(0)));345 Parameters.Add(iterations = new ValueParameter<IntValue>("Iterations", new IntValue(0)));346 }347 348 public override IDeepCloneable Clone(Cloner cloner) {349 return new GRASPSolutionContext(this, cloner);350 }351 352 public void IncrementEvaluatedSolutions(int byEvaluations) {353 if (byEvaluations < 0) throw new ArgumentException("Can only increment and not decrement evaluated solutions.");354 EvaluatedSolutions += byEvaluations;355 }356 public double Evaluate(GQAPSolution solution, CancellationToken token) {357 return parent.Evaluate(solution, token);358 }359 360 public void Evaluate(ISingleObjectiveSolutionScope<GQAPSolution> solScope, CancellationToken token) {361 parent.Evaluate(solScope, token);362 }363 364 #region IExecutionContext members365 public IAtomicOperation CreateOperation(IOperator op) {366 return new Core.ExecutionContext(this, op, Scope);367 }368 369 public IAtomicOperation CreateOperation(IOperator op, IScope s) {370 return new Core.ExecutionContext(this, op, s);371 }372 373 public IAtomicOperation CreateChildOperation(IOperator op) {374 return new Core.ExecutionContext(this, op, Scope);375 }376 377 public IAtomicOperation CreateChildOperation(IOperator op, IScope s) {378 return new Core.ExecutionContext(this, op, s);379 }380 #endregion381 }382 256 }
Note: See TracChangeset
for help on using the changeset viewer.