public InsertionData calculateBestInsertion(Job job, double bestKnownPrice) { Vehicle selectedVehicle = vehicleRoute.getVehicle(); Driver selectedDriver = vehicleRoute.getDriver(); InsertionData bestIData = new NoInsertionFound(); double bestKnownCost = bestKnownPrice; Vehicle bestVehicle = vehicleRoute.getVehicle(); if (!(selectedVehicle instanceof NoVehicle)) { bestIData = insertionCostCalculator.calculate( vehicleRoute, job, selectedVehicle, selectedDriver, bestKnownCost); if (!(bestIData instanceof NoInsertionFound)) { bestVehicle = vehicleRoute.getVehicle(); if (bestIData.getInsertionCost() < bestKnownCost) { bestKnownCost = bestIData.getInsertionCost(); } } } for (String type : vehicleFleetManager.getAvailableVehicleTypes()) { if (!(vehicleRoute.getVehicle() instanceof NoVehicle)) { if (type.equals(vehicleRoute.getVehicle().getType().typeId)) { continue; } } Vehicle v = vehicleFleetManager.getEmptyVehicle(type); InsertionData iData = insertionCostCalculator.calculate(vehicleRoute, job, v, selectedDriver, bestKnownCost); if (iData.getInsertionCost() < bestKnownCost) { if (vehicleRoute.getTour().getLoad() + job.getCapacityDemand() > v.getCapacity()) throw new IllegalStateException("this must not be"); bestIData = iData; bestVehicle = v; bestKnownCost = iData.getInsertionCost(); } } bestIData.setVehicle(bestVehicle); return bestIData; }