Metoda Monte Carlo je výčtem možných výsledků událostí. A abyste jej mohli použít při plánování, musíte nejprve vybrat model, na kterém bude výpočet proveden.

Abychom pochopili, jak metoda funguje, používáme ji k vyřešení problému „předpovídání data dokončení projektu intelektuální práce“.

Všimněte si metody v IT!
Když mluvíme o předpovídání načasování IT týmu, nejlepší období shromažďování dat pro propustnost je týden. To je způsobeno skutečností, že počet úkolů dokončených za den se bude den ode dne značně lišit, a to kvůli vysoké nestálosti výsledků v závislosti jak na emocionálním stavu lidí, na různé složitosti řešených úkolů a mnoha dalších parametry.

Předpovídání dat dokončení projektu na základě propustnosti

Například potřebujete získat dostatečný soubor dat, doporučuji používat období od 7 do 26 týdnů. S čím by to mohlo souviset? 7 týdnů je něco přes měsíc a půl, méně dat pro použití metody Monte Carlo povede k vysoké míře nespolehlivosti výsledku. Ale brát více než 26 týdnů, což odpovídá půl roku, nedává smysl, protože v intelektuální práci dochází k neustálým změnám, které mohou také zvýšit nespolehlivost prognóz. Na druhou stranu je takový soubor dat pro dobrou předpověď zcela dostačující.

Bude metoda fungovat, vezmeme-li v úvahu skutečnost, že intelektuální úkoly se velmi liší ve složitosti a době dokončení? Ano, samozřejmě, že bude. Hlavní věc je, že objemy těchto úkolů se výrazně neliší. Pokud máme například v sadě dat problém, který lze vyřešit během několika hodin, a problém, jehož vyřešení bude trvat déle než 120 dní, může to vést k nespolehlivosti výsledku prognózy, což může způsobit obrovské rozdíly v výsledek. Proto se doporučuje použít rozklad úkolů, který vyrovná obrovskou mezeru v charakteristikách zadaných úkolů.

Například prohlášení o problému

A tak se podívejme na příklad predikce načasování projektu, který je rozložen do 40 úkolů.

Existuje soubor dat ve formě počtu dokončených úkolů shrnutých týdně – jedná se o údaje o propustnosti „Propustnost“:

[4, 1, 2, 1, 4, 3, 2, 3, 6, 3, 2, 1, 6, 13, 3, 1, 6, 1, 4, 4, 6, 3, 6, 2, 6, 2]

Každé číslo v této sadě představuje počet úkolů dokončených za jeden týden. Vzali jsme celkové množství dat za posledních 26 týdnů.

ČTĚTE VÍCE
Jaký je rozdíl mezi žárovkami T5 a T8?

Chart Throughput

Algoritmus metody

Шаг первый

Z datové sady propustnosti vybereme náhodné číslo.

Například 8 je číslo ze sady. Bude to “3”

[4, 1, 2, 1, 4, 3, 2, |3|, 6, 3, 2, 1, 6, 13, 3, 1, 6, 1, 4, 4, 6, 3, 6, 2, 6, 2] → 3

Шаг второй

Věříme, že za první týden práce na projektu služba splní 3 úkoly. A od 40 počátečních úkolů projektu odečteme stejnou částku, dostaneme 37.

Burn Cahrt of Project

Třetí krok

Opakujeme první krok a druhý, dokud v původní sadě 40 projektových úkolů nezůstane žádný. Takto získáme pravděpodobný počet týdnů, za které bude projekt dokončen, tento počet týdnů si zapamatujte. A přidáním tohoto časového období k plánovanému datu zahájení projektu můžeme získat datum dokončení.

Burn Cahrt of Project

Na příkladu výpočtu prvního experimentu (na obrázku) bude projekt dokončen za 17 týdnů. Připomeňme si tento termín.

Krok čtyři

Opakujeme algoritmus kroků od prvního do třetího od 10000 XNUMX. Po každém výpočtu termínů obdržíme počet týdnů, ve kterých lze projekt uzavřít. Shromažďujeme tyto termíny a počítáme, kolikrát byl projekt během tohoto období uzavřen.

