Загадка перукаря


11

Моя перукар Стейсі завжди одягає щасливе обличчя, але часто наголошує на управлінні своїм часом. Сьогодні Стейсі була прострочена в моєму призначенні і дуже вибачилася. Отримуючи стрижку, я задумався: як довго повинні бути її стандартні побачення? (якщо перевагу замовника на чисті круглі номери можна ненадовго проігнорувати).

Що слід враховувати, це певний "ефект пульсації", коли один дуже пізній клієнт може призвести до низки затримок зустрічей. Насправді, перукарі інтуїтивно вчаться робити космічні побачення все довше і довше, оскільки бояться цих стресових днів. Але оптимальне, елегантне рішення повинно бути досягнуто деяким статистичним генієм там .. (якщо трохи придушити реальність)

Припустимо

а) час стрижки волосся зазвичай розподіляється;

б) є ​​лише один перукар.

Занадто довгі витрати на призначення зустрічей , очевидно, перукар витрачав час, чекаючи наступної зустрічі. Давайте коштуватимемо цей витрачений час 1 долар на хвилину.

Але якщо зустріч недостатньо тривала, черговий клієнт продовжує чекати, що коштує 3-х доларів за хвилину для клієнта, що любить Стейсі.

  • Стейсі працює до 8 годин на день і має достатній попит, щоб вона могла заповнити стільки зустрічей, скільки зможе вмістити

  • Середня стрижка волосся займає 30 хвилин, за допомогою STD. дев 10 хвилин. (припустимо також, що чоловічі крої та жіночі крої однакові!)

EDIT - деякі справедливо зазначають, що Стейсі може відвідувати КОРІННІ замовники до призначеного часу. Це додає ще один рівень складності, але якщо ми трактуємо це як цілком реалістичну проблему, нам потрібно включити його. Давайте забудемо моє припущення 90/10 і спробуємо зробити припущення, можливо, трохи ближче до реальності.

  • Деякі клієнти запізнюються, а деякі - рано. Середня кількість клієнтів запізнюється на дві хвилини зі стандартним відхиленням на 2 хвилини (звучить досить близько від реальності, ні?)

Точно, як довго повинні бути її призначення?


@alexplanation вибачте, що я перемістив цілі пости на вас! Я впевнений, що читачі R оцінюють вашу відповідь.


2
якщо у неї є можливість розпочати наступну стрижку раніше запланованого, їй це не дозволяється?
припускаєтьсянормальне

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

Вам не вистачає пари інформації. 1) розповсюдження раннього часу АБО те, що ранні клієнти не завдають будь-яких витрат на Стейсі до запланованого часу призначення, і 2) розподіл пізніх часів. Можливо, вам слід просто вказати розподіл часу прибуття щодо запланованого часу прибуття?
jbowman

Крім того, що відбудеться наприкінці восьми годин, якщо вона не зробила зустріч? Якщо вона продовжить працювати, очевидно, що останній прийом повинен бути призначений на 8 годин після першого (що буде на початку дня), незалежно від того, скільки призначено зустрічей.
jbowman

Відповіді:


13

У цій проблемі багато рухомих деталей, що робить її стиглою для моделювання.

По-перше, як згадував Елвіс у коментарях, схоже, що Стейсі має взяти близько 16 зустрічей, оскільки кожен - приблизно півгодини. Але ви знаєте, що, коли зустрічі починають затягуватися, справи починають змінюватися все пізніше і пізніше - тож якщо Стейсі збирається розпочати зустріч лише в тому випадку, якщо у неї залишилося півгодини (стільки для підмивання волосся з підлоги, так, Стейсі ?) тоді у нас буде менше 16 можливих слотів, якщо ми використовували кришталеву кулю для планування зустрічей без часу відпочинку.

Оптимально розташовані стрижки

У наступному моделюванні ми можемо дослідити криву витрат як функцію тривалості призначення. Звичайно, решта параметрів тут також гратимуть певну роль - і насправді Стейсі не збирається планувати свої зустрічі дробовими хвилинами один від одного, але це дає нам деяку інтуїцію щодо того, що відбувається.

введіть тут опис зображення

Я також намітив час, коли Стейсі повинна бути на роботі як колір. Я вирішив, що Стейсі ніколи не планує свою останню зустріч після 7:30, але іноді зустріч з’являється пізно, або трапляється затримка! Ви можете бачити, що час, який вона отримує додому, кількісно визначається, так що, коли зустрічі тривають довше, ви отримуєте одну зустріч менше, а потім не потрібно працювати як пізно. І я думаю, що тут відсутній елемент - можливо, планування зустрічей на 45 хвилин один від одного чудово, але ви отримаєте додаткову зустріч, якщо зможете стиснути його до 40. Ці витрати враховуються очікуванням Стейсі (саме тому вартість йде (тривалість зустрічі збільшується), але ваша оцінка часу очікування Стейсі може бути невірною.

У всякому разі, весела проблема! І хороший спосіб дізнатися деякі добрі ггплоти і пам’ятати, що мій синтаксис 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")

Друге моделювання набагато довше ...

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
Приємно! Чи заперечуєте проти показу коду?
Елвіс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.