Example #1
0
        /// <summary>
        /// Updates the element to the specified time.
        /// </summary>
        /// <param name="lastTime">The time before the update.</param>
        /// <param name="currentTime">The time to update to.</param>
        public override void Update(double lastTime, double currentTime)
        {
            // Check whether a change has to happen
            if (currentTime > _nextChange)
            {
                // Handle pod storage managers
                if (_config.ExchangePodStorage)
                {
                    // Select next manager
                    PodStorageMethodType nextPodManagerType = _podManagers[Instance.Randomizer.NextInt(_podManagers.Count)];
                    PodStorageManager    newPodStorageManager;
                    // Prepare it
                    switch (nextPodManagerType)
                    {
                    case PodStorageMethodType.Nearest:
                    {
                        Instance.ControllerConfig.PodStorageConfig = new NearestPodStorageConfiguration();
                        newPodStorageManager = new NearestPodStorageManager(Instance);
                    }
                    break;

                    case PodStorageMethodType.StationBased:
                    {
                        Instance.ControllerConfig.PodStorageConfig = new StationBasedPodStorageConfiguration();
                        newPodStorageManager = new StationBasedPodStorageManager(Instance);
                    }
                    break;

                    case PodStorageMethodType.Random:
                    {
                        Instance.ControllerConfig.PodStorageConfig = new RandomPodStorageConfiguration();
                        newPodStorageManager = new RandomPodStorageManager(Instance);
                    }
                    break;

                    case PodStorageMethodType.Turnover:
                    {
                        Instance.ControllerConfig.PodStorageConfig = new TurnoverPodStorageConfiguration();
                        newPodStorageManager = new TurnoverPodStorageManager(Instance);
                    }
                    break;

                    default: throw new ArgumentException("Unknown pod storage manager: " + nextPodManagerType);
                    }
                    // Change it
                    Instance.Controller.ExchangePodStorageManager(newPodStorageManager);
                }
                // Set next change event
                _nextChange += _config.ChangeTimeout;
            }
        }
        /// <summary>
        /// Updates the element to the specified time.
        /// </summary>
        /// <param name="lastTime">The time before the update.</param>
        /// <param name="currentTime">The time to update to.</param>
        public override void Update(double lastTime, double currentTime)
        {
            // Check whether a change has to happen
            if (_podStorageManagerQueue.Any() && currentTime > TranslateTime(_podStorageManagerQueue.First().Key))
            {
                // --> Handle pod storage managers
                // Get next manager
                PodStorageMethodType nextPodManagerType = _podStorageManagerQueue.Dequeue().Value;
                PodStorageManager    newPodStorageManager;
                // Prepare it
                switch (nextPodManagerType)
                {
                case PodStorageMethodType.Nearest:
                {
                    Instance.ControllerConfig.PodStorageConfig = new NearestPodStorageConfiguration();
                    newPodStorageManager = new NearestPodStorageManager(Instance);
                }
                break;

                case PodStorageMethodType.StationBased:
                {
                    Instance.ControllerConfig.PodStorageConfig = new StationBasedPodStorageConfiguration();
                    newPodStorageManager = new StationBasedPodStorageManager(Instance);
                }
                break;

                case PodStorageMethodType.Random:
                {
                    Instance.ControllerConfig.PodStorageConfig = new RandomPodStorageConfiguration();
                    newPodStorageManager = new RandomPodStorageManager(Instance);
                }
                break;

                case PodStorageMethodType.Turnover:
                {
                    Instance.ControllerConfig.PodStorageConfig = new TurnoverPodStorageConfiguration();
                    newPodStorageManager = new TurnoverPodStorageManager(Instance);
                }
                break;

                case PodStorageMethodType.Fixed: throw new ArgumentException("Cannot switch to fixed mechanism, because the system is already running!");

                default: throw new ArgumentException("Unknown pod storage manager: " + nextPodManagerType);
                }
                // Change it
                Instance.Controller.ExchangePodStorageManager(newPodStorageManager);
            }
        }
