Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/19/10 18:20:30 (14 years ago)
Author:
abeham
Message:

fixed wiring in LS, SA, and TS when problem is changed MoveGenerator becomes null which resulted in a NullReferenceException #933

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs

    r3101 r3131  
    293293      ISingleObjectiveMoveEvaluator oldMoveEvaluator = MoveEvaluator;
    294294      ClearMoveParameters();
    295       List<Type> moveTypes = MoveGenerator.GetType().GetInterfaces().Where(x => typeof(IMoveOperator).IsAssignableFrom(x)).ToList();
    296       foreach (Type type in moveTypes.ToList()) {
    297         if (moveTypes.Any(t => t != type && type.IsAssignableFrom(t)))
    298           moveTypes.Remove(type);
    299       }
    300       foreach (Type type in moveTypes) {
    301         var operators = Problem.Operators.Where(x => type.IsAssignableFrom(x.GetType())).OrderBy(x => x.Name);
    302         foreach (IMoveMaker moveMaker in operators.OfType<IMoveMaker>())
    303           MoveMakerParameter.ValidValues.Add(moveMaker);
    304         foreach (ISingleObjectiveMoveEvaluator moveEvaluator in operators.OfType<ISingleObjectiveMoveEvaluator>())
    305           MoveEvaluatorParameter.ValidValues.Add(moveEvaluator);
    306       }
    307       if (oldMoveMaker != null) {
    308         IMoveMaker mm = MoveMakerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMoveMaker.GetType());
    309         if (mm != null) MoveMaker = mm;
    310       }
    311       if (oldMoveEvaluator != null) {
    312         ISingleObjectiveMoveEvaluator me = MoveEvaluatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMoveEvaluator.GetType());
    313         if (me != null) MoveEvaluator = me;
     295      if (MoveGenerator != null) {
     296        List<Type> moveTypes = MoveGenerator.GetType().GetInterfaces().Where(x => typeof(IMoveOperator).IsAssignableFrom(x)).ToList();
     297        foreach (Type type in moveTypes.ToList()) {
     298          if (moveTypes.Any(t => t != type && type.IsAssignableFrom(t)))
     299            moveTypes.Remove(type);
     300        }
     301        foreach (Type type in moveTypes) {
     302          var operators = Problem.Operators.Where(x => type.IsAssignableFrom(x.GetType())).OrderBy(x => x.Name);
     303          foreach (IMoveMaker moveMaker in operators.OfType<IMoveMaker>())
     304            MoveMakerParameter.ValidValues.Add(moveMaker);
     305          foreach (ISingleObjectiveMoveEvaluator moveEvaluator in operators.OfType<ISingleObjectiveMoveEvaluator>())
     306            MoveEvaluatorParameter.ValidValues.Add(moveEvaluator);
     307        }
     308        if (oldMoveMaker != null) {
     309          IMoveMaker mm = MoveMakerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMoveMaker.GetType());
     310          if (mm != null) MoveMaker = mm;
     311        }
     312        if (oldMoveEvaluator != null) {
     313          ISingleObjectiveMoveEvaluator me = MoveEvaluatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMoveEvaluator.GetType());
     314          if (me != null) MoveEvaluator = me;
     315        }
    314316      }
    315317    }
Note: See TracChangeset for help on using the changeset viewer.