Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/08/10 11:37:00 (14 years ago)
Author:
svonolfe
Message:

Added move operators (WIP) (#1177)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/General/Moves/VRPMoveMaker.cs

    r4369 r4370  
    5555    private void UpdateMoveEvaluation() {
    5656      IVRPEvaluator evaluator = ProblemInstance.EvaluatorParameter.Value;
    57       foreach (IParameter parameter in evaluator.Parameters) {
    58         if (parameter is ILookupParameter
    59           && parameter != evaluator.VRPToursParameter
    60           && parameter != evaluator.ProblemInstanceParameter) {
    61           ILookupParameter evaluatorParameter = parameter as ILookupParameter;
     57      ICollection<IParameter> addedParameters = new List<IParameter>();
     58     
     59      try {
     60        foreach (IParameter parameter in evaluator.Parameters) {
     61          if (parameter is ILookupParameter
     62            && parameter != evaluator.VRPToursParameter
     63            && parameter != evaluator.ProblemInstanceParameter) {
     64            ILookupParameter evaluatorParameter = parameter as ILookupParameter;
    6265         
    63           string resultName = evaluatorParameter.ActualName;
    64           if (!this.Parameters.Exists(p => p.Name == resultName)) {
    65             ILookupParameter resultParameter = new LookupParameter<IItem>(resultName);
    66             resultParameter.ExecutionContext = ExecutionContext;
    67             this.Parameters.Add(resultParameter);
     66            string resultName = evaluatorParameter.ActualName;
     67            if (!this.Parameters.Exists(p => p.Name == resultName)) {
     68              ILookupParameter resultParameter = new LookupParameter<IItem>(resultName);
     69              resultParameter.ExecutionContext = ExecutionContext;
     70              this.Parameters.Add(resultParameter);
     71              addedParameters.Add(resultParameter);
     72            }
     73
     74            string moveResultName = VRPMoveEvaluator.MovePrefix + resultName;
     75            if (!this.Parameters.Exists(p => p.Name == moveResultName)) {
     76              ILookupParameter moveResultParameter = new LookupParameter<IItem>(moveResultName);
     77              moveResultParameter.ExecutionContext = ExecutionContext;
     78              this.Parameters.Add(moveResultParameter);
     79              addedParameters.Add(moveResultParameter);
     80            }
     81
     82            ILookupParameter result = Parameters[resultName] as ILookupParameter;
     83            ILookupParameter moveResult = Parameters[moveResultName] as ILookupParameter;
     84            result.ActualValue = moveResult.ActualValue.Clone() as IItem;
    6885          }
    69 
    70           string moveResultName = VRPMoveEvaluator.MovePrefix + resultName;
    71           if (!this.Parameters.Exists(p => p.Name == moveResultName)) {
    72             ILookupParameter moveResultParameter = new LookupParameter<IItem>(moveResultName);
    73             moveResultParameter.ExecutionContext = ExecutionContext;
    74             this.Parameters.Add(moveResultParameter);
    75           }
    76 
    77           ILookupParameter result = Parameters[resultName] as ILookupParameter;
    78           ILookupParameter moveResult = Parameters[moveResultName] as ILookupParameter;
    79           result.ActualValue = moveResult.ActualValue.Clone() as IItem;
     86        }
     87      }
     88      finally {
     89        foreach(IParameter parameter in addedParameters) {
     90          this.Parameters.Remove(parameter);
    8091        }
    8192      }
Note: See TracChangeset for help on using the changeset viewer.