Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/05/15 10:39:46 (9 years ago)
Author:
abeham
Message:

#2232: merged to stable

Location:
stable
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearch.cs

    r11170 r11905  
    283283    private void ParameterizeLocalImprovementOperators() {
    284284      foreach (ILocalImprovementOperator op in LocalImprovementParameter.ValidValues) {
    285         if (op != LocalImprovementParameter.Value) op.Problem = null;
    286285        op.MaximumIterationsParameter.Value = null;
    287286        op.MaximumIterationsParameter.ActualName = LocalImprovementMaximumIterationsParameter.Name;
    288       }
    289       if (LocalImprovementParameter.Value != null)
    290         LocalImprovementParameter.Value.Problem = Problem;
     287
     288        var algOp = op as ILocalImprovementAlgorithmOperator;
     289        if (algOp != null && algOp != LocalImprovementParameter.Value) algOp.Problem = null;
     290      }
     291      if (LocalImprovementParameter.Value is ILocalImprovementAlgorithmOperator)
     292        ((ILocalImprovementAlgorithmOperator)LocalImprovementParameter.Value).Problem = Problem;
    291293    }
    292294    private void InitializeLocalImprovementOperators() {
    293       if (Problem == null) {
    294         LocalImprovementParameter.ValidValues.Clear();
    295       } else {
    296         foreach (var entry in LocalImprovementParameter.ValidValues.ToList()) {
    297           if (!entry.ProblemType.IsAssignableFrom(Problem.GetType())) {
    298             LocalImprovementParameter.ValidValues.Remove(entry);
    299           }
     295      LocalImprovementParameter.ValidValues.Clear();
     296      if (Problem != null) {
     297        // Regular ILocalImprovementOperators queried from Problem
     298        foreach (var op in Problem.Operators.OfType<ILocalImprovementOperator>().Where(x => !(x is ILocalImprovementAlgorithmOperator))) {
     299          LocalImprovementParameter.ValidValues.Add(op);
    300300        }
    301         foreach (ILocalImprovementOperator op in ApplicationManager.Manager.GetInstances<ILocalImprovementOperator>().Where(x => x.ProblemType.IsAssignableFrom(Problem.GetType()))) {
    302           if (!LocalImprovementParameter.ValidValues.Any(x => x.GetType() == op.GetType()))
     301        // ILocalImprovementAlgorithmOperators queried from ApplicationManager
     302        var algOps = ApplicationManager.Manager.GetInstances<ILocalImprovementAlgorithmOperator>()
     303                                               .Where(x => x.ProblemType.IsInstanceOfType(Problem));
     304        foreach (var op in algOps) {
     305          if (LocalImprovementParameter.ValidValues.All(x => x.GetType() != op.GetType()))
    303306            LocalImprovementParameter.ValidValues.Add(op);
    304307        }
Note: See TracChangeset for help on using the changeset viewer.