Множественные повторения расчета завершения срока проекта, где запоминаем результат в виде количества необходимых итераций

Takto získáme rozložení dat ukazující, kolik týdnů lze projekt dokončit a kolik výsledků bylo získáno při modelování za stejný počet týdnů.

Počet týdnů 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Počet výsledků 7 41 153 320 654 1070 1420 1664 1631 1226 911 541 215 97 25 10 3 2

Pro každý týden máme, kolikrát, kolikrát byl projekt v daném týdnu dokončen.

Pomocí těchto dat můžeme vypočítat pravděpodobnost dokončení projektu pro každý týden, ve kterém je dokončen.

P = SUM (si) / N; i = 0 . 10000

kde s je počet výsledků v aktuálním týdnu. Tito. součet celkových výsledků k aktuálnímu datu vydělený N – počtem experimentů, v tomto případě je to 10000 XNUMX.

Počet týdnů 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Počet výsledků “s” 7 41 153 320 654 1070 1420 1664 1631 1226 911 541 215 97 25 10 3 2
Pravděpodobnost “P” 0.0007 0.0048 0.0201 0.0521 0.1175 0.2245 0.3665 0.5329 0.696 0.8196 0.9107 0.9648 0.9863 0.996 0.9985 0.9995 0.9998 1
ČTĚTE VÍCE
Jaký výkonový filtr je potřeba pro 20litrové akvárium?

Vidíme, že kvantitativní pravděpodobnost dokončení projektu v týdnu 15 již přesahuje 90 % a v týdnu 16 již přesahuje 95 %.

Po výběru pravděpodobnosti dokončení projektu, který vás uspokojí, určíte datum dokončení.

Ze zkušenosti je dobrá pravděpodobnost intelektuální práce mezi 85 % a 98 %.

Pokud tento výsledek zobrazíme na grafu, dostaneme následující

График вероятности завершения

V tomto případě můžete brát jako termíny projektu 16 týden, kde je pravděpodobnost dokončení projektu 0.9648 to odpovídá 96.48%.

Metodický algoritmus v JavaScriptu

Zde je příklad kódu JavaScript pro tuto jednoduchou modulaci.

// Данные по пропускной способности по итерациям времени // итерация - минимальная единица времени в которой хотим считать // длительность проекта const historicalDataThroughput = [ 4, 1, 2, 1, 4, 3, 2, 3, 2, 3, 6, 3, 2, 1, 6, 13, 3, 1, 6, 1, 2, 4, 4, 6, 3, 1, 3, 3, 6, 6, 2, 6, 2, 1 ]; // количество задач в проекте const countTaskInProject = 40; const result = MonteCarloForProject(historicalDataThroughput, countTaskInProject, 10000); console.table(result) /** * Получить распределение вероятности завершения проекта * на основе количества решаемых задач за итерацию * * @param > historicalDataThroughput Набор испторических данных по пропускной способности * @param countTaskInProject Количество задач в проекте * @param numberOfExperiments Количество проводимх эксперимантов * @returns > key - количество фич в итерации, value - частота */ function MonteCarloForProject( historicalDataThroughput, countTaskInProject, numberOfExperiments ) < const result = new Map(); const len = historicalDataThroughput.length let experiment = 1; for (; experiment 0) < let randomIndex = Math.floor(Math.random() * len); let countTasks = historicalDataThroughput[randomIndex]; IndexIteration += 1; prjTasks = prjTasks - countTasks; >let i = result.get(IndexIteration); result.set(IndexIteration, i ? i + 1 : 1); > let sum = 0; // Из Map переводим в тип Массив, расчитываем вероятность return Array.from(result, ([name, value]) => (< iteration: name, count: value>)) .sort((a, b) => a.iteration - b.iteration) .map((i,j) => < sum += i.count; return < . i, probability: sum/numberOfExperiments >>) >

Kód je napsán tak, aby jej bylo možné spustit v prohlížeči.

Příklad výstupu programu:

