public void TestProductionStateGenerator(double mqbDistanceWeight, double mebDistanceWeight, double uniformProbabilityWeight, int expected)
        {
            var historyGenerator = new ProductionHistoryGenerator(0.5)
            {
                ProbabilityOfStartingInMqbState = 1.0,
                SequenceLength = 64,
            };

            var futureGenerator = new FutureProductionPlanGenerator(0.5)
            {
                ProbabilityOfStartingInMqbState = 1.0,
                SequenceLength = 100
            };

            var files       = Directory.GetFiles("Input", "*");
            var loaderFiles = Enumerable.Repeat(0, 1).Select(t =>
            {
                return(new ProductionScenarioPaths()
                {
                    FutureProductionListCsv = files.FirstOrDefault(s => s.Contains("Future")),
                    HistoricalProductionListCsv = files.FirstOrDefault(s => s.Contains("Historical")),
                    WarehouseInitialStateCsv = files.FirstOrDefault(s => s.Contains("Warehouse"))
                });
            })
                              .ToList();
            var loader = new ProductionStateLoader(loaderFiles, "Input/ProcessingTimeMatrix.csv");

            var prodStateGenerator = new ProductionStateGenerator(historyGenerator, futureGenerator, loader.TimeMatrix, mqbDistanceWeight, mebDistanceWeight, uniformProbabilityWeight);
            var state = prodStateGenerator.GenerateProductionState();

            Assert.AreEqual(expected, state.WarehouseState.Cast <ItemState>().Count(t => t == ItemState.Empty));
        }
Example #2
0
        private static void GenerateFromExistingPlans(int seqLen, string folder, string suffix)
        {
            var futureGenerator = new FutureProductionPlanGenerator(0.5)
            {
                ProbabilityOfStartingInMqbState = 0.5,
                SequenceLength = seqLen
            };

            var probabilities = File.ReadAllLines("probability_log.txt").Select(t => t.Split(';')).Select(t => t[3]).Skip(1).Select(double.Parse).ToArray();

            var loaderFiles = Directory.GetDirectories("GeneratedInput", "generated_situation*")
                              .Select(Directory.GetFiles)
                              .Select(t =>
            {
                return(new ProductionScenarioPaths()
                {
                    FutureProductionListCsv = t.FirstOrDefault(s => s.Contains("Future")),
                    HistoricalProductionListCsv = t.FirstOrDefault(s => s.Contains("Historical")),
                    WarehouseInitialStateCsv = t.FirstOrDefault(s => s.Contains("Warehouse"))
                });
            })
                              .ToList();
            var loader = new ProductionStateLoader(loaderFiles, "GeneratedInput/ProcessingTimeMatrix.csv");

            for (int i = 0; i < loader.DefaultScenariosInMemory.Count; i++)
            {
                var state = loader.LoadScenarioFromMemory(i);
                futureGenerator.MqbToMebTransitionProbability = probabilities[i];
                var seq = futureGenerator.GenerateSequence();
                state.FutureProductionPlan = new Queue <ItemState>(seq);
                state.SaveProductionState(folder, $"{suffix}{i}");
                Console.WriteLine($"Processed: {i}");
            }
        }
Example #3
0
        private static void GenerateNewScenariosWith100Items()
        {
            var historyGenerator = new ProductionHistoryGenerator(0.5)
            {
                ProbabilityOfStartingInMqbState = 0.5,
                SequenceLength = 64,
            };

            var futureGenerator = new FutureProductionPlanGenerator(0.5)
            {
                ProbabilityOfStartingInMqbState = 0.5,
                SequenceLength = 100
            };

            var loaderFiles = Directory.GetDirectories("InputFiles", "situation*")
                              .Select(Directory.GetFiles)
                              .Select(t =>
            {
                return(new ProductionScenarioPaths()
                {
                    FutureProductionListCsv = t.FirstOrDefault(s => s.Contains("Future")),
                    HistoricalProductionListCsv = t.FirstOrDefault(s => s.Contains("Historical")),
                    WarehouseInitialStateCsv = t.FirstOrDefault(s => s.Contains("Warehouse"))
                });
            })
                              .ToList();
            var loader             = new ProductionStateLoader(loaderFiles, "InputFiles/ProcessingTimeMatrix.csv");
            var prodStateGenerator = new ProductionStateGenerator(historyGenerator, futureGenerator, loader.TimeMatrix, 0.5, 0.5, 1.0);

            var logFile = File.CreateText("probability_log.txt");

            logFile.WriteLine("Id;ProbabilityOfStartingInMqbState;MqbToMebTransitionProbabilityHistory;MqbToMebTransitionProbabilityFuture;UniformProbabilityWeight;MqbDistanceWeight;MebDistanceWeight");
            int suffix = 1;

            for (int historyProb = 0; historyProb <= 10; historyProb++)
            {
                for (int futureProb = 0; futureProb <= 10; futureProb++)
                {
                    for (int warehouseCount = 0; warehouseCount < 10; warehouseCount++)
                    {
                        prodStateGenerator.ProductionHistoryGenerator.MqbToMebTransitionProbability    = historyProb / 10.0;
                        prodStateGenerator.FutureProductionPlanGenerator.MqbToMebTransitionProbability = futureProb / 10.0;
                        prodStateGenerator.UniformProbabilityWeight = prodStateGenerator.RandomGenerator.Next(0, 101) / 100.0;
                        prodStateGenerator.MebDistanceWeight        = prodStateGenerator.RandomGenerator.Next(0, 101) / 100.0;
                        prodStateGenerator.MqbDistanceWeight        = prodStateGenerator.RandomGenerator.Next(0, 101) / 100.0;
                        var state = prodStateGenerator.GenerateProductionState();
                        state.SaveProductionState("gen", suffix.ToString());
                        logFile.WriteLine($"{suffix};{prodStateGenerator.FutureProductionPlanGenerator.ProbabilityOfStartingInMqbState};{prodStateGenerator.ProductionHistoryGenerator.MqbToMebTransitionProbability};{prodStateGenerator.FutureProductionPlanGenerator.MqbToMebTransitionProbability};{prodStateGenerator.UniformProbabilityWeight};{prodStateGenerator.MqbDistanceWeight};{prodStateGenerator.MebDistanceWeight}");
                        suffix++;
                        Console.WriteLine($"Processed:{suffix}");
                    }
                }
            }
            logFile.Close();
        }
        public void TestFutureProductionPlanGenerator(double proba, int expected)
        {
            var generator = new FutureProductionPlanGenerator(proba)
            {
                ProbabilityOfStartingInMqbState = 1.0,
                SequenceLength = 100
            };

            var sequence = generator.GenerateSequence();

            Assert.AreEqual(expected, sequence.Count(t => t == ItemState.MQB));
        }