Example #3
0
        /// <summary>
        /// Creates a new controller instance.
        /// </summary>
        /// <param name="instance">The instance this controller belongs to.</param>
        public Controller(Instance instance)
        {
            Instance = instance;
            // Init path manager
            switch (instance.ControllerConfig.PathPlanningConfig.GetMethodType())
            {
            case PathPlanningMethodType.Simple: PathManager = null; break;

            case PathPlanningMethodType.Dummy: PathManager = new DummyPathManager(instance); break;

            case PathPlanningMethodType.WHCAvStar: PathManager = new WHCAvStarPathManager(instance); break;

            case PathPlanningMethodType.FAR: PathManager = new FARPathManager(instance); break;

            case PathPlanningMethodType.BCP: PathManager = new BCPPathManager(instance); break;

            case PathPlanningMethodType.CBS: PathManager = new CBSPathManager(instance); break;

            case PathPlanningMethodType.OD_ID: PathManager = new ODIDPathManager(instance); break;

            case PathPlanningMethodType.WHCAnStar: PathManager = new WHCAnStarPathManager(instance); break;

            case PathPlanningMethodType.PAS: PathManager = new PASPathManager(instance); break;

            default: throw new ArgumentException("Unknown path planning engine: " + instance.ControllerConfig.PathPlanningConfig.GetMethodType());
            }
            // Init bot manager
            switch (instance.ControllerConfig.TaskAllocationConfig.GetMethodType())
            {
            case TaskAllocationMethodType.Dummy: BotManager = new DummyBotManager(instance); break;

            case TaskAllocationMethodType.BruteForce: BotManager = new BruteForceBotManager(instance); break;

            case TaskAllocationMethodType.Random: BotManager = new RandomBotManager(instance); break;

            case TaskAllocationMethodType.Balanced: BotManager = new BalancedBotManager(instance); break;

            case TaskAllocationMethodType.Swarm: BotManager = new SwarmBotManager(instance); break;

            case TaskAllocationMethodType.ConstantRatio: BotManager = new ConstantRatioBotManager(instance); break;

            case TaskAllocationMethodType.Concept: BotManager = new ConceptBotManager(instance); break;

            default: throw new ArgumentException("Unknown bot manager: " + instance.ControllerConfig.TaskAllocationConfig.GetMethodType());
            }
            // Init station manager
            switch (instance.ControllerConfig.StationActivationConfig.GetMethodType())
            {
            case StationActivationMethodType.ActivateAll: StationManager = new ActivateAllStationManager(instance); break;

            case StationActivationMethodType.BacklogThreshold: StationManager = new BacklogThresholdStationManager(instance); break;

            case StationActivationMethodType.ConstantRatio: StationManager = new ConstantRatioStationManager(instance); break;

            case StationActivationMethodType.WorkShift: StationManager = new WorkShiftStationActivationManager(instance); break;

            default: throw new ArgumentException("Unknown station manager: " + instance.ControllerConfig.StationActivationConfig.GetMethodType());
            }
            // Init item storage manager
            switch (instance.ControllerConfig.ItemStorageConfig.GetMethodType())
            {
            case ItemStorageMethodType.Dummy: StorageManager = new DummyStorageManager(instance); break;

            case ItemStorageMethodType.Random: StorageManager = new RandomStorageManager(instance); break;

            case ItemStorageMethodType.Correlative: StorageManager = new CorrelativeStorageManager(instance); break;

            case ItemStorageMethodType.Turnover: StorageManager = new TurnoverStorageManager(instance); break;

            case ItemStorageMethodType.ClosestLocation: StorageManager = new ClosestLocationStorageManager(instance); break;

            case ItemStorageMethodType.Reactive: StorageManager = new ReactiveStorageManager(instance); break;

            case ItemStorageMethodType.Emptiest: StorageManager = new EmptiestStorageManager(instance); break;

            case ItemStorageMethodType.LeastDemand: StorageManager = new LeastDemandStorageManager(instance); break;

            default: throw new ArgumentException("Unknown storage manager: " + instance.ControllerConfig.ItemStorageConfig.GetMethodType());
            }
            // Init pod storage manager
            switch (instance.ControllerConfig.PodStorageConfig.GetMethodType())
            {
            case PodStorageMethodType.Dummy: PodStorageManager = new DummyPodStorageManager(instance); break;

            case PodStorageMethodType.Fixed: PodStorageManager = new FixedPodStorageManager(instance); break;

            case PodStorageMethodType.Nearest: PodStorageManager = new NearestPodStorageManager(instance); break;

            case PodStorageMethodType.StationBased: PodStorageManager = new StationBasedPodStorageManager(instance); break;

            case PodStorageMethodType.Cache: PodStorageManager = new CachePodStorageManager(instance); break;

            case PodStorageMethodType.Utility: PodStorageManager = new UtilityPodStorageManager(instance); break;

            case PodStorageMethodType.Random: PodStorageManager = new RandomPodStorageManager(instance); break;

            case PodStorageMethodType.Turnover: PodStorageManager = new TurnoverPodStorageManager(instance); break;

            default: throw new ArgumentException("Unknown pod manager: " + instance.ControllerConfig.PodStorageConfig.GetMethodType());
            }
            // Init repositioning manager
            switch (instance.ControllerConfig.RepositioningConfig.GetMethodType())
            {
            case RepositioningMethodType.Dummy: RepositioningManager = new DummyRepositioningManager(instance); break;

            case RepositioningMethodType.Cache: RepositioningManager = new CacheRepositioningManager(instance); break;

            case RepositioningMethodType.CacheDropoff: RepositioningManager = new CacheDropoffRepositioningManager(instance); break;

            case RepositioningMethodType.Utility: RepositioningManager = new UtilityRepositioningManager(instance); break;

            case RepositioningMethodType.Concept: RepositioningManager = new ConceptRepositioningManager(instance); break;

            default: throw new ArgumentException("Unknown repositioning manager: " + instance.ControllerConfig.RepositioningConfig.GetMethodType());
            }
            // Init order batching manager
            switch (instance.ControllerConfig.OrderBatchingConfig.GetMethodType())
            {
            case OrderBatchingMethodType.Greedy: OrderManager = new GreedyOrderManager(instance); break;

            case OrderBatchingMethodType.Default: OrderManager = new DefaultOrderManager(instance); break;

            case OrderBatchingMethodType.Random: OrderManager = new RandomOrderManager(instance); break;

            case OrderBatchingMethodType.Workload: OrderManager = new WorkloadOrderManager(instance); break;

            case OrderBatchingMethodType.Related: OrderManager = new RelatedOrderManager(instance); break;

            case OrderBatchingMethodType.NearBestPod: OrderManager = new NearBestPodOrderManager(instance); break;

            case OrderBatchingMethodType.Foresight: OrderManager = new ForesightOrderManager(instance); break;

            case OrderBatchingMethodType.PodMatching: OrderManager = new PodMatchingOrderManager(instance); break;

            case OrderBatchingMethodType.LinesInCommon: OrderManager = new LinesInCommonOrderManager(instance); break;

            case OrderBatchingMethodType.Queue: OrderManager = new QueueOrderManager(instance); break;

            default: throw new ArgumentException("Unknown order manager: " + instance.ControllerConfig.OrderBatchingConfig.GetMethodType());
            }
            // Init replenishment batching manger
            switch (instance.ControllerConfig.ReplenishmentBatchingConfig.GetMethodType())
            {
            case ReplenishmentBatchingMethodType.Random: BundleManager = new RandomBundleManager(instance); break;

            case ReplenishmentBatchingMethodType.SamePod: BundleManager = new SamePodBundleManager(instance); break;

            default: throw new ArgumentException("Unknown replenishment manager: " + instance.ControllerConfig.ReplenishmentBatchingConfig.GetMethodType());
            }
            // Init meta method manager
            switch (instance.ControllerConfig.MethodManagementConfig.GetMethodType())
            {
            case MethodManagementType.NoChange: MethodManager = new NoChangeMethodManager(instance); break;

            case MethodManagementType.Random: MethodManager = new RandomMethodManager(instance); break;

            case MethodManagementType.Scheduled: MethodManager = new ScheduleMethodManager(instance); break;

            default: throw new ArgumentException("Unknown method manager: " + instance.ControllerConfig.MethodManagementConfig.GetMethodType());
            }
            // Init allocator
            Allocator = new Allocator(instance);
        }