private void insertClientToRouteThatMinimizesTheIncreaseInActualCost(int client,int depot,int period)
	{
		double min = 99999999;
		int chosenVehicle =- 1;
		int chosenInsertPosition =- 1;
		double cost;
		
		double [][]costMatrix = problemInstance.costMatrix;
		int depotCount = problemInstance.depotCount;
		
		ArrayList<Integer> vehiclesUnderThisDepot = problemInstance.vehiclesUnderThisDepot.get(depot);
		
		for(int i=0; i<vehiclesUnderThisDepot.size(); i++)
		{
			int vehicle = vehiclesUnderThisDepot.get(i);
			
			ArrayList<Integer> route = routes.get(period).get(vehicle);
			
			if(route.size()==0)
			{
				cost = costMatrix[depot][depotCount+client] + costMatrix[depotCount+client][depot];
				if(cost<min)
				{
					min=cost;
					chosenVehicle = vehicle;
					chosenInsertPosition = 0;
				}
				continue;
			}
			
			
			cost = costMatrix[depot][depotCount+client] + costMatrix[depotCount+client][depotCount+route.get(0)];
			cost -= (costMatrix[depot][depotCount+route.get(0)]);
			if(cost<min)
			{
				min=cost;
				chosenVehicle = vehicle;
				chosenInsertPosition = 0;
			}
			
			for(int insertPosition=1;insertPosition<route.size();insertPosition++)
			{
				//insert the client between insertPosition-1 and insertPosition and check 
				cost = costMatrix[depotCount+route.get(insertPosition-1)][depotCount+client] + costMatrix[depotCount+client][depotCount+route.get(insertPosition)];
				cost -= (costMatrix[depotCount+route.get(insertPosition-1)][depotCount+route.get(insertPosition)]);
				if(cost<min)
				{
					min=cost;
					chosenVehicle = vehicle;
					chosenInsertPosition = insertPosition;
				}
			}
			
			cost = costMatrix[depotCount+route.get(route.size()-1)][depotCount+client] + costMatrix[depotCount+client][depot];
			cost-=(costMatrix[depotCount+route.get(route.size()-1)][depot]);
			
			if(cost<min)
			{
				min=cost;
				chosenVehicle = vehicle;
				chosenInsertPosition = route.size();
			}
			
		}
		routes.get(period).get(chosenVehicle).add(chosenInsertPosition, client);
	}