public bool FindInsertionPlace(int city, int routeToAvoid, bool allowInfeasible, out int route, out int place) { route = -1; place = -1; double minDetour = double.MaxValue; VRPEvaluation eval = ProblemInstance.Evaluate(this); bool originalFeasible = ProblemInstance.Feasible(eval); for (int tour = 0; tour < Tours.Count; tour++) { if (tour != routeToAvoid) { double length = eval.Quality; for (int i = 0; i <= Tours[tour].Stops.Count; i++) { bool feasible; double detour = ProblemInstance.GetInsertionCosts(eval, this, city, tour, i, out feasible); if (feasible || allowInfeasible) { if (route < 0 || detour < minDetour) { route = tour; place = i; minDetour = detour; } } } } } return(route >= 0 && place >= 0); }
private void EvalBestKnownSolution() { if (BestKnownSolution != null) { //call evaluator BestKnownQuality = new DoubleValue(ProblemInstance.Evaluate(BestKnownSolution.Solution).Quality); BestKnownSolution.Quality = BestKnownQuality; } else { BestKnownQuality = null; } }
private void EvalBestKnownSolution() { if (BestKnownSolution == null) { return; } try { //call evaluator BestKnownQuality = new DoubleValue(ProblemInstance.Evaluate(BestKnownSolution.Solution).Quality); BestKnownSolution.Quality = BestKnownQuality; } catch { BestKnownQuality = null; BestKnownSolution = null; } }
protected override void PerformMove() { PotvinCustomerRelocationMove move = CustomerRelocationMoveParameter.ActualValue; PotvinEncoding newSolution = move.Individual.Clone() as PotvinEncoding; Apply(newSolution, move, ProblemInstance); newSolution.Repair(); VRPToursParameter.ActualValue = newSolution; //reset move quality VRPEvaluation eval = ProblemInstance.Evaluate(newSolution); MoveQualityParameter.ActualValue.Value = eval.Quality; //update memory VariableCollection memory = MemoriesParameter.ActualValue; string key = AdditionFrequencyMemoryKeyParameter.Value.Value; if (memory != null) { if (!memory.ContainsKey(key)) { memory.Add(new Variable(key, new ItemDictionary <PotvinCustomerRelocationMoveAttribute, IntValue>())); } ItemDictionary <PotvinCustomerRelocationMoveAttribute, IntValue> additionFrequency = memory[key].Value as ItemDictionary <PotvinCustomerRelocationMoveAttribute, IntValue>; PotvinCustomerRelocationMoveAttribute attr = new PotvinCustomerRelocationMoveAttribute(0, move.Tour, move.City); if (!additionFrequency.ContainsKey(attr)) { additionFrequency[attr] = new IntValue(0); } additionFrequency[attr].Value++; } }
protected double GetQuality(PrinsEncoding individual) { return(ProblemInstance.Evaluate(individual).Quality); }