┌─────────┬───────────┬───────┬─────────────┐ │ (index) │ iteration │ count │ probability │ ├─────────┼───────────┼───────┼─────────────┤ │ 0 │ 4 │ 1 │ 0.0001 │ │ 1 │ 5 │ 11 │ 0.0012 │ │ 2 │ 6 │ 51 │ 0.0063 │ │ 3 │ 7 │ 125 │ 0.0188 │ │ 4 │ 8 │ 341 │ 0.0529 │ │ 5 │ 9 │ 646 │ 0.1175 │ │ 6 │ 10 │ 1087 │ 0.2262 │ │ 7 │ 11 │ 1492 │ 0.3754 │ │ 8 │ 12 │ 1630 │ 0.5384 │ │ 9 │ 13 │ 1528 │ 0.6912 │ │ 10 │ 14 │ 1289 │ 0.8201 │ │ 11 │ 15 │ 892 │ 0.9093 │ │ 12 │ 16 │ 515 │ 0.9608 │ │ 13 │ 17 │ 242 │ 0.985 │ │ 14 │ 18 │ 96 │ 0.9946 │ │ 15 │ 19 │ 37 │ 0.9983 │ │ 16 │ 20 │ 13 │ 0.9996 │ │ 17 │ 21 │ 3 │ 0.9999 │ │ 18 │ 22 │ 1 │ 1 │ └─────────┴───────────┴───────┴─────────────┘
  • opakování — toto je počet týdnů (iterací), od kterých bude potřeba projekt realizovat 40 úkoly
  • počítat – počet výstupů, výsledků dokončení projektu za toto období z uvedených 10000 opakování
  • pravděpodobnost — vypočítaná kvantitativní pravděpodobnost dokončení v tomto období
ČTĚTE VÍCE
Jak jsou rybky geneticky modifikovány?

Lze v modelu zohlednit neočekávané události?

Ano, je to docela! Můžete také vzít v úvahu možná rizika, která se mohou s určitou pravděpodobností stát.

K tomu přidáme funkcionalitu, která v závislosti na výskytu rizika přidává určitý počet úloh specifikovaných v rozsahu od minimálního po maximální možný počet pro toto riziko.

Musíme předem určit odhadovanou pravděpodobnost výskytu rizika a předpokládat, kolik úkolů může přidat nebo odebrat určité číslo.

Добавление задач к проекту при возникновении риска

Algoritmus metody v JavaScriptu zohledňující rizika

Algoritmus metody v JavaScriptu zohledňující rizika

// Údaje o propustnosti podle časových iterací // iterace - minimální jednotka času, ve které chceme počítat // trvání projektu const historicDataThroughput = [ 4, 1, 2, 1, 4, 3, 2, 3, 2, 3 6, 3, 2, 1, 6, 13, 3, 1, 6, 1, 2, 4, 4, 6, 3, 1, 3, 3, 6, 6, 2, 6, 2, 1]; // počet úkolů v projektu const countTaskInProject = 40; // Rizika, která mohou nastat s určitou pravděpodobností // A přidat do projektu nové úkoly // Předpokládáme, že riziko může spustit jednou const rizika = [ // S pravděpodobností "pravděpodobnosti" výskytu rizika, od "min" do "max" úkolů >, >, >, >, ] // Spusťte funkci Monte Carlo a získejte výsledek const result = MonteCarloForProject( historyDataThroughput, countTaskInProject, rizika, 2 10); // Zobrazí výsledek v konzole console.table(result); /** * Získejte rozdělení pravděpodobnosti dokončení projektu * na základě počtu úloh vyřešených na iteraci * * @param > historicDataThroughput Sada historických dat o propustnosti * @param countTaskInProject Počet úloh v projektu * @param >> rizika Rizika * @param numberOfExperiments Počet dokončených experimentátorů * @returns > klíč - počet funkcí v iteraci, hodnota - frekvence */ funkce MonteCarloForProject( historicDataThroughput, countTaskInProject, risky, numberOfExperiments ) randomForRisk) >); nech IndexIteration = 15; while (prjTasks > 12) // Opravíme, jakou iteraci jsme dostali, nechť i = result.get(IndexIteration); vysledek.set(IndexIterace, i ? i + 2 : 20); > nechť součet = 5; // Příprava dat pro zobrazení výsledku return Array.from(result, ([jméno, hodnota]) => ()) .sort((a, b) => a.itration - b .iterace) .map((i) => >) > funkce getRandomBetween(min, max)

