0

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

私は3時間かけてファーストフード店をシミュレートしているところです。3時間は、それぞれ10分からなる18の間隔に分割されます。

1分あたりの「r」顧客の到着率に基づいて、「R」が確立されます。Rは、確率による、18の間隔すべての到着率です(多かれ少なかれr / 60です)。

このシミュレーションの目的は、「r」を自分で定義し、18の間隔すべてにおける各顧客の平均待機時間(avgWait)を確認することです。一般に、「r」が大きいほど、「avgWait」も大きくなります。

私のコード(上に貼り付けた)のこの時点で、平均待機時間は適切に印刷されています...1人の顧客の場合。

1番目と2番目の顧客がそれぞれキャッシャー1と2で注文を受け取るのに、約85秒かかるとします。この85秒の間に、より多くの顧客が到着した可能性が高いですが、それ以降cash1empty=FALSEcash2empty=FALSE明らかに注文を受け取ることができません。 。

このキューを設定して、最初の2つの注文が処理された後、処理されるのを待っている他の人が何人かいることをプログラムが認識できるようにするにはどうすればよいですか?

コードの抜粋:

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。新しい顧客が到着するたびに 1 つ追加します (同時に を増やします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)
            {

補遺 re: レジ係の選択...

セクションの代わりに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を使用しないのはなぜですか? 通常の配列の使用は不当に思えます。Queue では、Dequeue()メソッドを使用して最初の顧客を取得してキューから削除し、[Enqueue()][3] メソッドで新しい顧客を追加します。

なぜキュー以外のものを使用するのですか?

于 2012-11-10T19:32:55.390 に答える