Teka-teki seorang penata rambut

11

Penata rambut saya, Stacey, selalu menunjukkan wajah yang bahagia, tetapi sering merasa stres mengatur waktu. Hari ini Stacey sudah terlambat karena pengangkatan saya dan sangat menyesal. Saat memotong rambut saya, saya bertanya-tanya: Berapa lama janji standarnya? (jika preferensi pelanggan untuk angka bulat bersih dapat diabaikan, untuk sesaat).

Sesuatu yang perlu dipertimbangkan adalah 'efek riak' tertentu di mana satu pelanggan yang sangat terlambat dapat menyebabkan serangkaian janji tunda. Pada kenyataannya, penata rambut secara intuitif belajar membuat janji temu lebih lama dan lebih lama karena mereka takut akan hari-hari yang penuh tekanan ini. Tetapi solusi yang optimal dan elegan harus dapat dicapai oleh beberapa jenius statistik di luar sana .. (jika kita sedikit meredam kenyataan)

Mari kita asumsikan

a) waktu pemotongan rambut biasanya didistribusikan dan

b) hanya ada satu penata rambut.

Biaya pengaturan janji terlalu lama jelas waktu penata rambut terbuang sia-sia untuk menunggu janji berikutnya. Mari kita habiskan waktu ini $ 1 per menit.

Tetapi jika janji temu tidak cukup lama, pelanggan berikutnya tetap menunggu, yang merupakan biaya lebih tinggi $ 3 per menit untuk pelanggan yang menyukai pelanggan Stacey.

  • Stacey bekerja hingga 8 jam per hari, dan memiliki cukup banyak permintaan sehingga dia bisa memenuhi janji sebanyak yang dia bisa

  • Potongan rambut rata-rata membutuhkan waktu 30 menit, dengan std. dev 10 menit. (Anggap saja luka pria dan luka wanita sama!)

EDIT - beberapa benar menunjukkan bahwa Stacey dapat melayani pelanggan AWAL sebelum waktu yang ditentukan. Ini menambahkan lapisan kerumitan lain, tetapi jika kita memperlakukan ini sebagai masalah yang cukup realistis, kita perlu memasukkannya. Mari kita lupakan asumsi 90/10 saya dan mencoba asumsi mungkin sedikit lebih dekat dengan kenyataan.

  • Beberapa pelanggan terlambat dan ada yang lebih awal. Rata-rata pelanggan terlambat 2 menit dengan standar deviasi 2 menit (kedengarannya cukup dekat kenyataan tidak?)

Berapa lama tepatnya janji temu itu?


@alexplanation, maaf, saya telah memindahkan pos tujuan pada Anda! Saya yakin pembaca R menghargai jawaban Anda.

Nick
sumber
2
jika dia memiliki kemampuan untuk memulai potongan rambut berikutnya lebih awal dari yang dijadwalkan, dia tidak diizinkan melakukannya?
Diasumsikan normal
Sebagai aturan praktis, Stacey harus mencari 16 janji ... mari kita mulai dengan nilai ini: 16 janji. Mempertimbangkan model Anda, total waktu yang dihabiskan untuk memotong rambut adalah . Jadi pada akhir hari ia dapat dengan mudah lebih dari 30 menit terlambat, yaitu satu shift oleh satu janji. Mungkin pemodelannya agak tidak realistis? Potongan rambut dapat dipercepat sedikit ketika Anda terlambat ... Saya tidak tahu apa-apa tentang teori antrian. Saya pikir ini adalah jenis masalah yang mereka tangani ...N(μ=8 hours,σ=40 minutes)
Elvis
Anda kehilangan beberapa informasi. 1) distribusi waktu awal ATAU kenyataan bahwa pelanggan awal tidak menimbulkan biaya apa pun pada Stacy sampai waktu janji temu yang dijadwalkan, dan 2) Distribusi waktu terlambat. Mungkin Anda harus menentukan distribusi waktu kedatangan relatif terhadap waktu kedatangan yang dijadwalkan?
jbowman
Juga, apa yang terjadi pada akhir delapan jam jika dia tidak selesai dengan janji? Jika dia terus bekerja, jelas janji terakhir harus dijadwalkan selama 8 jam setelah yang pertama (yang akan di awal hari), terlepas dari berapa banyak janji yang dijadwalkan.
jbowman

Jawaban:

13

Ada banyak bagian yang bergerak dalam masalah ini, yang membuatnya matang untuk simulasi.

Pertama, seperti yang disebutkan Elvis dalam komentar, sepertinya Stacey harus mengambil sekitar 16 janji, karena masing-masing sekitar setengah jam. Tetapi Anda tahu bahwa ketika janji temu mulai tertunda, segala sesuatunya mulai bergeser lambat dan lambat - jadi jika Stacey hanya akan memulai janji jika dia memiliki waktu setengah jam lagi (begitu banyak untuk menyapu rambut dari lantai, eh, Stacey ?) maka kita akan memiliki kurang dari 16 slot yang memungkinkan, jika kita menggunakan bola kristal untuk menjadwalkan janji tanpa waktu istirahat.

Potongan rambut dengan jarak optimal

Dalam simulasi berikutnya, kita dapat menyelidiki kurva biaya sebagai fungsi dari panjang janji temu. Tentu saja, parameter lainnya juga akan berakhir memainkan peran di sini - dan pada kenyataannya, Stacey tidak akan menjadwalkan janji temu dengannya terpisah beberapa menit, tetapi ini memberi kita beberapa intuisi tentang apa yang terjadi.

masukkan deskripsi gambar di sini

Saya juga merencanakan waktu dimana Stacey harus bekerja sebagai warna. Saya memutuskan bahwa Stacey tidak akan pernah menjadwalkan pertemuan terakhirnya setelah jam 7:30, tetapi kadang-kadang janji itu muncul terlambat, atau ada penundaan! Anda dapat melihat bahwa waktu dia pulang ke rumah dikuantisasi, sehingga saat janji temu lebih lama, Anda mendapat satu janji yang lebih sedikit dan kemudian tidak harus bekerja selambat-lambatnya. Dan saya pikir itu adalah elemen yang hilang di sini - mungkin menjadwalkan janji temu Anda 45 menit terpisah itu bagus, tetapi Anda akan mendapatkan janji temu tambahan jika Anda dapat memerasnya menjadi 40. Biaya itu dimasukkan oleh penantian Stacey (itulah sebabnya biayanya naik sesuai dengan panjang janji temu) tetapi penilaian waktu tunggu Stacey Anda mungkin tidak benar.

Bagaimanapun, masalah yang menyenangkan! Dan cara yang bagus untuk mempelajari beberapa kebaikan ggplot dan ingat bahwa sintaks R saya super goyah. :)

Kode saya di bawah - silakan menawarkan saran untuk perbaikan.


Untuk menghasilkan kode untuk plot teratas:

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")

Simulasi kedua jauh lebih lama ...

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))
penjelasan
sumber
1
Bagus! Apakah Anda keberatan menunjukkan kode?
Elvis