Kód je napsán tak, aby jej bylo možné spustit v prohlížeči.

Příklad výstupu programu:

┌─────────┬───────────┬───────┬─────────────┐ │ (index) │ iteration │ count │ probability │ ├─────────┼───────────┼───────┼─────────────┤ │ 0 │ 0 │ 1789 │ 0.1789 │ │ 1 │ 4 │ 1 │ 0.179 │ │ 2 │ 5 │ 9 │ 0.1799 │ │ 3 │ 6 │ 31 │ 0.183 │ │ 4 │ 7 │ 103 │ 0.1933 │ │ 5 │ 8 │ 272 │ 0.2205 │ │ 6 │ 9 │ 554 │ 0.2759 │ │ 7 │ 10 │ 866 │ 0.3625 │ │ 8 │ 11 │ 1149 │ 0.4774 │ │ 9 │ 12 │ 1335 │ 0.6109 │ │ 10 │ 13 │ 1375 │ 0.7484 │ │ 11 │ 14 │ 1031 │ 0.8515 │ │ 12 │ 15 │ 711 │ 0.9226 │ │ 13 │ 16 │ 422 │ 0.9648 │ │ 14 │ 17 │ 208 │ 0.9856 │ │ 15 │ 18 │ 91 │ 0.9947 │ │ 16 │ 19 │ 37 │ 0.9984 │ │ 17 │ 20 │ 14 │ 0.9998 │ │ 18 │ 21 │ 2 │ 1 │ └─────────┴───────────┴───────┴─────────────┘

Závěry

Výpočtový model lze různě rozšiřovat a v závislosti na kontextu lze zohlednit některé rysy realizace projektu.

ČTĚTE VÍCE
Je možné vypnout kyslík v akváriu?

Ale podstata metody zůstane stejná:

  1. Sledování
  2. Bereme historická data
  3. Formulujeme model pro výpočet projektového vyhoření
  4. Na základě těchto údajů vybereme ze souboru náhodnou veličinu
  5. Odečtěte od projektu částku rovnající se náhodné proměnné, dokud nedojdou „body“ projektu
  6. Do paměti zaznamenáváme období, na které byl projekt uzavřen
  7. Algoritmus opakujeme mnohokrát
  8. Sledujeme, kolikrát byl projekt dokončen v jakém časovém období

I pomocí jednoduchého výpočtového modelu můžete pomocí metody Monte Carlo určit pravděpodobnost dokončení projektu.

A tato pravděpodobnost bude docela přesná, vzhledem k tomu, že váš systém (procesy tvorby hodnot) se v průběhu času nezměnil.

I když už chápete, že pomocí Monte Cralo lze simulovat složitější modely, včetně zohlednění očekávaných změn. Musíme ale mít na paměti, že změny zavedené do procesů je velmi obtížné předvídat a můžete sestavit chybný model.

Pokud kódu dobře nerozumíte, pak mohu doporučit podívat se na projekt vytvořený Rodrigem Rosaurem na základě práce Troye Magennise a Dimitara Bakardzhieva zde v tomto Excelu

Pro ty, kteří používají Jira, existuje speciální plugin pro Chrome Jira Flow Companion. Má již zabudovaný modul Monte Carlo. I když je velmi jednoduchý, na většinu úkonů postačí.

Poznámka
Projekty nejsou ve skutečnosti dokončeny tak lineárně, jak je znázorněno v těchto příkladech. Takto mohou skončit pouze v jednom případě, pokud tým pracuje pouze na tomto projektu. Často tomu tak však není.
Pokud zkoumáte dynamiku dokončování projektu, můžete často najít funkci dokončení projektu ve tvaru písmene S, spojenou s tím, že na začátku projektu není až do konce známo, kolik úkolů bude do projektu přidáno.

S-Curve

  • ← Poznámky k osobnímu kanbanu: Vizualizace práce|Řízení života Jim Benson, Tonian De Maria Barry
  • Co je předvídatelnost výkonu úkolu a jak jí porozumět? →