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
{
30 [Item("QualityComparator", "Compares two qualities and creates a boolean flag that indicates if the left side is better than the right side.")]
31 [StorableType("ACCB56BB-699C-493D-8832-2E3B1D6AEE97")]
32 public class QualityComparator
: SingleSuccessorOperator
, IQualityComparator
{
33 public ILookupParameter
<DoubleValue
> LeftSideParameter
{
34 get { return (ILookupParameter<DoubleValue>)Parameters["LeftSide"]; }
36 public IValueLookupParameter
<DoubleValue
> RightSideParameter
{
37 get { return (IValueLookupParameter<DoubleValue>)Parameters["RightSide"]; }
39 public ILookupParameter
<BoolValue
> ResultParameter
{
40 get { return (ILookupParameter<BoolValue>)Parameters["Result"]; }
42 public IValueLookupParameter
<BoolValue
> MaximizationParameter
{
43 get { return (IValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
47 protected QualityComparator(StorableConstructorFlag _
) : base(_
) { }
48 protected QualityComparator(QualityComparator original
, Cloner cloner
) : base(original
, cloner
) { }
49 public QualityComparator()
51 Parameters
.Add(new LookupParameter
<DoubleValue
>("LeftSide", "The left side of the comparison."));
52 Parameters
.Add(new ValueLookupParameter
<DoubleValue
>("RightSide", "The right side of the comparison."));
53 Parameters
.Add(new LookupParameter
<BoolValue
>("Result", "The result of the comparison, true if the quality on the LeftSide is better than the quality on the RightSide."));
54 Parameters
.Add(new ValueLookupParameter
<BoolValue
>("Maximization", "True if the problem is a maximization problem, otherwise false."));
57 public override IDeepCloneable
Clone(Cloner cloner
) {
58 return new QualityComparator(this, cloner
);
61 public override IOperation
Apply() {
62 DoubleValue left
= LeftSideParameter
.ActualValue
;
63 DoubleValue right
= RightSideParameter
.ActualValue
;
64 BoolValue maximization
= MaximizationParameter
.ActualValue
;
65 bool better
= Compare(maximization
.Value
, left
.Value
, right
.Value
);
66 if (ResultParameter
.ActualValue
== null)
67 ResultParameter
.ActualValue
= new BoolValue(better
);
68 else ResultParameter
.ActualValue
.Value
= better
;
72 protected virtual bool Compare(bool maximization
, double left
, double right
) {
73 return maximization
&& left
> right
|| !maximization
&& left
< right
;