public static void WriteInstanceToFile(FlowlineConfiguration flc, string path)
        {
            var lines = new List <string>();

            void AddLine(int v)
            {
                lines.Add(v.ToString());
            }

            void AddLineF(float v)
            {
                lines.Add(v.ToString(CultureInfo.InvariantCulture));
            }

            AddLineF(flc.RequiredRelativeMarginOfError);
            AddLine(flc.NumMachines);
            AddLine(flc.NumBuffers);
            AddLine(flc.MilkRunCycleLength);

            for (var i = 0; i < flc.NumMachines; i++)
            {
                lines.Add(MachineToLine(flc.Machines[i]));
            }

            for (var i = 0; i < flc.NumBuffers; i++)
            {
                lines.Add(BufferToLine(flc.Buffers[i]));
            }

            lines.Add("\n0\n");

            File.WriteAllLines(path, lines);
        }
Beispiel #2
0
 public BaseEvaluator(MilkrunBufferAllocationProblem problem)
 {
     Flc = InstanceGenerator.Generate(1);
     for (var i = 0; i < Flc.NumMachines; i++)
     {
         Flc.Machines[i].ProcessingRate = problem.ProcessingRates[i];
     }
 }
        private static Sample SampleForLineWithRate(FlowlineConfiguration flc, float rate)
        {
            var sample = new Sample {
                BufferSizes        = flc.Buffers.Select(buf => buf.Size).ToList(),
                ProcessingRates    = flc.Machines.Select(machine => machine.ProcessingRate).ToList(),
                OrderUpToLevels    = flc.Machines.Select(machine => machine.OrderUpToMilkLevel).ToList(),
                MilkrunCycleLength = flc.MilkRunCycleLength,
                ProductionRate     = rate
            };

            return(sample);
        }
Beispiel #4
0
        public static float ProductionRateForConfiguration(FlowlineConfiguration flc)
        {
            var tmpFilenameBase = $"temp_hash_{flc.GetHashCode()}";

            InstanceWriter.WriteInstanceToFile(flc, tmpFilenameBase + ".mrn");
            RunSimulationExecutable(tmpFilenameBase);
            var productionRate = ResultParser.ProductionRateFromResultFile(tmpFilenameBase + ".stb");
            var extensions     = new List <string> {
                ".mrn", ".stb"
            };

            extensions.ForEach(ext => RetryDelete(tmpFilenameBase + ext));
            return(productionRate);
        }
Beispiel #5
0
        public static FlowlineConfiguration ReadInstanceFromFile(string path)
        {
            var lines = File.ReadAllLines(path);

            void FillWithFloatFromLine(out float field, int lineIx)
            {
                field = float.Parse(lines[lineIx]);
            }

            void FillWithIntFromLine(out int field, int lineIx)
            {
                field = int.Parse(lines[lineIx]);
            }

            var flc = new FlowlineConfiguration();

            // Global data
            FillWithFloatFromLine(out flc.RequiredRelativeMarginOfError, 0);
            FillWithIntFromLine(out flc.NumMachines, 1);
            FillWithIntFromLine(out flc.NumBuffers, 2);
            FillWithIntFromLine(out flc.MilkRunCycleLength, 3);

            // Machine related
            flc.Machines = new List <Machine>();
            const int firstMachineLineIx = 4;

            for (var i = 0; i < flc.NumMachines; i++)
            {
                var lineIx = firstMachineLineIx + i;
                var parts  = lines[lineIx].Split(" ", StringSplitOptions.RemoveEmptyEntries);
                flc.Machines.Add(MachineFromParts(parts));
            }

            // Buffer related
            flc.Buffers = new List <Buffer>();
            var firstBufferLineIx = firstMachineLineIx + flc.NumMachines;

            for (var i = 0; i < flc.NumBuffers; i++)
            {
                var lineIx = firstBufferLineIx + i;
                var parts  = lines[lineIx].Split(" ", StringSplitOptions.RemoveEmptyEntries);
                flc.Buffers.Add(BufferFromParts(parts));
            }

            return(flc);
        }
        public static FlowlineConfiguration Generate(int seed)
        {
            var rand = new Random(seed);

            var flc = new FlowlineConfiguration {
                RequiredRelativeMarginOfError = 0.005f,
                NumMachines = 4,
                NumBuffers  = 3,
                // add 1 since Random.Next the ub is non inclusive!
                MilkRunCycleLength = rand.Next(30, 120 + 1)
            };

            var variationMue = Utils.Uniform(rand, 0.0f, 0.2f);

            Machine GenerateMachine(int i)
            {
                return(Machine.ConstructDefaultMachine(
                           Utils.Uniform(rand, 1.0f - variationMue, 1.0f + variationMue),
                           (int)Math.Round(Utils.Uniform(rand, 0.5f, 1.5f) * flc.MilkRunCycleLength)));
            }

            var bufferMean   = Utils.Uniform(rand, 0.0f, 40.0f);
            var bufferFactor = (float)rand.NextDouble();

            Buffer GenerateBuffer(int i)
            {
                return(Buffer.ConstructDefaultBuffer(
                           (int)Math.Round(Utils.Uniform(rand, bufferMean * (1 - bufferFactor),
                                                         bufferMean * (1 + bufferFactor))), i));
            }

            flc.Machines = Enumerable.Range(0, flc.NumMachines).Select(GenerateMachine).ToList();
            flc.Buffers  = Enumerable.Range(0, flc.NumBuffers).Select(GenerateBuffer).ToList();

            return(flc);
        }
 public static void ToJson(FlowlineConfiguration flc, string path)
 {
     Utils.SaveObjectAsJson(flc, path);
 }
Beispiel #8
0
 public float PredictConfig(FlowlineConfiguration config)
 {
     return(Predict(config.ToSample()));
 }