1  #region License Information


2  /* HeuristicLab


3  * Copyright (C) 20022016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)


4  *


5  * This file is part of HeuristicLab.


6  *


7  * HeuristicLab is free software: you can redistribute it and/or modify


8  * it under the terms of the GNU General Public License as published by


9  * the Free Software Foundation, either version 3 of the License, or


10  * (at your option) any later version.


11  *


12  * HeuristicLab is distributed in the hope that it will be useful,


13  * but WITHOUT ANY WARRANTY; without even the implied warranty of


14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the


15  * GNU General Public License for more details.


16  *


17  * You should have received a copy of the GNU General Public License


18  * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.


19  */


20  #endregion


21 


22  using System;


23  using System.Runtime.Remoting.Contexts;


24  using HeuristicLab.Algorithms.MemPR.Interfaces;


25  using HeuristicLab.Common;


26  using HeuristicLab.Core;


27  using HeuristicLab.Encodings.PermutationEncoding;


28  using HeuristicLab.Optimization;


29  using HeuristicLab.Parameters;


30  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;


31 


32  namespace HeuristicLab.Algorithms.MemPR.Permutation {


33  [Item("MemPR Population Context (permutation)", "MemPR population context for permutation encoded problems.")]


34  [StorableClass]


35  public sealed class PermutationMemPRPopulationContext : MemPRPopulationContext<ISingleObjectiveHeuristicOptimizationProblem, Encodings.PermutationEncoding.Permutation, PermutationMemPRPopulationContext, PermutationMemPRSolutionContext> {


36 


37  [StorableConstructor]


38  private PermutationMemPRPopulationContext(bool deserializing) : base(deserializing) { }


39  private PermutationMemPRPopulationContext(PermutationMemPRPopulationContext original, Cloner cloner)


40  : base(original, cloner) { }


41  public PermutationMemPRPopulationContext() : base("PermutationMemPRPopulationContext") { }


42  public PermutationMemPRPopulationContext(string name) : base(name) { }


43 


44  public override IDeepCloneable Clone(Cloner cloner) {


45  return new PermutationMemPRPopulationContext(this, cloner);


46  }


47 


48  public override PermutationMemPRSolutionContext CreateSingleSolutionContext(ISingleObjectiveSolutionScope<Encodings.PermutationEncoding.Permutation> solution) {


49  return new PermutationMemPRSolutionContext(this, solution);


50  }


51 


52  public override ISingleObjectiveSolutionScope<Encodings.PermutationEncoding.Permutation> ToScope(Encodings.PermutationEncoding.Permutation code, double fitness = double.NaN) {


53  var creator = Problem.SolutionCreator as IPermutationCreator;


54  if (creator == null) throw new InvalidOperationException("Can only solve binary encoded problems with MemPR (binary)");


55  return new SingleObjectiveSolutionScope<Encodings.PermutationEncoding.Permutation>(code, creator.PermutationParameter.ActualName, fitness, Problem.Evaluator.QualityParameter.ActualName) {


56  Parent = Scope


57  };


58  }


59  }


60 


61  [Item("MemPR Solution Context (permutation)", "MemPR solution context for permutation encoded problems.")]


62  [StorableClass]


63  public sealed class PermutationMemPRSolutionContext : MemPRSolutionContext<ISingleObjectiveHeuristicOptimizationProblem, Encodings.PermutationEncoding.Permutation, PermutationMemPRPopulationContext, PermutationMemPRSolutionContext>, IPermutationSubspaceContext {


64 


65  [Storable]


66  private IValueParameter<PermutationSolutionSubspace> subspace;


67  public PermutationSolutionSubspace Subspace {


68  get { return subspace.Value; }


69  }


70  ISolutionSubspace<Encodings.PermutationEncoding.Permutation> ISolutionSubspaceContext<Encodings.PermutationEncoding.Permutation>.Subspace {


71  get { return Subspace; }


72  }


73 


74  [StorableConstructor]


75  private PermutationMemPRSolutionContext(bool deserializing) : base(deserializing) { }


76  private PermutationMemPRSolutionContext(PermutationMemPRSolutionContext original, Cloner cloner)


77  : base(original, cloner) {


78 


79  }


80  public PermutationMemPRSolutionContext(PermutationMemPRPopulationContext baseContext, ISingleObjectiveSolutionScope<Encodings.PermutationEncoding.Permutation> solution)


81  : base(baseContext, solution) {


82 


83  Parameters.Add(subspace = new ValueParameter<PermutationSolutionSubspace>("Subspace", new PermutationSolutionSubspace(null)));


84  }


85 


86  public override IDeepCloneable Clone(Cloner cloner) {


87  return new PermutationMemPRSolutionContext(this, cloner);


88  }


89  }


90  }

