コード例 #1
0
ファイル: KanbanControl.cs プロジェクト: sdwfrost/SimSharp
 public void Simulate(int rseed = 42)
 {
     completedOrders = 0;
     env             = new Simulation(randomSeed: rseed);
     env.Log("== Kanban controlled production system ==");
     kanban = new Resource(env, capacity: 15);
     server = new Resource(env, capacity: 1);
     // In this sample stockStat is tracked manually in the process
     // it would also possible to track kanban's utilization and obtain
     // the stock as capacity * (1 - util.mean)
     stockStat = new TimeSeriesMonitor(env, name: "Kanbans in stock", collect: true);
     env.Process(Source());
     env.Run(TimeSpan.FromDays(180));
     Console.WriteLine("Kanbans in stock: {0} ; {1:F1}±{2:F1} ; {3} (Min;Mean±StdDev;Max) kanbans ", stockStat.Min, stockStat.Mean, stockStat.StdDev, stockStat.Max);
     Console.WriteLine("Produced kanbans: {0:N0}", completedOrders);
     Console.WriteLine(stockStat.Summarize(binWidth: 1));
 }
コード例 #2
0
ファイル: MM1Queueing.cs プロジェクト: sdwfrost/SimSharp
        public void Simulate(int repetitions = 5)
        {
            var lambda              = 1 / OrderArrivalTime.TotalDays;
            var mu                  = 1 / ProcessingTime.TotalDays;
            var rho                 = lambda / mu;
            var analyticWIP         = rho / (1 - rho);
            var analyticLeadtime    = 1 / (mu - lambda);
            var analyticWaitingtime = rho / (mu - lambda);

            var env         = new Simulation(randomSeed: 1, defaultStep: TimeSpan.FromDays(1));
            var utilization = new TimeSeriesMonitor(env, name: "Utilization");
            var wip         = new TimeSeriesMonitor(env, name: "WIP", collect: true);
            var leadtime    = new SampleMonitor(name: "Lead time", collect: true);
            var waitingtime = new SampleMonitor(name: "Waiting time", collect: true);

            env.Log("Analytical results of this system:");
            env.Log("Time\tUtilization.Mean\tWIP.Mean\tLeadtime.Mean\tWaitingTime.Mean");
            env.Log("{4}\t{0}\t{1}\t{2}\t{3}", rho, analyticWIP, analyticLeadtime, analyticWaitingtime, double.PositiveInfinity);
            env.Log("");

            // example to create a running report of these measures every simulated week
            //var report = Report.CreateBuilder(env)
            //  .Add("Utilization", utilization, Report.Measures.Mean | Report.Measures.StdDev)
            //  .Add("WIP", wip, Report.Measures.Min | Report.Measures.Mean | Report.Measures.Max)
            //  .Add("Leadtime", leadtime, Report.Measures.Min | Report.Measures.Mean | Report.Measures.Max)
            //  .Add("WaitingTime", waitingtime, Report.Measures.Min | Report.Measures.Mean | Report.Measures.Max)
            //  .SetOutput(env.Logger) // use a "new StreamWriter("report.csv")" to direct to a file
            //  .SetSeparator("\t")
            //  .SetPeriodicUpdate(TimeSpan.FromDays(7), withHeaders: true)
            //  .Build();

            var summary = Report.CreateBuilder(env)
                          .Add("Utilization", utilization, Report.Measures.Mean)
                          .Add("WIP", wip, Report.Measures.Mean)
                          .Add("Leadtime", leadtime, Report.Measures.Mean)
                          .Add("WaitingTime", waitingtime, Report.Measures.Mean)
                          .SetOutput(env.Logger)
                          .SetSeparator("\t")
                          .SetFinalUpdate(withHeaders: false) // creates a summary of the means at the end
                          .SetTimeAPI(useDApi: true)
                          .Build();

            env.Log("Simulated results of this system (" + repetitions + " repetitions):");
            env.Log("");
            summary.WriteHeader(); // write the header just once

            for (var i = 0; i < repetitions; i++)
            {
                env.Reset(i + 1);    // reset environment
                utilization.Reset(); // reset monitors
                wip.Reset();
                leadtime.Reset();
                waitingtime.Reset();
                var server = new Resource(env, capacity: 1)
                {
                    Utilization = utilization,
                    WIP         = wip,
                    LeadTime    = leadtime,
                    WaitingTime = waitingtime,
                };

                env.Process(Source(env, server));
                env.Process(HandleWarmup(env, TimeSpan.FromDays(32), utilization, wip, leadtime, waitingtime));
                env.Run(TimeSpan.FromDays(365));
            }

            env.Log("");
            env.Log("Detailed results from the last run:");
            env.Log("");
            env.Log(utilization.Summarize());
            env.Log(wip.Summarize(maxBins: 10, binWidth: 2));
            env.Log(leadtime.Summarize(maxBins: 10, binWidth: 5 / 1440.0));
            env.Log(waitingtime.Summarize(maxBins: 10, binWidth: 4 / 1440.0));;
        }