-1

ファーストフード店でサラダとハンバーガーを販売しているとします。キャッシャーは2つあります。レジ係 1 では、サラダの注文を完了するのにかかる秒数は、{55,56,...,64,65} に均一に分布しています。ハンバーガーの注文を完了するのにかかる秒数は、{111,112,...,129,130​​} で一様に分布しています。レジ 2 では、サラダの注文を完了するのにかかる秒数は、{65,66,...,74,75} に均一に分布しています。ハンバーガーの注文を完了するのにかかる秒数は、{121,122,...,139,140} で一様に分布しています。顧客がランダムな時間に到着するが、1 分あたりの平均到着率が r 顧客であると仮定します。

2 つの異なるシナリオを考えてみましょう。

• 顧客はサービスのために 1 列に並び、2 人のレジのどちらかが空いている場合、列の最初の顧客がレジに行き、サービスを受けます。このシナリオでは、顧客がレストランに到着すると、列がなければサービスを受けるか、列の最後で待機します。

• 顧客はレジ係にそれぞれ 2 列に並んで待ちます。列の最初の顧客は、その列のレジ係が利用可能になった場合にのみ、サービスを受けます。このシナリオでは、顧客がレストランに到着すると、短い方の列に加わります。また、お客様が列に並んでいる場合、他の列が短くなったり、他のレジ係が空いたときに、他のレジ係に移動したり、他のレジ係に移動したりしないという条件を課しています。

考慮された両方のシナリオで、レジ係は、現在サービスを提供している顧客が注文した食品を受け取ったときにのみ、次の顧客にサービスを提供し始めます。(ここを「お客様の注文完了」と呼んでいます。)

... シミュレーション

2 つのシナリオのそれぞれと r のいくつかの選択肢 (後の説明を参照) について、3 時間、つまり時刻 0 から時刻 180 分にわたって顧客が到着/待機/サービスを受ける状況をシミュレートします。時間 0 で待っている顧客はおらず、両方のレジ係が対応可能です。3 時間の全期間は、それぞれ 1 秒のタイムスロットに分割されます。各時間枠で、r/60 の確率で 1 人の新しい顧客を到着させ、1 − r/60 の確率で新しい顧客を到着させません。これにより、r 顧客/分の平均顧客到着率が発生し、到着モデルは上記のモデルにかなり近くなります。各タイムスロットで、プログラムが必要なものを処理するようにします。

... 目的と成果物

以下を調査するためのプログラムを作成する必要があります。2 つのシナリオのそれぞれと r ごとに、3 時間のシミュレートされた期間を 10 分間の期間に分割し、期間 i (i ∈ {1,2,...,18}) に到着するすべての顧客を対象とします。 、顧客の全体的な待ち時間 (つまり、顧客がレストランに到着してから注文が完了するまでの時間) を計算します。各 i について、期間 i に到着する顧客の平均待ち時間を出力する必要があります。期間 i に到着した顧客が 3 時間のシミュレートされた期間内にサービスを受けていない場合, 彼の待ち時間は不明です. したがって, この期間に到着した顧客の平均待ち時間は計算できません. その場合, 単純に “notその期間の平均待ち時間として。

したがって、このプログラムは時間、分、および秒を扱います。

次のように 3 次元配列を作成するのが最善でしょうか。

time[3][60][60]

60分以内、60秒以内の計3時間。

あるいは、次の構造の「for ループ」を作成する必要があると考えていました。

for (time=0;t<10800;t++)

このループの各反復は、3 時間のシミュレーションの 1 秒を表します (3hx60m60s=10800 秒)。

私はここで正しい軌道に乗っていますか?どちらの方法がもっともらしい。このプログラムにとって重要な他のアレイはありますか?

いつものように、助けていただければ幸いです。

4

1 に答える 1

1

ほとんどの場合、時間の内部表現を秒単位にするのが最善です。3 次元配列を使用するよりも for ループを使用する方がはるかに簡単です。1 つの良い規則は、次のように書くことです。

MAX_SECONDS = 3 * 60 * 60
for (t=0;t<MAX_SECONDS;t++)

このプロジェクトで調べるデータ構造は、適切にはキューです。これは配列を使用して実装できますが、追加の作業が必要になります。

于 2012-11-09T20:03:22.950 に答える