【问题标题】:Fast food restaurant simulation : How to "queue" customers? [closed]快餐店模拟:如何“排队”顾客? [关闭]
【发布时间】:2012-10-30 18:38:46
【问题描述】:

A link to my PasteBin:http://pastebin.com/nzW3hZdT

我正在模拟一家三人以上的快餐店 小时。三个小时分为 18 个间隔,由 10 个 每分钟。

根据每分钟“r”个客户的到达率,“R”是 已确立的。 R 是所有 18 个概率的到达率 间隔(或多或少 r/60)。

此模拟的目的是我们自己定义“r”并查看 每个客户在所有 18 个间隔中的平均等待时间 (avgWait)。 通常,“r”越大,“avgWait”越大。

在我的代码(上面粘贴)中的这一点上,平均等待时间正在正确打印......对于一个客户。

假设第一个客户和第二个客户分别在收银员 1 和 2 接受订单大约需要 85 秒。在这 85 秒内,很可能会有更多客户到达,但由于 cash1empty=FALSEcash2empty=FALSE他们显然无法接受订单。

如何设置此队列,以便程序知道在前两个订单得到服务后还有其他几个等待服务?

代码摘录:

if ((cash1empty==TRUE)&&(cash2empty==TRUE))
                    {
                        switch((rand()%2))
                        {
                            case 0:
                                cash1empty=FALSE;
                                break;
                            case 1:
                                cash2empty=FALSE;
                                break;

                        }
                    }

                    if (cash1empty==TRUE)
                    {
                        cash1empty=FALSE;

                        switch((rand()%2))
                        {
                            case 0:
                                cash1salad=(rand()%(66-55)+55);
                                totalWait+=cash1salad;
                                break;
                            case 1:
                                cash1burger=(rand()%(131-111)+111);
                                totalWait+=cash1burger;
                                break;
                        }
                    }
                    else if (cash2empty=TRUE)
                    {
                        cash2empty=FALSE;

                        switch(rand()%2)
                        {
                            case 0:
                                cash2salad=(rand()%(76-65)+65);
                                totalWait+=cash2salad;
                                break;
                            case 1:
                                cash2burger=(rand()%(141-121)+121);
                                totalWait+=cash2burger;
                                break;
                        }
                    }
                    else
                    {
                        queue++; // ???
                        /// I DON'T KNOW WHAT I'M DOING.
                    }

对于给您带来的不便,我深表歉意,但我不能使用“结构”。数组是可以接受的!

【问题讨论】:

  • 比昨天的Restaurant Simulation 准备得更好。即便如此,请考虑在您的问题中粘贴相关的代码。

标签: c arrays loops queue simulation


【解决方案1】:

记录队列中的客户数量queuedCustomers。当每个新客户到达时添加一个(同时增加totalCustomer)。当您为客户提供服务时减去一个,即当您看到 cash1empty=FALSE;cash2empty=FALSE;

改变

            if (customerArrive>=x)
            {

                // A customer arrived during this second!
                totalCustomer++;

            if (customerArrive>=x)
            {

                // A customer arrived during this second!
                totalCustomer++;
                queuedCustomers++;
            }
            if (queuedCustomers > 0)
            {

补充:选择收银员...

而不是if ((cash1empty==TRUE)&&(cash2empty==TRUE))部分

做一些类似的事情:

cointoss = rand()%2

if ((cash1empty==TRUE) && ((cash2empty!=TRUE) || (cointoss == 1)))
{
    // use cashier 1
} 
else if (cash2empty==TRUE)
{
    // use cashier 2
} 
else
{
    // wait
}

【讨论】:

  • 哇,不错的选择!谢谢你。但是,通过在每个“FALSE”语句后添加 the queue--; 计数器,队列计数器在每个间隔后始终等于 0。这是故意的吗?此外,当我暂时注释掉减量时,排队的人数非常合理(例如,r 定义为每分钟 0.125 名客户......队列范围〜 1-4 人) 指向当前代码的链接:@ 987654321@
  • 当然,只有当您的两个收银员都很忙并且有新客户到来时,队列才会非零。您的代码中的问题:(1)您没有关闭我展示的if (customerArrive>=x); (2)“50/50 决定去哪里”代码是在不做任何工作的情况下设置cashNempty,(3)你永远不会将cashNempty 设置回1
  • (1) 对了,加进去了! (2) 我有这部分代码的原因是让程序帮助决定在两个收银员都打开的情况下客户将去哪个收银员(这将在 t=1 时发生 100% 的时间)。没有订单,我只是“关闭”其中一名收银员,因此程序不会总是强迫客户在模拟开始时去 1 号收银员。 (3) 这是项目成功的关键因素。它应该在客户完成订单后才下,但我如何告诉程序这个?
  • 假设收银员 1 的第一个订单需要 60 秒。如何在客户收到现金后 60 秒内编写程序以将 cash1empty==FALSE 更改为 cash1empty==TRUE
  • (2) 但是由于您从未将cashNempty 设置为1,这不好;你应该把这两个测试结合起来;见我的附录; (3) 您需要检查t 与收银员准备就绪的时间,并在此时间到期时将cashNempty 设置为1
【解决方案2】:

为什么不使用Queue?使用常规数组似乎不合理。使用队列,您可以使用Dequeue() 方法获取第一个客户并将其从队列中移除,然后您可以使用 [Enqueue()][3] 方法添加新客户。

你为什么要使用队列以外的任何东西?

【讨论】:

  • 讲师不打算让我们使用我们理解水平的结构。不幸的是,这超出了我的编程知识范围
猜你喜欢
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多