質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.35%

【求む】待ち時間の計算方法

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 3,020

nobuzoh

score 160

とあるショップの待ち時間の計算をどうしたものかと悩んでいます。

ショップの開店から閉店までの時間を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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

check解決した方法

0

統計の使い方が分からないので、完全ランダムでやりました。
具体的には、私が書いたアルゴリズムの2番のところを、
・30分を1分毎に区切り、そこにその時間の人数をランダムで割り振る
・その割り振った状態における、待ち時間の、最小、最大、平均、繰越時間を算出する(算出方法へ)
・上記を1000回試行して、平均的な、最小、最大、平均、繰越時間を算出する
という具合で、それらしいデータがだせました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

2.そこに来店者数を散りばめるパターンを全パターンつくる

ここにちょっと引っかかります。ポアソン分布に従うんじゃないかしら。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/27 17:08

    ごめんなさい、PHPはわからんです。以下のページが参考になるのかしら?
    http://php.net/manual/ja/function.stats-cdf-poisson.php

    キャンセル

  • 2016/05/27 17:49

    すみません、イメージがつかめないので、
    たとえば30分間に10人来るとした場合に、
    各分にはどのように分布するものなのでしょうか?

    キャンセル

  • 2016/05/27 19:45

    1分あたり平均0.333人となる分布ですけど。

    キャンセル

0

こんにちは。

待ち行列の待ち時間は一般的な問題なので、一般解がありそうな気がしてググってみたらあるようです。
サルでも分かる待ち行列毎回忘れる-平均サービス待ち時間の計算式はわかりやすそうです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/27 18:27

    ただ、平均値だけではデータとして弱く、
    質問の考察にもあるように平均的な最小値、最大値も欲しいと考えています。
    そうして大体これからこれくらいというのを知りたいです。
    平均値って往々にして実感とは異なるものだと思うんですよ。

    キャンセル

  • 2016/05/27 19:07

    30分間にランダムに3人を割当て待ち時間を計算するプログラムを作ってみて、
    1000回試行、10000回試行などして試してみたのですが、
    最大待ち時間=14分(3人が同時に来たらそうですね)
    最大値の平均=4分
    平均値の平均=2分
    という結果になりました。
    この結果の妥当性なんですよねぇ・・・。

    キャンセル

  • 2016/05/27 19:07 編集

    稼働率が100%でない限り、最短の待ち時間は0と思います。
    最長の待ち時間は確率的に発生するので、標準偏差のような値で表現することになると思います。

    σを計算できれば+2σの範囲に入る確率は97.5%(40人に1人はこれ以上待つ)だそうですので、最大待ち時間の期待値として採用するのもありかも? でも、99.87%(1,000人に1人強はこれ以上待つ)程度まで確実な値とするなら+3σ取る必要が有ります。
    しかし、すいません。σの計算方法を見つけることはできませんでした。

    【追記】
    コメントが前後しちゃいました。

    > この結果の妥当性なんですよねぇ・・・。

    統計理論は前提が正しければ答えも正しいです。同じ前提から出発して結果が異なる場合、恐らく、統計の方がより現実に近いだろうと思います。

    【更に追記】
    分かりました。
    30分に3人というのは上限ではなく平均ですよね?
    であれば、30分間に4人、5人くることもあるので待ち時間は伸びます。
    1人や2人しか来ない時もありますが、待ち時間は0以下にならないので打ち消されないです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る