Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/21/12 13:46:48 (12 years ago)
Author:
svonolfe
Message:

Moved parameters from the ProblemInstance to the Problem (#1177)

File:
1 edited

Legend:

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

    r7203 r7852  
    9292    }
    9393
     94    public DoubleValue BestKnownQuality {
     95      get { return BestKnownQualityParameter.Value; }
     96      set { BestKnownQualityParameter.Value = value; }
     97    }
     98
    9499    public ISingleObjectiveEvaluator Evaluator {
    95       get { return ProblemInstance.EvaluatorParameter.Value; }
     100      get { return EvaluatorParameter.Value; }
    96101    }
    97102
     
    101106
    102107    public ISolutionCreator SolutionCreator {
    103       get { return ProblemInstance.SolutionCreatorParameter.Value; }
     108      get { return SolutionCreatorParameter.Value; }
    104109    }
    105110
     
    121126      Parameters.Add(new OptionalValueParameter<VRPSolution>("BestKnownSolution", "The best known solution of this VRP instance."));
    122127
     128      Parameters.Add(new ConstrainedValueParameter<IVRPCreator>("SolutionCreator", "The operator which should be used to create new VRP solutions."));
     129      Parameters.Add(new ValueParameter<IVRPEvaluator>("Evaluator", "The operator which should be used to evaluate VRP solutions."));
     130
     131      EvaluatorParameter.Hidden = true;
     132
    123133      operators = new List<IOperator>();
    124134
     
    175185
    176186    private void AttachProblemInstanceEventHandlers() {
    177       if (Parameters.ContainsKey("Evaluator"))
    178         Parameters.Remove("Evaluator");
    179 
    180       if (Parameters.ContainsKey("SolutionCreator"))
    181         Parameters.Remove("SolutionCreator");
    182 
    183       if (Parameters.ContainsKey("BestKnownSolution"))
    184         Parameters.Remove("BestKnownSolution");
    185 
    186       if (Parameters.ContainsKey("BestKnownQuality"))
    187         Parameters.Remove("BestKnownQuality");
    188 
     187      var solutionCreatorParameter = SolutionCreatorParameter as ConstrainedValueParameter<IVRPCreator>;
     188      solutionCreatorParameter.ValidValues.Clear();
    189189
    190190      if (ProblemInstance != null) {
    191         ProblemInstance.SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
    192         ProblemInstance.EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
    193         Parameters.Add(ProblemInstance.EvaluatorParameter);
    194         Parameters.Add(ProblemInstance.SolutionCreatorParameter);
    195 
    196         Parameters.Add(ProblemInstance.BestKnownQualityParameter);
    197         Parameters.Add(ProblemInstance.BestKnownSolutionParameter);
     191        EvaluatorParameter.Value = ProblemInstance.SolutionEvaluator;
     192        foreach (IVRPCreator creator in ProblemInstance.Operators.Where(o => o is IVRPCreator)) {
     193          solutionCreatorParameter.ValidValues.Add(creator);
     194        }
     195        ProblemInstance.EvaluationChanged += new EventHandler(ProblemInstance_EvaluationChanged);
     196      }     
     197    }
     198
     199    void ProblemInstance_EvaluationChanged(object sender, EventArgs e) {
     200      if (BestKnownSolution != null) {
     201        //call evaluator
     202        BestKnownQuality = new DoubleValue(ProblemInstance.Evaluate(BestKnownSolution.Solution).Quality);
     203        BestKnownSolution.Quality = BestKnownQuality;
     204      } else {
     205        BestKnownQuality = null;
    198206      }
    199207    }
     
    260268      parser.Parse();
    261269
     270      this.Name = parser.ProblemName;
    262271      MDCVRPTWProblemInstance problem = new MDCVRPTWProblemInstance();
    263272
     
    291300      parser.Parse();
    292301
     302      this.Name = parser.ProblemName;
    293303      CVRPPDTWProblemInstance problem = new CVRPPDTWProblemInstance();
    294304
     
    444454      else {
    445455        VRPSolution solution = new VRPSolution(ProblemInstance, encoding, new DoubleValue(0));
    446         ProblemInstance.BestKnownSolutionParameter.Value = solution;
     456        BestKnownSolutionParameter.Value = solution;
    447457      }
    448458    }
Note: See TracChangeset for help on using the changeset viewer.