コード例 #1
0
ファイル: Simulation.cs プロジェクト: johannesmols/Caelicus
        /// <summary>
        /// Get the nearest open order available for pickup from the current location
        /// </summary>
        /// <param name="vehicle"></param>
        /// <returns></returns>
        public Tuple <Order, Vertex <VertexInfo, EdgeInfo> > GetNearestOpenOrder(VehicleInstance vehicle)
        {
            var nearestBaseStation = GetNearestBaseStationWithOpenOrder(vehicle);
            var order = OpenOrders.FirstOrDefault(o => o.Start == nearestBaseStation);

            return(Tuple.Create(order, nearestBaseStation));
        }
コード例 #2
0
ファイル: Simulation.cs プロジェクト: johannesmols/Caelicus
        /// <summary>
        /// Get the nearest base station to the current position that has open orders available
        /// </summary>
        /// <param name="vehicle">The vehicle</param>
        /// <returns></returns>
        public Vertex <VertexInfo, EdgeInfo> GetNearestBaseStationWithOpenOrder(VehicleInstance vehicle)
        {
            var nearestBaseStation = Parameters.Graph
                                     .Where(x => x.Info.Type == VertexType.Base || x.Info.Type == VertexType.Both)
                                     .Where(x => OpenOrders.Any(y => y.Start.Info == x.Info && Parameters.Graph.FindShortestPath(Parameters.Graph, y.Start, y.Target, vehicle.TravelMode).Item2 <= vehicle.GetMaximumTravelDistance(y.PayloadWeight, vehicle.CurrentFuelLoaded)))
                                     .Select(x => Tuple.Create(Parameters.Graph.FindShortestPath(Parameters.Graph, vehicle.CurrentVertexPosition, x, vehicle.TravelMode).Item2, x))
                                     .OrderBy(x => x.Item1)
                                     .FirstOrDefault();

            return(nearestBaseStation?.Item2);
        }