public static void AddWorkStations(ToyFab toyFab, ToyFabSettings toyFabSettings, Simulation sim) { // Observers LotOutObserver LotOutObserver = new LotOutObserver(sim, "LotOutObserver"); RewardObserver RewardObserver = new RewardObserver(sim, "RewardObserver", Program.WSWithRLDispatcher); toyFab.Subscribe(RewardObserver); // Work stations foreach (string wc in toyFabSettings.WorkStations) { WorkStation workStation = new WorkStation(toyFab, $"WorkCenter_{wc}", toyFabSettings.LotStepsPerWorkStation[wc]); workStation.DispatcherWarmUp = new FIFODispatcher(workStation, workStation.Name + "_FIFODispatcher"); workStation.Dispatcher = new FIFODispatcher(workStation, workStation.Name + "_FIFODispatcher"); QueueObserver queueObserver = new QueueObserver(sim, $"Queue_{wc}"); workStation.Subscribe(queueObserver); // Machines foreach (MachineData m in toyFabSettings.Machines.Where(x => x.WorkStation == wc)) { Machine machine = new Machine(toyFab, $"{workStation.Name}_Machine{m.Number}", new GammaDistribution(m.MeanServiceTime, Math.Pow(m.COVServiceTime * m.MeanServiceTime, 2)), workStation, m.Number); //Machine machine = new Machine(toyFab, $"{workStation.Name}_Machine{m.Number}", new NonNegativeNormalDistribution(m.MeanServiceTime, m.COVServiceTime * m.MeanServiceTime), workStation, m.Number); //Machine machine = new Machine(toyFab, $"{workStation.Name}_Machine{m.Number}", new ExponentialDistribution(1 / m.MeanServiceTime), workStation, m.Number); machine.Eligibilities = m.Eligibilities; machine.Subscribe(LotOutObserver); workStation.Machines.Add(machine); } toyFab.AddWorkCenter(workStation.Name, workStation); } }
public override void BuildTrainingEnvironment() { string inputDir = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\..\..\", "Parameters", Program.ParametersDirectory)); string outputDir = @"C:\CSSLWaferFab\Output\RLToyFab\"; Simulation = new RLSimulation("RLToyFab", outputDir); // Fab settings //IDataReader reader = new DataReader1(inputDir); IDataReader reader = new DataReader2(inputDir); ToyFabSettings toyFabSettings = reader.ReadToyFabSettings(); // Build the model toyFab = new ToyFab(Simulation.MyModel, "ToyFab", this) { LotSteps = toyFabSettings.LotSteps, }; LotOutObserver LotOutObserver = new LotOutObserver(Simulation, "LotOutObserver"); // Work stations foreach (string wc in toyFabSettings.WorkStations) { WorkStation workStation = new WorkStation(toyFab, $"WorkCenter_{wc}", toyFabSettings.LotStepsPerWorkStation[wc]); workStation.DispatcherWarmUp = new FIFODispatcher(workStation, workStation.Name + "_FIFODispatcher"); if (wc == Program.WSWithRLDispatcher || Program.WSWithRLDispatcher == "") { workStation.Dispatcher = new RLDispatcherDeductedActionSpace(workStation, workStation.Name + "_RLDispatcher", this, Program.TimePerDispatchTrigger); } else { workStation.Dispatcher = new FIFODispatcher(workStation, workStation.Name + "_FIFODispatcher"); } // Machines foreach (MachineData m in toyFabSettings.Machines.Where(x => x.WorkStation == wc)) { Machine machine = new Machine(toyFab, $"{workStation.Name}_Machine{m.Number}", new GammaDistribution(m.MeanServiceTime, Math.Pow(m.COVServiceTime * m.MeanServiceTime, 2)), workStation, m.Number); machine.Eligibilities = m.Eligibilities; workStation.Machines.Add(machine); machine.Subscribe(LotOutObserver); } toyFab.AddWorkCenter(workStation.Name, workStation); } foreach (var sequence in toyFabSettings.Sequences) { toyFab.AddSequence(sequence.Key, sequence.Value); } toyFab.SetLotGenerator(new LotGenerator(toyFab, "LotGenerator", Program.NumberOfLots)); }
public static void RunNormalSimulation() { string inputDir = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\..\..\", "Parameters", ParametersDirectory)); string outputDir = @"C:\CSSLWaferFab\Output\RLToyFab\"; CSSL.Modeling.Settings.WriteOutput = true; // Fab settings //IDataReader reader = new DataReader1(inputDir); IDataReader reader = new DataReader2(inputDir); ToyFabSettings toyFabSettings = reader.ReadToyFabSettings(); // Build Fab Simulation sim = new Simulation("RLToyFab", outputDir); // Experiment settings sim.MyExperiment.NumberOfReplications = 10; sim.MyExperiment.LengthOfWarmUp = LengthOfWarmUp; sim.MyExperiment.LengthOfReplication = LengthOfReplication; // Build the model ToyFab toyFab = new ToyFab(sim.MyModel, "WaferFab") { LotSteps = toyFabSettings.LotSteps, LengthOfWarmUp = LengthOfWarmUp }; AddWorkStations(toyFab, toyFabSettings, sim); foreach (var sequence in toyFabSettings.Sequences) { toyFab.AddSequence(sequence.Key, sequence.Value); } toyFab.SetLotGenerator(new LotGenerator(toyFab, "LotGenerator", NumberOfLots)); sim.Run(); // Report summary SimulationReporter reporter = sim.MakeSimulationReporter(); reporter.PrintSummaryToFile(); reporter.PrintSummaryToConsole(); }