Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/06/12 04:29:56 (12 years ago)
Author:
abeham
Message:

#1614: restructured architecture to allow for different evaluator with different penalty strategies

Location:
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Crossovers/CordeauCrossover.cs

    r7523 r7970  
    3434    IQualitiesAwareGQAPOperator, IWeightsAwareGQAPOperator, IDistancesAwareGQAPOperator, IInstallationCostsAwareGQAPOperator,
    3535    IDemandsAwareGQAPOperator, ICapacitiesAwareGQAPOperator, ITransportationCostsAwareGQAPOperator,
    36     IOverbookedCapacityPenaltyAwareGQAPOperator {
     36    IExpectedRandomQualityAwareGQAPOperator {
    3737
    3838    public ILookupParameter<BoolValue> MaximizationParameter {
     
    6969      get { return (IValueLookupParameter<DoubleValue>)Parameters["TransportationCosts"]; }
    7070    }
    71     public IValueLookupParameter<DoubleValue> OverbookedCapacityPenaltyParameter {
    72       get { return (IValueLookupParameter<DoubleValue>)Parameters["OverbookedCapacityPenalty"]; }
     71    public IValueLookupParameter<DoubleValue> ExpectedRandomQualityParameter {
     72      get { return (IValueLookupParameter<DoubleValue>)Parameters["ExpectedRandomQuality"]; }
     73    }
     74    public IValueLookupParameter<IGQAPEvaluator> EvaluatorParameter {
     75      get { return (IValueLookupParameter<IGQAPEvaluator>)Parameters["Evaluator"]; }
    7376    }
    7477
     
    9194      Parameters.Add(new LookupParameter<DoubleArray>("Capacities", GeneralizedQuadraticAssignmentProblem.CapacitiesDescription));
    9295      Parameters.Add(new ValueLookupParameter<DoubleValue>("TransportationCosts", GeneralizedQuadraticAssignmentProblem.TransportationCostsDescription));
    93       Parameters.Add(new ValueLookupParameter<DoubleValue>("OverbookedCapacityPenalty", GeneralizedQuadraticAssignmentProblem.OverbookedCapacityPenaltyDescription));
     96      Parameters.Add(new ValueLookupParameter<DoubleValue>("ExpectedRandomQuality", GeneralizedQuadraticAssignmentProblem.ExpectedRandomQualityDescription));
     97      Parameters.Add(new ValueLookupParameter<IGQAPEvaluator>("Evaluator", "The evaluator used to evaluate solutions."));
    9498    }
    9599
     
    103107      DoubleMatrix weights, DoubleMatrix distances, DoubleMatrix installationCosts,
    104108      DoubleArray demands, DoubleArray capacities,
    105       DoubleValue transportationCosts, DoubleValue overbookedCapacityPenalty) {
     109      double transportationCosts, double expectedRandomQuality, IGQAPEvaluator evaluator) {
    106110      var mediana = Inizialize(distances);
    107111      int m = capacities.Length;
     
    158162        }
    159163        if (!nofound) {
    160           double sonQual = GQAPEvaluator.Evaluate(son, weights, distances, installationCosts, demands, capacities, transportationCosts, overbookedCapacityPenalty);
     164          double sonQual = evaluator.Evaluate(son, weights, distances, installationCosts, demands, capacities, transportationCosts, expectedRandomQuality);
    161165          if (sonQual < fbest) {
    162166            fbest = sonQual;
     
    197201          onefound = true;
    198202        } else {
    199           double sonQual = GQAPEvaluator.Evaluate(son, weights, distances, installationCosts, demands, capacities, transportationCosts, overbookedCapacityPenalty);
     203          double sonQual = evaluator.Evaluate(son, weights, distances, installationCosts, demands, capacities, transportationCosts, expectedRandomQuality);
    200204          if (sonQual < fbest) {
    201205            fbest = sonQual;
     
    227231        WeightsParameter.ActualValue, DistancesParameter.ActualValue, InstallationCostsParameter.ActualValue,
    228232        DemandsParameter.ActualValue, CapacitiesParameter.ActualValue,
    229         TransportationCostsParameter.ActualValue, OverbookedCapacityPenaltyParameter.ActualValue);
     233        TransportationCostsParameter.ActualValue.Value, ExpectedRandomQualityParameter.ActualValue.Value,
     234        EvaluatorParameter.ActualValue);
    230235    }
    231236
  • branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/Crossovers/GQAPPathRelinking.cs

    r7813 r7970  
    3737  public class GQAPPathRelinking : GQAPCrossover, IQualitiesAwareGQAPOperator, IDemandsAwareGQAPOperator, ICapacitiesAwareGQAPOperator,
    3838  IWeightsAwareGQAPOperator, IDistancesAwareGQAPOperator, IInstallationCostsAwareGQAPOperator, ITransportationCostsAwareGQAPOperator,
    39   IOverbookedCapacityPenaltyAwareGQAPOperator {
     39  IExpectedRandomQualityAwareGQAPOperator, IEvaluatorAwareGQAPOperator {
    4040
    4141    public ILookupParameter<BoolValue> MaximizationParameter {
     
    7272      get { return (IValueLookupParameter<DoubleValue>)Parameters["TransportationCosts"]; }
    7373    }
    74     public IValueLookupParameter<DoubleValue> OverbookedCapacityPenaltyParameter {
    75       get { return (IValueLookupParameter<DoubleValue>)Parameters["OverbookedCapacityPenalty"]; }
     74    public IValueLookupParameter<DoubleValue> ExpectedRandomQualityParameter {
     75      get { return (IValueLookupParameter<DoubleValue>)Parameters["ExpectedRandomQuality"]; }
     76    }
     77    public IValueLookupParameter<IGQAPEvaluator> EvaluatorParameter {
     78      get { return (IValueLookupParameter<IGQAPEvaluator>)Parameters["Evaluator"]; }
    7679    }
    7780
     
    9699      Parameters.Add(new LookupParameter<DoubleMatrix>("InstallationCosts", GeneralizedQuadraticAssignmentProblem.InstallationCostsDescription));
    97100      Parameters.Add(new ValueLookupParameter<DoubleValue>("TransportationCosts", GeneralizedQuadraticAssignmentProblem.TransportationCostsDescription));
    98       Parameters.Add(new ValueLookupParameter<DoubleValue>("OverbookedCapacityPenalty", GeneralizedQuadraticAssignmentProblem.OverbookedCapacityPenaltyDescription));
     101      Parameters.Add(new ValueLookupParameter<DoubleValue>("ExpectedRandomQuality", GeneralizedQuadraticAssignmentProblem.ExpectedRandomQualityDescription));
     102      Parameters.Add(new ValueLookupParameter<IGQAPEvaluator>("Evaluator", "The evaluator that is used to evaluate GQAP solutions."));
    99103      Parameters.Add(new ValueParameter<PercentValue>("CandidateSizeFactor", "(η) Determines the size of the set of feasible moves in each path-relinking step relative to the maximum size. A value of 50% means that only half of all possible moves are considered each step.", new PercentValue(0.5)));
    100104    }
     
    107111      ItemArray<DoubleValue> flowDistanceQualities, ItemArray<DoubleValue> installationQualities, ItemArray<DoubleValue> overbookedCapacities,
    108112      DoubleArray demands, DoubleArray capacities, DoubleMatrix weights, DoubleMatrix distances, DoubleMatrix installationCosts,
    109       DoubleValue transportationCosts, DoubleValue overbookedCapacityPenalty, DoubleValue candidateSizeFactor) {
     113      DoubleValue transportationCosts, DoubleValue expectedRandomQuality, DoubleValue candidateSizeFactor, IGQAPEvaluator evaluator) {
    110114      if (random == null) throw new ArgumentNullException("random", "No IRandom provider is given.");
    111115      if (parents == null || !parents.Any()) throw new ArgumentException("No parents given for path relinking.", "parents");
     
    145149
    146150          double currentFDQ, currentIQ, currentOC;
    147           GQAPEvaluator.Evaluate(pi2, weights, distances, installationCosts, demands, capacities,
     151          evaluator.Evaluate(pi2, weights, distances, installationCosts, demands, capacities,
    148152            out currentFDQ, out currentIQ, out currentOC);
    149153
    150154          if (currentOC <= 0.0) {
    151             var quality = GQAPEvaluator.GetCombinedQuality(currentFDQ, currentIQ, currentOC,
    152                 transportationCosts.Value, overbookedCapacityPenalty.Value);
     155            var quality = evaluator.GetFitness(currentFDQ, currentIQ, currentOC,
     156              transportationCosts.Value, expectedRandomQuality.Value);
    153157            var solution = new GQAPSolution(pi2, new DoubleValue(quality), new DoubleValue(currentFDQ),
    154158              new DoubleValue(currentIQ), new DoubleValue(currentOC));
     
    211215        CapacitiesParameter.ActualValue, WeightsParameter.ActualValue, DistancesParameter.ActualValue,
    212216        InstallationCostsParameter.ActualValue, TransportationCostsParameter.ActualValue,
    213         OverbookedCapacityPenaltyParameter.ActualValue, CandidateSizeFactorParameter.Value);
     217        ExpectedRandomQualityParameter.ActualValue, CandidateSizeFactorParameter.Value,
     218        EvaluatorParameter.ActualValue);
    214219    }
    215220
  • branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Operators/LocalImprovers/ApproximateLocalSearch.cs

    r7523 r7970  
    3737  public class ApproximateLocalSearch : SingleSuccessorOperator, IDemandsAwareGQAPOperator, ICapacitiesAwareGQAPOperator,
    3838    IWeightsAwareGQAPOperator, IDistancesAwareGQAPOperator, IInstallationCostsAwareGQAPOperator,
    39     ITransportationCostsAwareGQAPOperator, IOverbookedCapacityPenaltyAwareGQAPOperator,
    40     IAssignmentAwareGQAPOperator, IQualityAwareGQAPOperator, IGQAPLocalImprovementOperator, IStochasticOperator {
     39    ITransportationCostsAwareGQAPOperator, IExpectedRandomQualityAwareGQAPOperator,
     40    IAssignmentAwareGQAPOperator, IQualityAwareGQAPOperator, IGQAPLocalImprovementOperator,
     41    IEvaluatorAwareGQAPOperator, IStochasticOperator {
    4142    public IProblem Problem { get; set; }
    4243    public Type ProblemType {
     
    6263      get { return (IValueLookupParameter<DoubleValue>)Parameters["TransportationCosts"]; }
    6364    }
    64     public IValueLookupParameter<DoubleValue> OverbookedCapacityPenaltyParameter {
    65       get { return (IValueLookupParameter<DoubleValue>)Parameters["OverbookedCapacityPenalty"]; }
     65    public IValueLookupParameter<DoubleValue> ExpectedRandomQualityParameter {
     66      get { return (IValueLookupParameter<DoubleValue>)Parameters["ExpectedRandomQuality"]; }
    6667    }
    6768    public ILookupParameter<IntegerVector> AssignmentParameter {
     
    100101    public ILookupParameter<ResultCollection> ResultsParameter {
    101102      get { return (ILookupParameter<ResultCollection>)Parameters["Results"]; }
     103    }
     104    public IValueLookupParameter<IGQAPEvaluator> EvaluatorParameter {
     105      get { return (IValueLookupParameter<IGQAPEvaluator>)Parameters["Evaluator"]; }
    102106    }
    103107
     
    113117      Parameters.Add(new LookupParameter<DoubleMatrix>("InstallationCosts", GeneralizedQuadraticAssignmentProblem.InstallationCostsDescription));
    114118      Parameters.Add(new ValueLookupParameter<DoubleValue>("TransportationCosts", GeneralizedQuadraticAssignmentProblem.TransportationCostsDescription));
    115       Parameters.Add(new ValueLookupParameter<DoubleValue>("OverbookedCapacityPenalty", GeneralizedQuadraticAssignmentProblem.OverbookedCapacityPenaltyDescription));
     119      Parameters.Add(new ValueLookupParameter<DoubleValue>("ExpectedRandomQuality", GeneralizedQuadraticAssignmentProblem.ExpectedRandomQualityDescription));
    116120      Parameters.Add(new LookupParameter<IntegerVector>("Assignment", GQAPSolutionCreator.AssignmentDescription));
    117121      Parameters.Add(new LookupParameter<BoolValue>("Maximization", GeneralizedQuadraticAssignmentProblem.MaximizationDescription));
     
    126130      Parameters.Add(new ValueLookupParameter<PercentValue>("OneMoveProbability", "The probability for performing a 1-move, which is the opposite of performing a 2-move.", new PercentValue(.5)));
    127131      Parameters.Add(new LookupParameter<ResultCollection>("Results", "The result collection that stores the results."));
     132      Parameters.Add(new ValueLookupParameter<IGQAPEvaluator>("Evaluator", "The evaluator that is used to evaluate GQAP solutions."));
    128133    }
    129134
     
    157162      IntValue maxCLS, IntValue maximumIterations,
    158163      DoubleMatrix weights, DoubleMatrix distances, DoubleMatrix installationCosts, DoubleArray demands, DoubleArray capacities,
    159       DoubleValue transportationCosts, DoubleValue overbookedCapacityPenalty, PercentValue oneMoveProbability) {
     164      DoubleValue transportationCosts, DoubleValue expectedRandomQuality, PercentValue oneMoveProbability,
     165      IGQAPEvaluator evaluator) {
    160166
    161167      while (true) {
     
    171177          double moveFlowDistanceQuality, moveInstallationQuality, moveOverbookedCapacity;
    172178          GQAPNMoveEvaluator.Evaluate(move, assignment, weights, distances, installationCosts,
    173             demands, capacities, out moveFlowDistanceQuality, out moveInstallationQuality, out moveOverbookedCapacity);
    174           double moveQuality = GQAPEvaluator.GetCombinedQuality(moveFlowDistanceQuality, moveInstallationQuality, moveOverbookedCapacity,
    175             transportationCosts.Value, overbookedCapacityPenalty.Value);
     179            demands, capacities, evaluator, out moveFlowDistanceQuality, out moveInstallationQuality, out moveOverbookedCapacity);
     180          double moveQuality = evaluator.GetFitness(moveFlowDistanceQuality, moveInstallationQuality, moveOverbookedCapacity,
     181            transportationCosts.Value, expectedRandomQuality.Value);
    176182
    177183          if (moveOverbookedCapacity <= 0.0 && moveQuality < 0.0) {
     
    216222        DemandsParameter.ActualValue, CapacitiesParameter.ActualValue,
    217223        TransportationCostsParameter.ActualValue,
    218         OverbookedCapacityPenaltyParameter.ActualValue,
    219         OneMoveProbabilityParameter.ActualValue);
     224        ExpectedRandomQualityParameter.ActualValue,
     225        OneMoveProbabilityParameter.ActualValue,
     226        EvaluatorParameter.ActualValue);
    220227      return base.Apply();
    221228    }
Note: See TracChangeset for help on using the changeset viewer.