헤어 드레서의 수수께끼


11

저의 미용사 인 스테이시는 항상 행복한 표정을 짓지 만 종종 그녀의 시간 관리에 스트레스를받습니다. 오늘 Stacey는 나의 약속에 대해 기한이 지났고 매우 사과했습니다. 내 이발을받는 동안 나는 그녀의 표준 약속이 얼마나 오래 걸리나요? (깨끗한 라운드 번호에 대한 고객의 선호가 잠시 무시 될 수있는 경우).

고려해야 할 사항은 매우 늦은 고객이 일정이 지연 될 수있는 특정 '파급 효과'입니다. 실제로, 미용사는이 스트레스가 많은 날을 두려워하면서 약속을 더 길고 길게 공간적으로 직관적으로 학습합니다. 그러나 일부 통계적 천재에 의해 최적의 우아한 솔루션을 달성 할 수 있어야합니다.

가정하자

a) 모발 절단 시간은 일반적으로 분배되고

b) 헤어 드레서는 하나뿐입니다.

약속을 너무 오래 설정하는 비용은 미용사의 시간이 다음 약속을 기다리는 데 낭비되는 것입니다. 이 낭비되는 시간을 1 분에 1 달러로하자.

그러나 약속 시간이 충분하지 않으면 다음 고객이 계속 대기합니다. 이는 고객을 사랑하는 Stacey보다 분당 3 달러의 무거운 비용입니다.

  • Stacey는 하루에 최대 8 시간 동안 일할 수 있으며 필요한만큼의 약속을 채울 수있는 충분한 수요가 있습니다.

  • 평균 머리를 자르는 데 30 분이 걸리고 표준은. 10 분의 개발 시간. (남성 컷과 여성 컷도 동일하다고 가정하자!)

편집-일부는 Stacey가 지정된 시간보다 일찍 초기 고객에게 참석할 수 있다고 지적했습니다. 이것은 또 다른 복잡성 계층을 추가하지만, 이것을 현실적인 문제로 취급하려면이를 포함시켜야합니다. 내 90/10 가정을 잊고 아마도 현실에 조금 더 가까운 가정을 시도해 봅시다.

  • 일부 고객은 늦었고 일부 고객은 늦었습니다. 고객의 평균은 2 분 늦게 표준 편차가 2 분입니다 (사실적으로 거의 현실이 아닌 것 같습니까?)

그녀의 약속은 얼마나 오래 걸립니까?


@alexplanation 죄송합니다. 목표를 게시했습니다. 나는 R 독자들이 당신의 대답을 고맙게 생각합니다.


2
그녀가 예정보다 빨리 다음 이발을 시작할 수 있다면 그렇게 할 수 없습니까?
가정 정상

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

몇 가지 정보가 누락되었습니다. 1) 조기 배포 또는 초기 고객이 예정된 예약 시간까지 Stacy에 비용을 부과하지 않는다는 사실 및 2) 늦은 배포. 예정된 도착 시간을 기준으로 도착 시간 분포를 지정해야합니까?
jbowman

또한 약속이 없으면 8 시간이 지나면 어떻게됩니까? 그녀가 계속 일하는 경우, 예약 된 약속 수에 관계없이 첫 약속 이후 하루 8 시간 동안 마지막 약속을 분명하게 예약해야합니다.
jbowman

답변:


13

이 문제에는 움직이는 부분이 많으므로 시뮬레이션에 적합합니다.

우선 Elvis가 의견에서 언급했듯이 Stacey는 약 16 시간 약속을 잡는 것처럼 보입니다. 각 약속은 약 30 분입니다. 그러나 약속이 지연되기 시작하면 상황이 나중에 바뀌기 시작합니다. 따라서 Stacey가 30 분 남았을 때만 약속을 시작하려는 경우 (머리를 바닥에서 쓸어 내기 위해 eh, Stacey ?) 휴식 시간없이 약속을 잡기 위해 수정 구슬을 사용한 경우 가능한 슬롯이 16 개 미만입니다.

최적의 간격을 둔 이발

다음 시뮬레이션에서는 약속 길이의 함수로 비용 곡선을 조사 할 수 있습니다. 물론 나머지 매개 변수도 여기서 역할을 수행하게 될 것입니다. 실제로 Stacey는 약속 시간을 몇 분 간격으로 예약하지는 않지만 진행 상황에 대한 직관을 제공합니다.

여기에 이미지 설명을 입력하십시오

또한 Stacey가 색상으로 작동해야하는 시간을 플로팅했습니다. 나는 Stacey가 7:30 이후에 마지막 약속을 정하지 않기로 결정했지만 때로는 약속이 늦게 나타나거나 지연이 발생했습니다! 그녀가 집에 갈 시간이 양자화되어 약속이 길어질수록 약속이 줄어들고 늦게까지 일할 필요가 없다는 것을 알 수 있습니다. 그리고 여기에 빠진 요소가 있다고 생각합니다. 약속을 45 분 간격으로 예약하는 것이 좋을지 모르지만 약속을 40으로 줄이면 추가 약속을 잡을 수 있습니다. 그 비용은 Stacey의 대기에 의해 통합됩니다. 약속 시간이 길어질수록)하지만 Stacey 시간 대기에 대한 귀하의 평가가 올바르지 않을 수 있습니다.

어쨌든 재미있는 문제! 그리고 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")

두 번째 시뮬레이션은 훨씬 길다 ...

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.