Beispiel #1
0
        /// <summary>
        /// Instantiates a scoring function from the given config.
        /// </summary>
        /// <param name="scorerConfig">The config.</param>
        /// <param name="stationAssignment">Indicates whether the order shall be assigned to the station directly.</param>
        /// <returns>The scoring function.</returns>
        private Func <double> GenerateScorer(QueueOrderSelectionRuleConfig scorerConfig, bool stationAssignment)
        {
            switch (scorerConfig.Type())
            {
            case QueueOrderSelectionRuleType.Random:
            { QueueOrderSelectionRandom tempcfg = scorerConfig as QueueOrderSelectionRandom; return(() => { return Score(tempcfg, stationAssignment); }); }

            case QueueOrderSelectionRuleType.FCFS:
            { QueueOrderSelectionFCFS tempcfg = scorerConfig as QueueOrderSelectionFCFS; return(() => { return Score(tempcfg, stationAssignment); }); }

            case QueueOrderSelectionRuleType.EarliestDeadline:
            { QueueOrderSelectionEarliestDeadline tempcfg = scorerConfig as QueueOrderSelectionEarliestDeadline; return(() => { return Score(tempcfg, stationAssignment); }); }

            case QueueOrderSelectionRuleType.VacantDeadline:
            { QueueOrderSelectionDeadlineVacant tempcfg = scorerConfig as QueueOrderSelectionDeadlineVacant; return(() => { return Score(tempcfg, stationAssignment); }); }

            case QueueOrderSelectionRuleType.InboundMatches:
            { QueueOrderSelectionInboundMatches tempcfg = scorerConfig as QueueOrderSelectionInboundMatches; return(() => { return Score(tempcfg, stationAssignment); }); }

            case QueueOrderSelectionRuleType.Completable:
            { QueueOrderSelectionCompleteable tempcfg = scorerConfig as QueueOrderSelectionCompleteable; return(() => { return Score(tempcfg, stationAssignment); }); }

            case QueueOrderSelectionRuleType.Lines:
            { QueueOrderSelectionMostLines tempcfg = scorerConfig as QueueOrderSelectionMostLines; return(() => { return Score(tempcfg, stationAssignment); }); }

            case QueueOrderSelectionRuleType.Related:
            { QueueOrderSelectionRelated tempcfg = scorerConfig as QueueOrderSelectionRelated; return(() => { return Score(tempcfg, stationAssignment); }); }

            default: throw new ArgumentException("Unknown scorer type: " + scorerConfig.Type().ToString());
            }
        }
Beispiel #2
0
 private double Score(QueueOrderSelectionCompleteable config, bool queueAssignment)
 {
     // Prefer orders that can be completed with inbound inventory
     if (config.OnlyNearestPod)
     {
         // Order is completable with nearest pod
         return(_nearestInboundPod[_currentStation] == null ? 0 :
                _currentOrder.Requests.Any(r => r.State != Management.RequestState.Finished && r.Pod != null && r.Pod != _nearestInboundPod[_currentStation]) ? 0 :
                _currentOrder.Requests.Where(r => r.State != Management.RequestState.Finished && r.Pod == null).GroupBy(r => r.Item)
                .All(i => _nearestInboundPod[_currentStation].CountAvailable(i.Key) >= i.Count()) ? 1 : 0);
     }
     else
     {
         // Order is completable with all inbound pods
         return(_currentOrder.Requests.Where(r => r.State != Management.RequestState.Finished && r.Pod == null).GroupBy(r => r.Item)
                .All(i => _currentStation.InboundPods.Sum(pod => pod.CountAvailable(i.Key)) >= i.Count()) ? 1 : 0);
     }
 }