analýza a cleanup

This commit is contained in:
shinya 2025-03-05 16:57:45 +01:00
parent cada931fa6
commit 1262d745d0
3 changed files with 133 additions and 6 deletions

View File

@ -0,0 +1,123 @@
# Analýza potřebného počtu přepážek
---
## 1. Verze dokumentu
| Verze | Datum | Autor | Komentář |
| ----- | -------- | ------------ | ----------------------- |
| 0.1 | 2.3.2025 | Filip Kohout | První šablona dokumentu |
---
## 2. Obsah
- [Analýza potřebného počtu přepážek](#analýza-potřebného-počtu-přepážek)
- [1. Verze dokumentu](#1-verze-dokumentu)
- [2. Obsah](#2-obsah)
- [3. Analýza](#3-analýza)
- [Shrnutí simulace](#shrnutí-simulace)
- [Výsledky](#výsledky)
- [Závěry](#závěry)
- [4. Analýza s omezeným počtem přepážek](#4-analýza-s-omezeným-počtem-přepážek)
- [Shrnutí simulace](#shrnutí-simulace-1)
- [Výsledky](#výsledky-1)
- [Závěry](#závěry-1)
- [5.Problémy simulačního přístupu](#5problémy-simulačního-přístupu)
---
## 3. Analýza
### Shrnutí simulace
Byly provedeny tři simulace s následujícími parametry:
- Celkový počet zákazníků: **250**
- Maximální čekací doba zákazníka: **15 minut**
- Rozsah doby obsluhy: **5 - 15 minut**
- Maximální počet otevřených přepážek: **6**
### Výsledky
Výsledky jednotlivých simulací vykazují drobné odchylky mezi běhy, ale celkově potvrzují, že optimální počet přepážek se liší podle denní doby. Nejčastější optimální počet přepážek je mezi **3 až 5**.
| Denní doba | 1. Simulace | 2. Simulace | 3. Simulace | Průměrná hodnota |
|------------|------------|------------|------------|----------------|
| 1 | 2 | 2 | 2 | **2** |
| 2 | 4 | 4 | 4 | **4** |
| 3 | 6 | 5 | 5 | **5.33** |
| 4 | 3 | 3 | 3 | **3** |
| 5 | 4 | 4 | 4 | **4** |
| 6 | 4 | 3 | 3 | **3.33** |
| 7 | 4 | 4 | 4 | **4** |
| 8 | 5 | 6 | 6 | **5.67** |
| 9 | 3 | 4 | 4 | **3.67** |
| 10 | 5 | 5 | 5 | **5** |
| 11 | 1 | 1 | 1 | **1** |
### Závěry
- **Nejnižší počet přepážek**: Denní doba **11** vyžaduje pouze **1 přepážku**.
- **Nejvyšší počet přepážek**: Denní doby **3 a 8** mohou vyžadovat až **6 přepážek**.
- **Stabilní rozmezí**: Optimální počet přepážek se obvykle pohybuje mezi **3 a 5**.
- **Variabilita simulací**: Výsledky nejsou 100% konzistentní mezi běhy, což naznačuje vliv náhodných faktorů v simulaci.
Doporučené nasazení přepážek by mělo zohledňovat výkyvy v průběhu dne a umožňovat flexibilní otevření a zavření dle potřeby.
---
## 4. Analýza s omezeným počtem přepážek
### Shrnutí simulace
Byly provedeny tři simulace se stejnými parametry, ale s omezením maximálního počtu přepážek na **3**.
### Výsledky
Při snížení maximálního počtu přepážek došlo k výraznému poklesu spokojenosti zákazníků v některých denních dobách.
| Denní doba | 1. Simulace (%) | 2. Simulace (%) | 3. Simulace (%) | Průměrná spokojenost (%) |
|------------|----------------|----------------|----------------|--------------------|
| 1 | 100 | 100 | 100 | **100** |
| 2 | 52 | 84 | 52 | **62.67** |
| 3 | 24.32 | 21.62 | 43.24 | **29.73** |
| 4 | 100 | 100 | 100 | **100** |
| 5 | 92 | 72 | 100 | **88** |
| 6 | 100 | 100 | 100 | **100** |
| 7 | 100 | 100 | 77.27 | **92.42** |
| 8 | 34.28 | 25.71 | 42.85 | **34.28** |
| 9 | 52 | 64 | 88 | **68** |
| 10 | 43.33 | 63.33 | 26.67 | **44.44** |
| 11 | 100 | 100 | 100 | **100** |
### Závěry
- **Zásadní pokles spokojenosti** nastal zejména v denních dobách **2, 3, 8 a 10**, kde spokojenost klesla i pod **50 %**.
- **Denní doby 4, 6 a 11 nebyly ovlivněny** a dosáhly stále 100% spokojenosti.
- **Celkové průměrné snížení spokojenosti** ukazuje, že tři přepážky nejsou dostatečné pro pokrytí všech požadavků zákazníků během nejvytíženějších období.
- **Problémové časy**: Doba **3 a 8** potřebují více než 3 přepážky, jinak zákazníci čekají příliš dlouho.
Tato analýza potvrzuje, že omezení maximálního počtu přepážek na **3** vede k výraznému snížení spokojenosti v nejvytíženějších časech, což znamená nutnost flexibilního otevírání přepážek dle denní doby.
## 5.Problémy simulačního přístupu
```output
customer 1-14 | served at 1 min. for 13 min. | waiting 0
customer 16-21 | served at 16 min. for 5 min. | waiting 0
customer 17-28 | served at 21 min. for 7 min. | waiting 4
customer 21-33 | served at 28 min. for 5 min. | waiting 7
customer 24-42 | served at 33 min. for 9 min. | waiting 9
customer 24-48 | served at 42 min. for 6 min. | waiting 18
customer 26-57 | served at 48 min. for 9 min. | waiting 22
customer 26-63 | served at 57 min. for 6 min. | waiting 31
customer 28-74 | served at 63 min. for 11 min. | waiting 35
customer 29-82 | served at 74 min. for 8 min. | waiting 45
customer 31-96 | served at 82 min. for 14 min. | waiting 51
customer 43-102 | served at 96 min. for 6 min. | waiting 53
customer 44-114 | served at 102 min. for 12 min. | waiting 58
customer 49-127 | served at 114 min. for 13 min. | waiting 65
customer 58-140 | served at 127 min. for 13 min. | waiting 69
```
- jak je možné vidět z výstupu zpracovávaných dat, dochází k "přetečení" času u každého zákazníka

View File

@ -62,7 +62,7 @@ Maximální doba čekání: 15 minut
3. Vyhodnocení simulace
- Pro každou hodinu dne se určí nejmenší počet přepážek, při kterém je splněn požadavek maximální doby čekání.
- Pokud počet přepážek splňující podmínku existuje, je zvolen nejmenší možný.
- Pokud počet přepážek splňující podmínku neexistuje, je zvolen nejmenší možný.
- Na základě simulace se sestaví plán otevřených přepážek pro každou hodinu.
4. Očekávané výstupy

View File

@ -15,7 +15,11 @@
* uint MaxNumOfCounters is optional - Maximal number of opened counters
* uint float[11] TimeCoef is optional - Coefficients for number of customers for each hour
*/
_ = new BankSim(250, 15, 15, 5, MaxNumOfCounters: 6);
for (int i = 0; i < 3; i++)
{
_ = new BankSim(250, 15, 15, 5, MaxNumOfCounters: 3);
}
}
}
@ -69,19 +73,19 @@
List<double> satisfied_coefficient = new List<double>();
for (int i = 1; i <= MaxNumOfCounters; ++i)
{
Console.WriteLine($"Number of counters: {i}");
//Console.WriteLine($"Number of counters: {i}"); //! LOG
List<uint> waiting_time_per_customer = RunSimulationHour(i);
satisfied_coefficient.Add(SatisfiedCustomers(waiting_time_per_customer));
Console.WriteLine();
//Console.WriteLine(); //! LOG
}
// Select number of counter with the satisfied coefficient
int best_counter = satisfied_coefficient.IndexOf(satisfied_coefficient.Max()) + 1;
//Console.WriteLine($"Best number of counters: {best_counter}, satisfied customers {satisfied_coefficient.Max() * 100}%"); //! LOG
Console.WriteLine($"Best number of counters: {best_counter}, satisfied customers {satisfied_coefficient.Max() * 100}%");
result[day_hour] = new KeyValuePair<uint, double>((uint)best_counter, satisfied_coefficient.Max());
Customers.Clear();
//Console.WriteLine(); //! LOG
Console.WriteLine();
day_hour++;
}