Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/19/10 15:43:21 (14 years ago)
Author:
svonolfe
Message:

Merged changes from trunk into branch (#1177)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/ProblemInstances/VRPProblemInstance.cs

    r4752 r4860  
    7777    }
    7878
     79    protected OptionalValueParameter<DoubleValue> BestKnownQualityParameter {
     80      get { return (OptionalValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
     81    }
     82    protected OptionalValueParameter<VRPSolution> BestKnownSolutionParameter {
     83      get { return (OptionalValueParameter<VRPSolution>)Parameters["BestKnownSolution"]; }
     84    }
     85
     86    IValueParameter<DoubleValue> IVRPProblemInstance.BestKnownQualityParameter {
     87      get { return BestKnownQualityParameter; }
     88    }
     89
     90    IValueParameter<VRPSolution> IVRPProblemInstance.BestKnownSolutionParameter {
     91      get { return BestKnownSolutionParameter; }
     92    }
     93
    7994    public DoubleMatrix Coordinates {
    8095      get { return CoordinatesParameter.Value; }
     
    109124      get { return DistanceFactorParameter.Value; }
    110125      set { DistanceFactorParameter.Value = value; }
     126    }
     127
     128    public DoubleValue BestKnownQuality {
     129      get { return BestKnownQualityParameter.Value; }
     130      set { BestKnownQualityParameter.Value = value; }
     131    }
     132    public VRPSolution BestKnownSolution {
     133      get { return BestKnownSolutionParameter.Value; }
     134      set { BestKnownSolutionParameter.Value = value; }
    111135    }
    112136
     
    171195    public double Evaluate(Tour tour) {
    172196      return EvaluatorParameter.Value.Evaluate(this, tour).Quality;
     197    }
     198
     199    protected void EvalBestKnownSolution() {
     200      if (BestKnownSolution != null) {
     201        //call evaluator
     202        BestKnownQuality = new DoubleValue(Evaluate(BestKnownSolution.Solution));
     203        BestKnownSolution.Quality = BestKnownQuality;
     204      } else {
     205        BestKnownQuality = null;
     206      }
    173207    }
    174208
     
    192226      Parameters.Add(new ValueParameter<IVRPCreator>("SolutionCreator", "The operator which should be used to create new VRP solutions.", Creator));
    193227      Parameters.Add(new ValueParameter<IVRPEvaluator>("Evaluator", "The operator which should be used to evaluate VRP solutions.", Evaluator));
     228
     229      Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this VRP instance."));
     230      Parameters.Add(new OptionalValueParameter<VRPSolution>("BestKnownSolution", "The best known solution of this VRP instance."));
     231
     232      AttachEventHandlers();
    194233    }
    195234
    196235    protected VRPProblemInstance(VRPProblemInstance original, Cloner cloner)
    197236      : base(original, cloner) {
    198     }
     237        AttachEventHandlers();
     238    }
     239
     240    [StorableHook(HookType.AfterDeserialization)]
     241    private void AfterDeserializationHook() {
     242      #region Backwards Compatibility
     243      if (!Parameters.ContainsKey("BestKnownSolution")) {
     244        Parameters.Add(new OptionalValueParameter<VRPSolution>("BestKnownSolution", "The best known solution of this TSP instance."));
     245      }
     246      #endregion
     247     
     248      AttachEventHandlers();
     249    }
     250
     251    private void AttachEventHandlers() {
     252      BestKnownSolutionParameter.ValueChanged += new EventHandler(BestKnownSolutionParameter_ValueChanged);
     253      DistanceFactorParameter.ValueChanged += new EventHandler(DistanceFactorParameter_ValueChanged);
     254      DistanceFactorParameter.Value.ValueChanged += new EventHandler(DistanceFactor_ValueChanged);
     255      FleetUsageFactorParameter.ValueChanged += new EventHandler(FleetUsageFactorParameter_ValueChanged);
     256      FleetUsageFactorParameter.Value.ValueChanged += new EventHandler(FleetUsageFactor_ValueChanged);
     257      DistanceMatrixParameter.ValueChanged += new EventHandler(DistanceMatrixParameter_ValueChanged);
     258      if (DistanceMatrix != null) {
     259        DistanceMatrix.ItemChanged += new EventHandler<EventArgs<int, int>>(DistanceMatrix_ItemChanged);
     260        DistanceMatrix.Reset += new EventHandler(DistanceMatrix_Reset);
     261      }
     262      UseDistanceMatrixParameter.ValueChanged += new EventHandler(UseDistanceMatrixParameter_ValueChanged);
     263      UseDistanceMatrix.ValueChanged += new EventHandler(UseDistanceMatrix_ValueChanged);
     264    }
     265
     266    #region Event handlers
     267    void BestKnownSolutionParameter_ValueChanged(object sender, EventArgs e) {
     268      EvalBestKnownSolution();
     269    }
     270    void DistanceFactorParameter_ValueChanged(object sender, EventArgs e) {
     271      DistanceFactorParameter.Value.ValueChanged += new EventHandler(DistanceFactor_ValueChanged);
     272      EvalBestKnownSolution();
     273    }
     274    void DistanceFactor_ValueChanged(object sender, EventArgs e) {
     275      EvalBestKnownSolution();
     276    }
     277    void FleetUsageFactorParameter_ValueChanged(object sender, EventArgs e) {
     278      FleetUsageFactorParameter.Value.ValueChanged += new EventHandler(FleetUsageFactor_ValueChanged);
     279      EvalBestKnownSolution();
     280    }
     281    void FleetUsageFactor_ValueChanged(object sender, EventArgs e) {
     282      EvalBestKnownSolution();
     283    }
     284    void DistanceMatrixParameter_ValueChanged(object sender, EventArgs e) {
     285      if (DistanceMatrix != null) {
     286        DistanceMatrix.ItemChanged += new EventHandler<EventArgs<int, int>>(DistanceMatrix_ItemChanged);
     287        DistanceMatrix.Reset += new EventHandler(DistanceMatrix_Reset);
     288      }
     289      EvalBestKnownSolution();
     290    }
     291    void DistanceMatrix_Reset(object sender, EventArgs e) {
     292      EvalBestKnownSolution();
     293    }
     294    void DistanceMatrix_ItemChanged(object sender, EventArgs<int, int> e) {
     295      EvalBestKnownSolution();
     296    }
     297    void UseDistanceMatrixParameter_ValueChanged(object sender, EventArgs e) {
     298      UseDistanceMatrix.ValueChanged += new EventHandler(UseDistanceMatrix_ValueChanged);
     299      EvalBestKnownSolution();
     300    }
     301    void UseDistanceMatrix_ValueChanged(object sender, EventArgs e) {
     302      EvalBestKnownSolution();
     303    }
     304    #endregion
    199305  }
    200306}
Note: See TracChangeset for help on using the changeset viewer.