1
#region License Information
3 * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
5 * This file is part of HeuristicLab.
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.
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.
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/>.
22 using HeuristicLab
.Common
;
23 using HeuristicLab
.Core
;
24 using HeuristicLab
.Data
;
25 using HeuristicLab
.Operators
;
26 using HeuristicLab
.Parameters
;
29 namespace HeuristicLab
.Optimization
.Operators
{
31 /// A base class for operators that perform path relinking between single objective solutions.
33 [Item("SingleObjectivePathRelinker", "A base class for operators that perform path relinking between single objective solutions.")]
34 [StorableType("364CE8A7-0258-4EC1-BBDB-E40C944BD196")]
35 public abstract class SingleObjectivePathRelinker
: SingleSuccessorOperator
, ISingleObjectivePathRelinker
{
36 #region Parameter properties
37 public ScopeParameter CurrentScopeParameter
{
38 get { return (ScopeParameter)Parameters["CurrentScope"]; }
40 public ILookupParameter
<ItemArray
<IItem
>> ParentsParameter
{
41 get { return (IScopeTreeLookupParameter<IItem>)Parameters["Parents"]; }
43 public IValueParameter
<PercentValue
> RelinkingAccuracyParameter
{
44 get { return (IValueParameter<PercentValue>)Parameters["RelinkingAccuracy"]; }
49 private IScope CurrentScope
{
50 get { return CurrentScopeParameter.ActualValue; }
52 private ItemArray
<IItem
> Parents
{
53 get { return ParentsParameter.ActualValue; }
55 private PercentValue RelinkingAccuracy
{
56 get { return RelinkingAccuracyParameter.Value; }
61 protected SingleObjectivePathRelinker(StorableConstructorFlag _
) : base(_
) { }
62 protected SingleObjectivePathRelinker(SingleObjectivePathRelinker original
, Cloner cloner
) : base(original
, cloner
) { }
63 protected SingleObjectivePathRelinker()
65 #region Create parameters
66 Parameters
.Add(new ScopeParameter("CurrentScope", "The current scope that contains the parents."));
67 Parameters
.Add(new ScopeTreeLookupParameter
<IItem
>("Parents", "The parents used for path relinking."));
68 Parameters
.Add(new ValueParameter
<PercentValue
>("RelinkingAccuracy", "The percentage of relinked offspring that should be yielded.", new PercentValue(0.25)));
72 public sealed override IOperation
Apply() {
73 ItemArray
<IItem
> relinkedSolutions
= Relink(Parents
, RelinkingAccuracy
);
74 var offspringScope
= new Scope("Offspring");
75 foreach (var solution
in relinkedSolutions
) {
76 var scope
= new Scope();
77 scope
.Variables
.Add(new Variable(ParentsParameter
.ActualName
, solution
));
78 offspringScope
.SubScopes
.Add(scope
);
80 CurrentScope
.SubScopes
.Add(offspringScope
);
84 protected abstract ItemArray
<IItem
> Relink(ItemArray
<IItem
> parents
, PercentValue n
);