Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/06/10 17:05:13 (14 years ago)
Author:
svonolfe
Message:

Worked on VRP operators (WIP) (#1177)

File:
1 edited

Legend:

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

    r4362 r4365  
    3535using HeuristicLab.Problems.VehicleRouting.Parsers;
    3636using HeuristicLab.Problems.VehicleRouting.ProblemInstances;
     37using HeuristicLab.Problems.VehicleRouting.Variants;
    3738
    3839namespace HeuristicLab.Problems.VehicleRouting {
     
    6162      get { return BestKnownQualityParameter; }
    6263    }
    63     public IParameter SolutionCreatorParameter {
    64       get {
    65         if (ProblemInstance != null)
    66           return ProblemInstance.SolutionCreatorParameter;
    67         else
    68           return null;
    69       }
    70     }
    71     public IParameter EvaluatorParameter {
    72       get {
    73         if (ProblemInstance != null)
    74           return ProblemInstance.EvaluatorParameter;
    75         else
    76           return null;
    77       }
     64    public IValueParameter<IVRPCreator> SolutionCreatorParameter {
     65      get { return (IValueParameter<IVRPCreator>)Parameters["SolutionCreator"]; }
     66    }
     67    IParameter IProblem.SolutionCreatorParameter {
     68      get { return SolutionCreatorParameter; }
     69    }
     70    public IValueParameter<IVRPEvaluator> EvaluatorParameter {
     71      get { return (IValueParameter<IVRPEvaluator>)Parameters["Evaluator"]; }
     72    }
     73    IParameter IProblem.EvaluatorParameter {
     74      get { return EvaluatorParameter; }
    7875    }
    7976    #endregion
     
    8683
    8784    public ISingleObjectiveEvaluator Evaluator {
    88       get {
    89         if (ProblemInstance != null)
    90           return ProblemInstance.EvaluatorParameter.Value;
    91         else
    92           return null;
    93       }
     85      get { return ProblemInstance.EvaluatorParameter.Value; }
    9486    }
    9587
     
    9991
    10092    public ISolutionCreator SolutionCreator {
    101       get {
    102         if (ProblemInstance != null)
    103           return ProblemInstance.SolutionCreatorParameter.Value;
    104         else
    105           return null;
    106       }
    107     }
     93      get { return ProblemInstance.SolutionCreatorParameter.Value; }
     94    }
     95
     96    [Storable]
     97    private List<IOperator> operators;
    10898
    10999    public IEnumerable<IOperator> Operators {
    110       get {
    111         if (ProblemInstance != null)
    112           return ProblemInstance.Operators.OrderBy(op => op.Name);
    113         else
    114           return null;
    115       }
     100      get { return operators; }
    116101    }
    117102    #endregion
     
    124109      Parameters.Add(new ValueParameter<IVRPProblemInstance>("ProblemInstance", "The VRP problem instance"));
    125110      Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this VRP instance."));
    126  
     111
     112      operators = new List<IOperator>();
     113
    127114      InitializeRandomVRPInstance();
     115      InitializeOperators();
    128116
    129117      AttachEventHandlers();
     
    133121    public override IDeepCloneable Clone(Cloner cloner) {
    134122      VehicleRoutingProblem clone = (VehicleRoutingProblem)base.Clone(cloner);
     123      clone.operators = operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
    135124      clone.AttachEventHandlers();
    136125      return clone;
     
    172161
    173162    private void AttachProblemInstanceEventHandlers() {
     163      if (Parameters.ContainsKey("Evaluator"))
     164        Parameters.Remove("Evaluator");
     165
     166      if (Parameters.ContainsKey("SolutionCreator"))
     167        Parameters.Remove("SolutionCreator");
     168
    174169      if (ProblemInstance != null) {
    175170        ProblemInstance.SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
    176171        ProblemInstance.EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
     172        Parameters.Add(ProblemInstance.EvaluatorParameter);
     173        Parameters.Add(ProblemInstance.SolutionCreatorParameter);
    177174      }
    178175    }
     
    180177    void ProblemInstanceParameter_ValueChanged(object sender, EventArgs e) {
    181178      AttachProblemInstanceEventHandlers();
    182     }
    183 
     179      InitializeOperators();
     180
     181      OnSolutionCreatorChanged();
     182      OnEvaluatorChanged();
     183      OnOperatorsChanged();
     184    }
    184185    private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) {
     186      ParameterizeSolutionCreator();
     187     
    185188      OnSolutionCreatorChanged();
    186189    }
    187190    private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) {
    188191      OnEvaluatorChanged();
     192    }
     193
     194    private void InitializeOperators() {
     195      operators = new List<IOperator>();
     196
     197      if (ProblemInstance != null) {
     198        operators.AddRange(
     199        ProblemInstance.Operators.Concat(
     200          ApplicationManager.Manager.GetInstances<IGeneralVRPOperator>().Cast<IOperator>()).OrderBy(op => op.Name));
     201      }
     202
     203      ParameterizeOperators();
     204    }
     205
     206    private void ParameterizeSolutionCreator() {
     207      if (SolutionCreator is IMultiVRPOperator) {
     208        (SolutionCreator as IMultiVRPOperator).SetOperators(Operators);
     209      }
     210    }
     211
     212    private void ParameterizeOperators() {
     213      foreach (IOperator op in Operators) {
     214        if (op is IMultiVRPOperator) {
     215          (op as IMultiVRPOperator).SetOperators(Operators);
     216        }
     217      }
    189218    }
    190219    #endregion
Note: See TracChangeset for help on using the changeset viewer.