美容師の難問


11

私の美容院のステイシーはいつも幸せそうな顔をしていますが、彼女の時間を管理することについてしばしばストレスを感じています。今日、ステイシーは私の約束のために遅れ、非常に謝罪しました。私の散髪をしている間、私は疑問に思いました:彼女の標準的な予定はどれくらいの長さであるべきですか?(お客様がクリーンなラウンド数を好む場合は、しばらくの間無視できます)。

考慮すべきことは、特定の「波及効果」であり、非常に遅い顧客の1人が一連の遅延した予約につながる可能性があります。実際には、美容師は直感的に、これらのストレスの多い日々を恐れて、予定を長くすることを直感的に学びます。しかし、最適でエレガントなソリューションは、統計的な天才によって達成可能でなければなりません。(現実を少し落とす場合)

仮定しましょう

a)ヘアカット時間は通常分散され、

b)ヘアドレッサーは1つだけです。

予定を長く設定しすぎると、美容師が次の予定を待つ時間が無駄になることは明らかです。この無駄な時間は1分あたり1ドルかかります。

しかし、予定が十分に長くない場合、次の顧客は待たされ続けます。これは、顧客を愛するStaceyにとって、1分あたり3ドルのより重いコストです。

  • Staceyは1日あたり最大8時間働き、十分な数のアポイントメントを入力できる十分な需要があります。

  • 平均的なヘアカットは、標準で30分かかります。10分の開発。(男性のカットも女性のカットも同じであるとしましょう!)

編集-一部の人は、Staceyが指定された時間より前にEARLYの顧客に出席できることを正しく指摘しました。これにより、さらに複雑なレイヤーが追加されますが、これを非常に現実的な問題として扱う場合は、それを含める必要があります。私の90/10仮定を忘れて、おそらく少し現実に近い仮定を試してみましょう。

  • 遅れている顧客もいれば、早い顧客もいます。顧客の平均は2分遅れており、標準偏差は2分です(音は現実にかなり近いですか?)

正確にどのくらい彼女の予定が必要ですか?


@alexplanation申し訳ありませんが、ゴールポストを移動しました!Rの読者はあなたの答えに感謝していると思います。


2
彼女が予定より早く次のヘアカットを開始する能力を持っている場合、彼女はそうすることが許可されていませんか?
1

N(μ=8 hours,σ=40 minutes)

いくつかの情報が不足しています。1)早い時間の分布、または初期の顧客が予定された予約時間までStacyに費用をかけないという事実、および2)遅い時間の分布。たぶん、到着予定時刻に対する到着時刻の分布を指定するだけですか?
jbowman 2012年

また、アポイントメントが完了していない場合、8時間の終わりにはどうなりますか?彼女が仕事を続ける場合、予定されている予定の数に関係なく、最後の予定は最初の予定(1日の初め)から8時間後に予定する必要があります。
jbowman 2012年

回答:


13

この問題には可動部分が多く、シミュレーションに適しています。

最初に、Elvisがコメントで述べたように、Staceyはそれぞれ16分程度の予約を取る必要があるようです。しかし、アポイントメントが遅れ始めると、物事は次第にシフトし始めることを知っています-それで、ステイシーが残り30分である場合にのみアポイントメントを開始する場合(床から髪を掃くために多くのこと、ええ、ステイシー?)水晶玉を使用して休憩時間のない予定をスケジュールした場合、可能なスロットは16未満になります。

最適な間隔の散髪

次のシミュレーションでは、アポイントメントの長さの関数としてのコストの曲線を調査できます。もちろん、残りのパラメータもここで役割を果たすことになります-実際、ステイシーはほんの数分間隔で彼女の予定をスケジュールするつもりはありませんが、これは私たちに何が起こっているかについての直感を与えます。

ここに画像の説明を入力してください

また、Staceyが作業している時間を色としてプロットしました。私はステイシーが最後の約束を7:30以降にスケジュールしないことを決定しましたが、約束が遅れて表示されるか、遅れていることがあります!彼女が家に帰るまでの時間が量子化されていることがわかります。これにより、アポイントメントが長くなると、アポイントメントが1つ少なくなり、遅くなる必要がなくなります。そして、私はそれがここで欠けている要素だと思います-多分45分間隔であなたの予定をスケジュールすることは素晴らしいですが、あなたがそれを40に絞ることができるなら、あなたは追加の予定を得るでしょう。予定の長さが長くなるにつれて増加します)が、ステイシーの待機時間の評価は正しくない可能性があります。

とにかく、楽しい問題!そして、いくつかのggplotの良さを学び、私のR構文が非常に不安定であることを覚えるのに良い方法です。:)

私のコードは以下にあります-改善のための提案を提供してください。


上のプロットのコードを生成するには:

hairtime = 30
hairsd = 10

nSim = 1000
allCuts = rep(0,nSim)
allTime = rep(0,nSim)

for (i in 1:nSim) {
    t = 0
    ncuts = 0

    while (t < 7.5) {
        ncuts = ncuts+1
        nexthairtime = rnorm(1,hairtime,hairsd)
        t = t+(nexthairtime/60)
    }
    allCuts[i] = ncuts
    allTime[i] = t
}

hist(allCuts,main="Number of haircuts in an 8 hour day",xlab="Customers")

2番目のシミュレーションははるかに長くなります...

nSim = 100
allCuts = rep(0,nSim)
allTime = rep(0,nSim)

allCost = rep(0,nSim)

lateMean = 10
lateSD = 3

staceyWasted = 1
customerWasted = 3

allLengths = seq(30,60,0.25)

# Keep everything in 'long form' just to make our plotting lives easier later
allApptCosts = data.frame(matrix(ncol=3,nrow=length(allLengths)*nSim))
names(allApptCosts) <- c("Appt.Length","Cost","Time")
ind = 1

# for every appointment length...
for (a in 1:length(allLengths)) {
    apptlen = allLengths[a]
    # ...simulate the time, and the cost of cutting hair.
    for (i in 1:nSim) {
        appts = seq(from=0,to=(8-hairtime/60),by=apptlen/60)
        t = 0
        cost = 0
        ncuts = 0

        for (a in 1:length(appts)) {
            customerArrival = appts[a]
            # late!            
            if (runif(1)>0.9) {
                customerArrival = appts[a]+rnorm(1,lateMean,lateSD)/60
            }

            waitTime = t-customerArrival
            # negative waitTime means the customer arrives late
            cost = cost+max(waitTime,0)*customerWasted+abs(min(waitTime,0))*staceyWasted
                                        # get the haircut
            nexthairtime = rnorm(1,hairtime,hairsd)
            t = customerArrival+(nexthairtime/60)
        }
        allCost[i] = cost
        allApptCosts[ind,1] = apptlen
        allApptCosts[ind,2] = cost
        allApptCosts[ind,3] = t
        ind = ind+1
    }
}

qplot(Appt.Length,Cost,geom=c("point"),alpha=I(0.75),color=Time,data=allApptCosts,xlab="Appointment Length (minutes)",ylab="Cost")+
      geom_smooth(color="black",size=2)+
    opts(axis.title.x=theme_text(size=16))+
    opts(axis.title.y=theme_text(size=16))+
    opts(axis.text.x=theme_text(size=14))+
    opts(axis.text.y=theme_text(size=14))+
    opts(legend.text=theme_text(size=12))+
    opts(legend.title=theme_text(size=12,hjust=-.2))

1
いいね!コードの表示に反対しますか?
Elvis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.