एक हेयर ड्रेसर का कॉनड्रोम


11

मेरा हेयरड्रेसर स्टेसी हमेशा एक खुश चेहरे पर रहता है, लेकिन अक्सर उसके समय का प्रबंधन करने के बारे में जोर दिया जाता है। आज स्टेसी मेरी नियुक्ति और बहुत माफी के लिए अतिदेय था। अपने बाल कटवाने के दौरान मुझे आश्चर्य हुआ: उसकी मानक नियुक्तियाँ कब तक होनी चाहिए? (यदि साफ राउंड नंबरों के लिए ग्राहक की प्राथमिकता को नजरअंदाज किया जा सकता है)।

कुछ विचार करने के लिए एक निश्चित 'लहर प्रभाव' है जहां एक बहुत देर से ग्राहक देरी नियुक्तियों की एक स्ट्रिंग के लिए नेतृत्व कर सकते हैं। वास्तव में, हेयर-ड्रेसर सहज रूप से अंतरिक्ष नियुक्तियों के लिए सीखते हैं और लंबे समय तक इन तनावपूर्ण दिनों से डरते हैं। लेकिन वहाँ कुछ सांख्यिकीय प्रतिभा द्वारा एक इष्टतम, सुरुचिपूर्ण समाधान प्राप्त किया जाना चाहिए .. (यदि हम वास्तविकता को थोड़ा कम कर देते हैं)

चलो मान लो

ए) बाल काटने का समय सामान्य रूप से वितरित किया जाता है और

b) केवल एक हेयर ड्रेसर है।

नियुक्ति की लागत बहुत लंबी है जाहिर तौर पर नाई के समय की बर्बादी अगली नियुक्ति की प्रतीक्षा में होती है। आइए इस व्यर्थ समय को $ 1 प्रति मिनट खर्च करें।

लेकिन अगर नियुक्ति लंबे समय तक नहीं होती है, तो अगले ग्राहक को इंतजार किया जाता है, जो कि ग्राहक-प्रेमी स्टेसी के लिए $ 3 प्रति मिनट की भारी लागत है।

  • स्टेसी प्रति दिन 8 घंटे तक काम करती है, और उसकी पर्याप्त मांग है कि वह जितनी भी नियुक्तियां कर सकती है उतनी भर सकती है

  • औसत बाल कटने में 30 मिनट का समय लगता है। 10 मिनट के देव। (मान भी लें कि पुरुषों के कट्स और महिलाओं के कट्स एक जैसे हैं!)

EDIT - कुछ ने ठीक ही इंगित किया है कि स्टेसी अपने नियत समय से पहले केवल ग्राहकों के लिए उपस्थित हो सकते थे। यह जटिलता की एक और परत जोड़ता है, लेकिन अगर हम इसे काफी यथार्थवादी समस्या मानते हैं तो हमें इसे शामिल करने की आवश्यकता है। आइए मेरी 90/10 धारणा को भूल जाएं और एक धारणा के लिए प्रयास करें जो शायद वास्तविकता के थोड़ा करीब है।

  • कुछ ग्राहक देर से हैं और कुछ जल्दी हैं। ग्राहकों का औसत 2 मिनट के मानक विचलन के साथ 2 मिनट देर से होता है (वास्तविकता के निकट यथोचित लगता है?)

वास्तव में उसकी नियुक्तियाँ कब तक होनी चाहिए?


@alexplanation क्षमा करें, मैंने आपके ऊपर लक्ष्य पोस्ट स्थानांतरित कर दिए हैं! मुझे यकीन है कि आर पाठक आपके उत्तर की सराहना करेंगे।


2
यदि उसके पास पहले से निर्धारित बाल कटवाने की क्षमता है, तो उसे ऐसा करने की अनुमति नहीं है?
ग्रहण

