とあるショップの待ち時間の計算をどうしたものかと悩んでいます。
ショップの開店から閉店までの時間を30分で区切って、
その間に来店した顧客の人数を2年間貯めたものがデータとしてあります。
受付(来店)から支払い(退店)までの時間は一応あるのですが、
退店後しばらく経ってからデータを入力するケースがあるため当てになりません。
(当てになるのならこの件は終了ですね)
ここで、
「ざっくり」と1人が受付て支払いをするまでの時間を7分とし、
一人ずつ処理するため複数人が並列になることはない(キューってやつです)、
待ち時間が60分を越えたら「とても待つ」という表現にする、という条件で
各時間帯の待ち時間というものはどう計算したら良いものでしょうか?
私が考えているところでは、
・30分間、1人辺り7分だから、5人来店があると30分を越えるので次の30分間に繰り越しになる。
・つまり期間中に来店した人全員が要する時間は、a=繰越時間(分)、b=来店社数とすると、
a+7b分ということになる。
・待ち時間と言っても、最短、平均、最長があるはず。
・30分間の来店客の分布の仕方によって待ち時間は変動する。
・分布による待ち時間の変動も、(平均の)最短、平均、最長の3つに絞る。
・上記を踏まえ9通りのデータをプログラミングで算出したい。
といったところです。
ここまでで、質問しようと考えをまとめていたら
私なりに閃いたのでそのアルゴリズムを記述します。
1.30分を1分ごとに区切る
2.そこに来店者数を散りばめるパターンを全パターンつくる
3.各パターンで待ち時間の最短・平均・最長を算出する。
4.算出方法
a.1~30までを繰り返しながら、
b.待ち時間を0を限度にカウントダウン
c.来店者がいたらその時点の待ち時間をその来店者の待ち時間とする
d.待ち時間に7をカウントアップ
e.来店者が他にもいたらc,dを行う
f.来店者がいなかったら次の1分に進む
g.30分まで終わったら、そのパターンの待ち時間の最短、平均、最長、繰越時間を算出
h.繰越時間は期間中に1人しかいない場合でも6分以内の時間がありえる。
これを考慮すると試行パターンが多くなってしまうので、
単純値(例えば8人だったら8×7-30=26)を次に繰り越す。
(または、最後の人が来た時間とその人の待ち時間から算出した繰越時間の平均値とするか?)
i.次のパターンでa~hを行う。
5.各時間・各パターンの最短・平均・最長の平均を尺度に、全パターンの平均の最短・平均・最長の3パターンを取り出す
といった感じです。
スマートではない力技な感はありますが、
これでも一応はできるのかな、と思います。
他に良いアイデアはありませんでしょうか?
ちなみに、PHPで計算してその結果をデータベースに入れ込もうとしています。
ですからPHPの関数を使うことも可能です。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
統計の使い方が分からないので、完全ランダムでやりました。
具体的には、私が書いたアルゴリズムの2番のところを、
・30分を1分毎に区切り、そこにその時間の人数をランダムで割り振る
・その割り振った状態における、待ち時間の、最小、最大、平均、繰越時間を算出する(算出方法へ)
・上記を1000回試行して、平均的な、最小、最大、平均、繰越時間を算出する
という具合で、それらしいデータがだせました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
2.そこに来店者数を散りばめるパターンを全パターンつくる
ここにちょっと引っかかります。ポアソン分布に従うんじゃないかしら。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
こんにちは。
待ち行列の待ち時間は一般的な問題なので、一般解がありそうな気がしてググってみたらあるようです。
サルでも分かる待ち行列や毎回忘れる-平均サービス待ち時間の計算式はわかりやすそうです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる