0

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=FALSE他们cash2empty=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.
                    }

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

4

2 回答 2

3

记录队列中的客户数量,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
}
于 2012-11-10T19:28:25.977 回答
3

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

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

于 2012-11-10T19:32:55.390 回答