अंगूठे के नियम के रूप में स्टेसी को 16 अपॉइंटमेंट लेने चाहिए ... आइए इस मूल्य से शुरू करें: 16 अपॉइंटमेंट। आपके मॉडल को ध्यान में रखते हुए, बाल काटने में बिताया गया कुल समय एक । इसलिए दिन के अंत में वह आसानी से 30 मिनट से अधिक लेट हो सकती है, यानी एक अपॉइंटमेंट द्वारा शिफ्ट। शायद मॉडलिंग थोड़ा अवास्तविक है? जब आप देर से होते हैं तो बाल कटाने को थोड़ा-थोड़ा करके देखा जा सकता है ... मुझे कतारबद्ध सिद्धांत पर कुछ भी नहीं पता है। मुझे लगता है कि यह इस तरह की समस्या है ...N(μ=8 hours,σ=40 minutes)
एल्विस

आपको जानकारी का एक टुकड़ा याद आ रहा है। 1) शुरुआती समय का वितरण या तथ्य यह है कि शुरुआती ग्राहक अपने निर्धारित नियुक्ति समय तक स्टेसी पर कोई खर्च नहीं करते हैं, और 2) देर से वितरण। हो सकता है कि आपको निर्धारित आगमन समय के सापेक्ष आगमन समय का वितरण निर्दिष्ट करना चाहिए?
jbowman

इसके अलावा, आठ घंटे के अंत में क्या होता है अगर वह एक नियुक्ति के साथ नहीं किया जाता है? यदि वह काम करना जारी रखती है, तो स्पष्ट रूप से अंतिम नियुक्ति पहले (जो दिन की शुरुआत में होगी) के बाद 8 घंटे के लिए निर्धारित की जानी चाहिए, भले ही कितनी नियुक्तियां निर्धारित हों।
शाम

जवाबों:


13

इस समस्या में बहुत सारे चलती हिस्से हैं, जो इसे अनुकरण के लिए परिपक्व बनाता है।

सबसे पहले, जैसा कि एल्विस ने टिप्पणियों में उल्लेख किया है, ऐसा लगता है कि स्टेसी को लगभग 16 नियुक्तियां लेनी चाहिए, क्योंकि प्रत्येक को लगभग आधे घंटे का समय है। लेकिन आप जानते हैं कि जैसे-जैसे नियुक्तियों में देरी होने लगती है, चीजें बाद में और बाद में शिफ्ट होने लगती हैं - इसलिए यदि स्टेसी केवल एक नियुक्ति शुरू करने जा रही है, अगर उसके पास आधे घंटे का समय बचा है (तो फर्श से बाल झाड़ने के लिए बहुत कुछ, एह, स्टेसी ;) फिर हम 16 से कम संभव स्लॉट्स लेने जा रहे हैं, अगर हम बिना आराम के समय के साथ नियुक्तियों को शेड्यूल करने के लिए एक क्रिस्टल बॉल का उपयोग करते हैं।

वैकल्पिक रूप से बाल कटाने

अगले सिमुलेशन में, हम नियुक्ति लंबाई के एक फ़ंक्शन के रूप में लागत की वक्र की जांच कर सकते हैं। बेशक, बाकी पैरामीटर भी यहां एक भूमिका निभाते हुए समाप्त हो जाएंगे - और वास्तव में, स्टेसी अपनी नियुक्तियों को आंशिक समय के अलावा निर्धारित नहीं करने जा रही है, लेकिन इससे हमें क्या हो रहा है, इसके बारे में कुछ अंतर्ज्ञान प्राप्त होता है।

यहाँ छवि विवरण दर्ज करें

मैंने उस समय को भी प्लॉट किया है जिसमें स्टेसी को रंग के रूप में काम करना है। मैंने फैसला किया कि स्टेसी कभी भी 7:30 के बाद अपनी आखिरी नियुक्ति नहीं करेगी, लेकिन कभी-कभी नियुक्ति देर से दिखाई देती है, या इसमें देरी हुई है! आप देख सकते हैं कि उसके घर जाने का समय निर्धारित है, ताकि नियुक्तियों में अधिक समय लगने पर आपको एक कम नियुक्ति मिल सके और फिर देर तक काम न करना पड़े। और मुझे लगता है कि यहां एक लापता तत्व है - शायद आपकी नियुक्तियों को 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")

दूसरा अनुकरण बहुत लंबा है ...

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.