Лабораторная работа №7 Многоканальная СМО с ограниченной очередью
Теория.
Рассмотрим S-канальную СМО с ожиданием, на которую поступает поток заявок с интенсивностью . Интенсивность обслуживания µ (для одного канала), число мест в очереди m. Заявка, поступившая в момент, когда все каналы заняты и очередь заполнена, получает отказ на обслуживание.
Граф состояний такой системы выглядит следующим образом:
Рисунок 7.1 Граф состояний СМО < µ | µ | S | m >
Составив уравнения Колмогорова, прировняв их нулю, решив данную систему и преобразовав решения с помощью условия нормировки и формул геометрической прогрессии, получим формулы (7.1)-(7.2).
(7.1)
(7.2)
По формуле (7.1) можно высчитать вероятность отказа, т.е. вероятность того, что все каналы заняты и вся очередь наполнена:
(7.3)
Относительная пропускная способность системы q будет являться противоположным событием событию «отказа заявки на обслуживание», и высчитывается по формуле.
(7.4)
Абсолютная пропускная способность (А) - среднее число заявок, которое может обслужить СМО в единицу времени:
(7.5)
Среднее число занятых каналов будет находиться по формуле (7.6).
(7.6)
Среднее число находящихся в очереди заявок:
(7.7)
Среднее время пребывания заявки в очереди:
(7.8)
Среднее число приборов свободных от работы:
(7.9)
Цель. Решить оптимизационную задачу на примере СМО < µ | µ | S | m >.
Входные значения: параметр λ=10шт/сутки, µ=2шт/сутки.
Задача. В отделе нагрева металла в цехе крупной плавки часть работ происходит в режиме «копильника»: если слиток застает все печи занятыми, то он помещается в «копильник», где ему обеспечивается нужная температура. Если все печи и «копильники» заняты - он отправляется на склад. Но при этом для того, чтобы его заново разогреть, потребуются дополнительные растраты в размере 100$ на его разогрев. Поступающий поток простейший с λ=10шт/сутки. Интенсивность нагрева слитков перед ковкой (распределение показательное) µ=2шт/сутки. В цехе имеется 10 печей, из которых часть должна быть для плавки, а часть для «копильника». Цена одной печи -100000$. Текущие затраты 50$ в сутки на обслуживание одной печи. Затраты на простой печи 30$ сутки. Затраты на содержание слитков в «копильнике» 60$ сутки на один слиток. Фонд времени в году 6000 часов. Найти оптимальное количество «копильников»(m) и печей для плавки(s).
Алгоритм решения.
1. Формула для расчета затрат:
(7.10)
где – затраты на работу системы;
- коэффициент эффективности капиталовложения (0,15$/год);
- цена одной печи (100000$);
- текущие затраты на содержание одной печи (50$/сутки);
– текущие затраты на содержание одной печи в простое (30$/сутки);
– затраты на содержание слитка в «копильнике» (60$/сутки шт.);
– затраты на разогрев отосланных на склад слитков (100$/сутки шт.);
– средняя длина очереди ( );
–среднее число приборов свободных от работы;
–годовой фонд рабочего времени (6000 часов).
1. Протабулировать функцию (7.10) при (m=10-S);
2. Построить график зависимости затрат от числа обслуживающих каналов, и найти оптимальное число обслуживающих каналов для данной задачи.
Не забывайте проверять условие существования стационарного режима для текущей итерации и единицы измерения.
ПРИЛОЖЕНИЕ 1 Таблица значений квантилей
n\ε
0,01
0,025
0,05
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
0,95
0,975
0,99
0,0002
0,0010
0,0039
0,0158
0,0642
0,1485
0,2750
0,4549
0,7083
1,0742
1,6424
2,7055
3,8415
5,0239
6,6349
0,0201
0,0506
0,1026
0,2107
0,4463
0,7133
1,0217
1,3863
1,8326
2,4079
3,2189
4,6052
5,9915
7,3778
9,2103
0,1148
0,2158
0,3518
0,5844
1,0052
1,4237
1,8692
2,3660
2,9462
3,6649
4,6416
6,2514
7,8147
9,3484
11,3449
0,2971
0,4844
0,7107
1,0636
1,6488
2,1947
2,7528
3,3567
4,0446
4,8784
5,9886
7,7794
9,4877
11,1433
13,2767
0,5543
0,8312
1,1455
1,6103
2,3425
2,9999
3,6555
4,3515
5,1319
6,0644
7,2893
9,2364
11,0705
12,8325
15,0863
0,8721
1,2373
1,6354
2,2041
3,0701
3,8276
4,5702
5,3481
6,2108
7,2311
8,5581
10,6446
12,5916
14,4494
16,8119
1,2390
1,6899
2,1673
2,8331
3,8223
4,6713
5,4932
6,3458
7,2832
8,3834
9,8032
12,0170
14,0671
16,0128
18,4753
1,6465
2,1797
2,7326
3,4895
4,5936
5,5274
6,4226
7,3441
8,3505
9,5245
11,0301
13,3616
15,5073
17,5345
20,0902
2,0879
2,7004
3,3251
4,1682
5,3801
6,3933
7,3570
8,3428
9,4136
10,6564
12,2421
14,6837
16,9190
19,0228
21,6660
2,5582
3,2470
3,9403
4,8652
6,1791
7,2672
8,2955
9,3418
10,4732
11,7807
13,4420
15,9872
18,3070
20,4832
23,2093
3,0535
3,8157
4,5748
5,5778
6,9887
8,1479
9,2373
10,3410
11,5298
12,8987
14,6314
17,2750
19,6751
21,9200
24,7250
3,5706
4,4038
5,2260
6,3038
7,8073
9,0343
10,1820
11,3403
12,5838
14,0111
15,8120
18,5493
21,0261
23,3367
26,2170
4,1069
5,0088
5,8919
7,0415
8,6339
9,9257
11,1291
12,3398
13,6356
15,1187
16,9848
19,8119
22,3620
24,7356
27,6882
4,6604
5,6287
6,5706
7,7895
9,4673
10,8215
12,0785
13,3393
14,6853
16,2221
18,1508
21,0641
23,6848
26,1189
29,1412
5,2293
6,2621
7,2609
8,5468
10,3070
11,7212
13,0297
14,3389
15,7332
17,3217
19,3107
22,3071
24,9958
27,4884
30,5779
5,8122
6,9077
7,9616
9,3122
11,1521
12,6243
13,9827
15,3385
16,7795
18,4179
20,4651
23,5418
26,2962
28,8454
31,9999
6,4078
7,5642
8,6718
10,0852
12,0023
13,5307
14,9373
16,3382
17,8244
19,5110
21,6146
24,7690
27,5871
30,1910
33,4087
7,0149
8,2307
9,3905
10,8649
12,8570
14,4399
15,8932
17,3379
18,8679
20,6014
22,7595
25,9894
28,8693
31,5264
34,8053
7,6327
8,9065
10,1170
11,6509
13,7158
15,3517
16,8504
18,3377
19,9102
21,6891
23,9004
27,2036
30,1435
32,8523
36,1909
8,2604
9,5908
10,8508
12,4426
14,5784
16,2659
17,8088
19,3374
20,9514
22,7745
25,0375
28,4120
31,4104
34,1696
37,5662
8,8972
10,2829
11,5913
13,2396
15,4446
17,1823
18,7683
20,3372
21,9915
23,8578
26,1711
29,6151
32,6706
35,4789
38,9322
9,5425
10,9823
12,3380
14,0415
16,3140
18,1007
19,7288
21,3370
23,0307
24,9390
27,3015
30,8133
33,9244
36,7807
40,2894
10,1957
11,6886
13,0905
14,8480
17,1865
19,0211
20,6902
22,3369
24,0689
26,0184
28,4288
32,0069
35,1725
38,0756
41,6384
10,8564
12,4012
13,8484
15,6587
18,0618
19,9432
21,6525
23,3367
25,1063
27,0960
29,5533
33,1962
36,4150
39,3641
42,9798
11,5240
13,1197
14,6114
16,4734
18,9398
20,8670
22,6156
24,3366
26,1430
28,1719
30,6752
34,3816
37,6525
40,6465
44,3141
12,1981
13,8439
15,3792
17,2919
19,8202
21,7924
23,5794
25,3365
27,1789
29,2463
31,7946
35,5632
38,8851
41,9232
45,6417
12,8785
14,5734
16,1514
18,1139
20,7030
22,7192
24,5440
26,3363
28,2141
30,3193
32,9117
36,7412
40,1133
43,1945
46,9629
13,5647
15,3079
16,9279
18,9392
21,5880
23,6475
25,5093
27,3362
29,2486
31,3909
34,0266
37,9159
41,3371
44,4608
48,2782
14,2565
16,0471
17,7084
19,7677
22,4751
24,5770
26,4751
28,3361
30,2825
32,4612
35,1394
39,0875
42,5570
45,7223
49,5879
14,9535
16,7908
18,4927
20,5992
23,3641
25,5078
27,4416
29,3360
31,3159
33,5302
36,2502
40,2560
43,7730
46,9792
50,8922
15,6555
17,5387
19,2806
21,4336
24,2551
26,4397
28,4087
30,3359
32,3486
34,5981
37,3591
41,4217
44,9853
48,2319
52,1914
16,3622
18,2908
20,0719
22,2706
25,1478
27,3728
29,3763
31,3359
33,3809
35,6649
38,4663
42,5847
46,1943
49,4804
53,4858
Продолжение таблицы значений квантилей
17,0735
19,0467
20,8665
23,1102
26,0422
28,3069
30,3444
32,3358
34,4126
36,7307
39,5718
43,7452
47,3999
50,7251
54,7755
17,7891
19,8063
21,6643
23,9523
26,9383
29,2421
31,3130
33,3357
35,4438
37,7954
40,6756
44,9032
48,6024
51,9660
56,0609
18,5089
20,5694
22,4650
24,7967
27,8359
30,1782
32,2821
34,3356
36,4746
38,8591
41,7780
46,0588
49,8018
53,2033
57,3421
19,2327
21,3359
23,2686
25,6433
28,7350
31,1152
33,2517
35,3356
37,5049
39,9220
42,8788
47,2122
50,9985
54,4373
58,6192
19,9602
22,1056
24,0749
26,4921
29,6355
32,0532
34,2216
36,3355
38,5348
40,9839
43,9782
48,3634
52,1923
55,6680
59,8925
20,6914
22,8785
24,8839
27,3430
30,5373
32,9919
35,1920
37,3355
39,5643
42,0451
45,0763
49,5126
53,3835
56,8955
61,1621
21,4262
23,6543
25,6954
28,1958
31,4405
33,9315
36,1628
38,3354
40,5935
43,1053
46,1730
50,6598
54,5722
58,1201
62,4281
22,1643
24,4330
26,5093
29,0505
32,3450
34,8719
37,1340
39,3353
41,6222
44,1649
47,2685
51,8051
55,7585
59,3417
63,6907
22,9056
25,2145
27,3256
29,9071
33,2506
35,8131
38,1055
40,3353
42,6506
45,2236
48,3628
52,9485
56,9424
60,5606
64,9501
23,6501
25,9987
28,1440
30,7654
34,1574
36,7550
39,0774
41,3352
43,6786
46,2817
49,4560
54,0902
58,1240
61,7768
66,2062
24,3976
26,7854
28,9647
31,6255
35,0653
37,6975
40,0496
42,3352
44,7063
47,3390
50,5480
55,2302
59,3035
62,9904
67,4593
25,1480
27,5746
29,7875
32,4871
35,9743
38,6408
41,0222
43,3352
45,7336
48,3957
51,6389
56,3685
60,4809
64,2015
68,7095
25,9013
28,3662
30,6123
33,3504
36,8844
39,5847
41,9950
44,3351
46,7607
49,4517
52,7288
57,5053
61,6562
65,4102
69,9568
26,6572
29,1601
31,4390
34,2152
37,7955
40,5292
42,9682
45,3351
47,7874
50,5071
53,8177
58,6405
62,8296
66,6165
71,2014
27,4158
29,9562
32,2676
35,0814
38,7075
41,4744
43,9417
46,3350
48,8139
51,5619
54,9056
59,7743
64,0011
67,8206
72,4433
28,1770
30,7545
33,0981
35,9491
39,6205
42,4201
44,9154
47,3350
49,8401
52,6161
55,9926
60,9066
65,1708
69,0226
73,6826
28,9406
31,5549
33,9303
36,8182
40,5344
43,3664
45,8895
48,3350
50,8660
53,6697
57,0786
62,0375
66,3386
70,2224
74,9195
29,7067
32,3574
34,7643
37,6886
41,4492
44,3133
46,8638
49,3349
51,8916
54,7228
58,1638
63,1671
67,5048
71,4202
76,1539
ПРИЛОЖЕНИЕ 2 Таблица значений
n/ε
0.40
0.25
0.10
0.05
0.025
0.01
0.005
0.0005
0.324920
1.000000
3.077684
6.313752
12.70620
31.82052
63.65674
636.6192
0.288675
0.816497
1.885618
2.919986
4.30265
6.96456
9.92484
31.5991
0.276671
0.764892
1.637744
2.353363
3.18245
4.54070
5.84091
12.9240
0.270722
0.740697
1.533206
2.131847
2.77645
3.74695
4.60409
8.6103
0.267181
0.726687
1.475884
2.015048
2.57058
3.36493
4.03214
6.8688
0.264835
0.717558
1.439756
1.943180
2.44691
3.14267
3.70743
5.9588
0.263167
0.711142
1.414924
1.894579
2.36462
2.99795
3.49948
5.4079
0.261921
0.706387
1.396815
1.859548
2.30600
2.89646
3.35539
5.0413
0.260955
0.702722
1.383029
1.833113
2.26216
2.82144
3.24984
4.7809
0.260185
0.699812
1.372184
1.812461
2.22814
2.76377
3.16927
4.5869
0.259556
0.697445
1.363430
1.795885
2.20099
2.71808
3.10581
4.4370
0.259033
0.695483
1.356217
1.782288
2.17881
2.68100
3.05454
4.3178
0.258591
0.693829
1.350171
1.770933
2.16037
2.65031
3.01228
4.2208
0.258213
0.692417
1.345030
1.761310
2.14479
2.62449
2.97684
4.1405
0.257885
0.691197
1.340606
1.753050
2.13145
2.60248
2.94671
4.0728
0.257599
0.690132
1.336757
1.745884
2.11991
2.58349
2.92078
4.0150
0.257347
0.689195
1.333379
1.739607
2.10982
2.56693
2.89823
3.9651
0.257123
0.688364
1.330391
1.734064
2.10092
2.55238
2.87844
3.9216
0.256923
0.687621
1.327728
1.729133
2.09302
2.53948
2.86093
3.8834
0.256743
0.686954
1.325341
1.724718
2.08596
2.52798
2.84534
3.8495
0.256580
0.686352
1.323188
1.720743
2.07961
2.51765
2.83136
3.8193
0.256432
0.685805
1.321237
1.717144
2.07387
2.50832
2.81876
3.7921
0.256297
0.685306
1.319460
1.713872
2.06866
2.49987
2.80734
3.7676
0.256173
0.684850
1.317836
1.710882
2.06390
2.49216
2.79694
3.7454
0.256060
0.684430
1.316345
1.708141
2.05954
2.48511
2.78744
3.7251
0.255955
0.684043
1.314972
1.705618
2.05553
2.47863
2.77871
3.7066
0.255858
0.683685
1.313703
1.703288
2.05183
2.47266
2.77068
3.6896
0.255768
0.683353
1.312527
1.701131
2.04841
2.46714
2.76326
3.6739
0.255684
0.683044
1.311434
1.699127
2.04523
2.46202
2.75639
3.6594
0.255605
0.682756
1.310415
1.697261
2.04227
2.45726
2.75000
3.6460
∞
0.253347
0.674490
1.281552
1.644854
1.95996
2.32635
2.57583
3.2905
ПРИЛОЖЕНИЕ 3 Алгоритм решения задачи моделирования работы СМО
/// <summary>
/// класс заявка
/// </summary>
class Item
{
//индекс
public int index;
//и ее значение
public double value;
public Item(int i, double v)
{
index = i;
value = v;
}
}
/// <summary>
/// функция, моделирующая выполнение и отклонение заявок
/// </summary>
/// <param name="T">поток заявок</param>
/// <param name="b">число мест в очереди</param>
/// <param name="tb">время обслуживания</param>
/// <param name="QTask">возвращаемый поток выполн.заявок</param>
/// <param name="queue">очередь</param>
/// <param name="WorkF">выполн.заявки</param>
/// <param name="leaveTask">отклоненные заявки</param>
void Work(List<double> T, int b, double tb, out List<Item> QTask,out Queue<Item> queue,out List<Item> WorkF, out List<Item> leaveTask)
{
QTask = null; queue = null; WorkF = null; leaveTask = null;
if (T == null) return;
if (T.Count == 0) return;
QTask = new List<Item>();//обработка заявки
queue = new Queue<Item>();// очередь
WorkF = new List<Item>(); //выполненные и вышедшие заявки
leaveTask = new List<Item>();//отклоненные заявки
//первая зааявка сразу уходит на выполнение
WorkF.Add(new Item(0, T[0] + tb));
QTask.Add(new Item(0, T[0]));
for (int i = 1; i < T.Count; i++)
{
//берем время вхождения текущей заявки в СМО
//если есть заявка, которая выполняется до ее прихода, выполняем ее
while (WorkF[WorkF.Count - 1].value <= T[i])
{
//проверяем, есть ли заявка в очереди
if (queue.Count!= 0)
{
//забираем ее
Item buff = queue.Dequeue();
//добавляем в массив на выполнение
//причем задаем время ее завершения
WorkF.Add(new Item(buff.index,
//если заявка давно висит в очереди
buff.value < WorkF[WorkF.Count - 1].value?
//она выполняется сразу после предыдущей заявки
WorkF[WorkF.Count - 1].value + tb:
//если она только пришла, а очередь пустовала,
//то она выполняется после своего прихода
buff.value + tb));
}
else break;
}
//если в очереди есть места, сразу добавляем в нее заявку
if (queue.Count < b)
{
queue.Enqueue(new Item(i, T[i]));
QTask.Add(new Item(i, T[i]));
}
else
{
//иначе заявка отклоняется
leaveTask.Add(new Item(i, T[i]));
}
}
//когда прошли по всем заявкам, а в очереди еще что-то осталось, завершаем и их
while (queue.Count!= 0)
{
Item buff = queue.Dequeue();
WorkF.Add(new Item(buff.index,
buff.value < WorkF[WorkF.Count - 1].value?
WorkF[WorkF.Count - 1].value + tb:
buff.value +tb));
}
}
Воспользуйтесь поиском по сайту: