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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.