Теория массового обслуживания: базовые примеры¶
Начнем осваивать инструментарий библиотеки EventSimulation
для аналитического изучения моделей дискретной событийной логики и систем массового обслуживания (СМО).
Теория массового обслуживания включает инструменты анализа работы сложных систем, которые работают с многократно происходящими стохастическими событиями и позволяют оценить такие характеристики системы, как наличие очередей, среднее время ожидания перед началом обслуживания или среднее время простоя оборудования.
Общие компоненты любой системы массового обслуживания - это наличие входящего потока заявок, заданная структура системы (количество и емкость накопителей, очередей и других приборов обслуживания), время обслуживания заявок и дисциплина обслуживания (алгоритм распределения заявок между обработчиками, выбора заявок из очереди и формирования очередей).
Библиотека EventSimulation¶
Библиотека EventSimulation
позволяет программировать системы, основанные на дискретной событийной логике. В таких системах время между событиями может выражаться в относительных величинах, а симуляция основана на событиях, а не на явно заданном непрерывном векторе времени, как в симуляции графических моделей созданных из блоков.
Для начала, установим эту библиотеку в нашу систему (этот шаг выполняется однократно, при повторном запуске закомментируйте следующую строку).
Рассмотрим самую простую ситуацию - когда пять клиентов "пришли" в нашу систему с интервалом 1 единица времени между ними, а обслуживание каждого из них заняло 1.5 единицы времени.
1.0: Новый клиент
2.0: Новый клиент
2.5: Уход клиента, который пришел в 1.0
3.0: Новый клиент
3.5: Уход клиента, который пришел в 2.0
4.0: Новый клиент
4.5: Уход клиента, который пришел в 3.0
5.0: Новый клиент
5.5: Уход клиента, который пришел в 4.0
6.5: Уход клиента, который пришел в 5.0
Внутри функции arrival
для каждого клиента регистрируется время прихода и создается событие ухода, которое сохраняется в диспетчер (Scheduler
) вместе с анонимной функцией, которая будет вызвана диспетчером когда настанет время.
Значение x.now
берется из вектора состояния диспетчера.
Если мы хотим проанализировать ситуацию с неограниченным количеством поступающих на сход объектов или событий, то нам будет недостаточно обрабатывать клиентов в цикле. Нам нужен будет источник событий, который мы создадим при помощи repeat_register
.
1.0: Новый клиент
2.0: Новый клиент
2.5: Уход клиента, который пришел в 1.0
3.0: Новый клиент
3.5: Уход клиента, который пришел в 2.0
4.0: Новый клиент
4.5: Уход клиента, который пришел в 3.0
5.0: Новый клиент
5.5: Уход клиента, который пришел в 4.0
6.0: Новый клиент
6.5: Уход клиента, который пришел в 5.0
7.0: Новый клиент
Клиенты по-прежнему приходят раз в 1 единицу времени, но теперь их очередь бесконечна. Длительность симуляции определена в команде go!(s, 7)
как 7 единиц времени.
Добавим в нашу модель счетчик клиентов. Для этого нам понадобится определить структуру CounterState
, которая будет инициализироваться для диспетчера Scheduler
при его создании.
Стоит учесть, что переопределение уже созданных структур обычно требует перезагрузки ядра Julia (например средствами GUI Engee).
0.07: Новый клиент (клиентов в очереди 1)
0.42: Новый клиент (клиентов в очереди 2)
1.07: Уход клиента, который пришел в 0.07 (клиентов в очереди 2)
1.12: Новый клиент (клиентов в очереди 2)
1.42: Уход клиента, который пришел в 0.42 (клиентов в очереди 2)
1.75: Новый клиент (клиентов в очереди 2)
2.12: Уход клиента, который пришел в 1.12 (клиентов в очереди 2)
2.66: Новый клиент (клиентов в очереди 2)
2.75: Уход клиента, который пришел в 1.75 (клиентов в очереди 2)
2.86: Новый клиент (клиентов в очереди 2)
3.63: Новый клиент (клиентов в очереди 3)
3.66: Уход клиента, который пришел в 2.66 (клиентов в очереди 3)
3.86: Уход клиента, который пришел в 2.86 (клиентов в очереди 2)
4.41: Новый клиент (клиентов в очереди 2)
4.63: Уход клиента, который пришел в 3.63 (клиентов в очереди 2)
Напоследок реализуем классическую систему со следующими параметрами:
- входящий поток заявок имеет пуассоновское распределение
- распределение времени обслуживания экспоненциальное
- число обслуживающих серверов/обработчиков заявок равно 1
- очередь на обслуживание бесконечна,
- дисциплина обслуживания называется FCFS (FIFO) от first come, first served или first in, first out.
На всякий случай поставим библиотеки, которых может по умолчанию не быть в системе.
После их установки в систему мы можем симулировать СМО M/M/1 при помощи следующего алгоритма.
Структура MMQueue
накапливает статистику по текущей работе диспетчера (по ходу текущей симуляции) и позволяет нам получить на выходе функции run!
среднее значение разницы между временем поступления и временем ухода каждого конкретного объекта (mean( d-a )
), прошедших через систему в ходе симуляции 1 000 000
временных единиц.
Мы видим, что при частоте наступления событий равной 1.11, 3 из 20 запусков привели к превышению заданного среднего времени обслуживания.
Мы изучили базовые приемы моделирования систем массового обслуживания. Engee позволяет вставлять в циклы симуляции обращение к внешним информационным системам или запуск моделей, размещенных на холсте, поэтому инструменты теории массового обслуживания могут стать важной частью цепочки анализа надежности систем.
{"id": "2ba8d281-9e8e-4b0c-9831-925239e768ca", "data": [{"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y1", "yaxis": "y", "legendgroup": "y1", "line": {"color": "rgba(0, 154, 250, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0014986434662100923, 0.0022455085612301806, 0.00180280667043764, 0.003358738522049709, 0.0022856860110587185, 0.0014773395111221665, 0.002615974477159666, 0.012482908552718941, 0.003744785320720201], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y2", "yaxis": "y", "legendgroup": "y2", "line": {"color": "rgba(227, 111, 71, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.004236348757587494, 0.004506547157481222, 0.0063578383221232215, 0.0036200548439846436, 0.0009060886932403811, 0.008583880617931028, 0.004713402274835077, 0.017485042508208704, 0.013835202997946272], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y3", "yaxis": "y", "legendgroup": "y3", "line": {"color": "rgba(62, 164, 78, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0014969359665697457, 0.0015262846581820533, 0.0016523872666823758, 0.0002646247782567279, 0.007389618589934588, 0.010418019415940005, 0.0033055084419204572, 0.0038864446092263805, 0.016857805961442596], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y4", "yaxis": "y", "legendgroup": "y4", "line": {"color": "rgba(195, 113, 210, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0005894852942092133, 0.0003482175082172301, 0.0008870652279292512, 0.0038964549719162633, 0.00808047512540333, 0.0001270001881006344, 0.007704717331931121, 0.0043245684461151734, 0.007824605165514642], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y5", "yaxis": "y", "legendgroup": "y5", "line": {"color": "rgba(172, 142, 24, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.003329578990683979, 0.001567194404273664, 0.004298124641764933, 0.002647358690497814, 0.003989669532864726, 0.0006274833005757152, 0.009900908899635574, 0.010042864346661018, 0.024286374854722848], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y6", "yaxis": "y", "legendgroup": "y6", "line": {"color": "rgba(0, 170, 174, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.007406329171919412, 0.0032813365498371994, 0.006604410456475307, 0.00070258218624486, 0.0028179461541956163, 0.007319125262141624, 0.0029093307609084906, 0.009665639751141542, 0.05546983649809922], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y7", "yaxis": "y", "legendgroup": "y7", "line": {"color": "rgba(237, 94, 147, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0038580425164251864, 0.0020781753227534505, 0.0011830549470817076, 0.0011752734305734425, 0.004263093098126891, 0.0026698007772454346, 0.01213148962112831, 0.0006693138047348945, 0.03193412369408666], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y8", "yaxis": "y", "legendgroup": "y8", "line": {"color": "rgba(198, 130, 37, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.00013714829548416851, 0.00019379700921928755, 0.0032604571780059377, 0.005856324827832271, 0.005511193286022231, 0.00011584099061590081, 0.01640382074448743, 0.0033114059746319757, 0.012893064671145149], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y9", "yaxis": "y", "legendgroup": "y9", "line": {"color": "rgba(0, 169, 141, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.003706090183733579, 0.001352962596152807, 0.0009936808751564996, 0.0021594139600213946, 0.008014796552797354, 0.0007368512129951599, 0.0055102441335355135, 0.00014694816734972527, 0.02338050117481494], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y10", "yaxis": "y", "legendgroup": "y10", "line": {"color": "rgba(142, 151, 30, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.001939849103147262, 0.003101349905991646, 0.00028469536297981435, 0.001900638117428688, 0.0017410188530246895, 0.00867151871155225, 0.012352935948647614, 0.011063385555341698, 0.009463694977454029], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y11", "yaxis": "y", "legendgroup": "y11", "line": {"color": "rgba(0, 169, 204, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.00548587325116312, 0.0005804411151881794, 0.0011671744657784089, 0.005917701832306443, 0.0011800025607744402, 0.012012786110566331, 0.0038691957367136265, 0.008736383258456826, 0.020209441577511145], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y12", "yaxis": "y", "legendgroup": "y12", "line": {"color": "rgba(155, 127, 233, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.00040995808765798003, 0.0001607667997219897, 0.0027397598043273907, 0.003051541759012344, 0.005006766611099889, 0.004582868969265963, 0.0010594637621984537, 0.01159670896842524, 0.011257403889373352], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y13", "yaxis": "y", "legendgroup": "y13", "line": {"color": "rgba(97, 141, 246, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0027636366444762084, 0.004961083246854958, 0.001537446567602796, 0.002399177249677753, 6.986920243723382e-05, 0.0014790978029425306, 0.0022532487463795547, 0.0004677165562951835, 0.004740501433868283], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y14", "yaxis": "y", "legendgroup": "y14", "line": {"color": "rgba(240, 96, 115, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0008335768265749222, 0.002011259808284649, 0.0023594111719921207, 0.00031282944815991254, 0.0008038576347105808, 0.0025875425494810145, 0.009891930521567671, 0.002015223750460482, 0.016938899708251798], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y15", "yaxis": "y", "legendgroup": "y15", "line": {"color": "rgba(221, 101, 182, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0023563473233448873, 0.0016096423571314578, 0.004599693628882351, 0.003898012037287124, 0.005482483031902907, 0.00225168489863381, 0.0011617348713076625, 0.0009598743506891161, 0.014904636533575877], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y16", "yaxis": "y", "legendgroup": "y16", "line": {"color": "rgba(108, 159, 51, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0011080424922751408, 0.0007606514437124012, 0.0005995267126031045, 0.0024331249457472115, 0.0005294529019109762, 0.0004932567810713717, 0.002096602968832073, 0.015402122769636817, 0.006236108814934971], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y17", "yaxis": "y", "legendgroup": "y17", "line": {"color": "rgba(0, 154, 250, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0017094183998382917, 0.004136354416709009, 0.0023842386339649746, 0.0002995013116644518, 0.0021162115037320905, 0.001003621749648298, 0.00286084668608777, 0.004018677197921372, 0.018668369635882587], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y18", "yaxis": "y", "legendgroup": "y18", "line": {"color": "rgba(227, 111, 71, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0082906279072954, 0.004312487382682306, 0.00012939702382241958, 0.0018798644385511487, 0.0027213667726011526, 0.0013225945675623407, 0.009115819734903718, 0.0021506043336567693, 0.031491534719506165], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y19", "yaxis": "y", "legendgroup": "y19", "line": {"color": "rgba(62, 164, 78, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.0021627132832620077, 0.0012368839999161718, 1.6108662044156397e-05, 0.0034371191080966312, 0.004192408877098819, 0.008053602666574733, 0.011030068999756448, 0.002603421527618055, 0.002094440713706791], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y20", "yaxis": "y", "legendgroup": "y20", "line": {"color": "rgba(195, 113, 210, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.005100577332864287, 0.003159508789113863, 0.003155206696361823, 0.002976934178319235, 0.00348543307727045, 0.012026635032551525, 0.002597815870978737, 0.006843762979601431, 0.005332398185913245], "type": "scatter", "x": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 9, "currentCount": 9}}}, {"showlegend": true, "mode": "lines", "xaxis": "x", "colorbar": {"y": 0.48958333333333337, "title": {"text": ""}, "len": 0.9039260717410325, "x": 0.9934383202099738}, "name": "y21", "yaxis": "y", "legendgroup": "y21", "line": {"color": "rgba(255, 0, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [0.03, 0.03], "type": "scatter", "x": [-84.72400000000002, 85.72400000000002], "zaxis": null, "z": null, "metadata": {"shouldEnableSmartZoom": false, "smartZoomParams": {"minCount": 25000, "maxCount": 2, "currentCount": 2}}}], "config": {"showlegend": false, "xaxis": {"showticklabels": true, "gridwidth": 0.5, "tickvals": [0.2, 0.4, 0.6000000000000001, 0.8], "range": [0.07599999999999996, 0.924], "domain": [0.0658209390492855, 0.9934383202099738], "mirror": false, "tickangle": 0, "showline": true, "ticktext": ["0.2", "0.4", "0.6", "0.8"], "zeroline": false, "tickfont": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 11}, "zerolinecolor": "rgba(0, 0, 0, 1)", "anchor": "y", "visible": true, "ticks": "inside", "tickmode": "array", "linecolor": "rgba(0, 0, 0, 1)", "showgrid": true, "title": {"text": "", "font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 15}}, "gridcolor": "rgba(0, 0, 0, 0.1)", "tickcolor": "rgb(0, 0, 0)", "type": "linear"}, "paper_bgcolor": "rgba(255, 255, 255, 1.000)", "annotations": [{"yanchor": "top", "xanchor": "center", "rotation": 0, "y": 1, "font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 20}, "yref": "paper", "showarrow": false, "text": "Среднее время обслуживания", "xref": "paper", "x": 0.5296296296296296}], "height": 400, "margin": {"l": 0, "b": 20, "r": 0, "t": 20}, "plot_bgcolor": "rgba(255, 255, 255, 1.000)", "yaxis": {"showticklabels": true, "gridwidth": 0.5, "tickvals": [0, 0.010000000000000002, 0.020000000000000004, 0.030000000000000006, 0.04000000000000001, 0.05000000000000001], "range": [-0.0016475031730374956, 0.057133448333180875], "domain": [0.03762029746281716, 0.9415463692038496], "mirror": false, "tickangle": 0, "showline": true, "ticktext": ["0.00", "0.01", "0.02", "0.03", "0.04", "0.05"], "zeroline": false, "tickfont": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 11}, "zerolinecolor": "rgba(0, 0, 0, 1)", "anchor": "x", "visible": true, "ticks": "inside", "tickmode": "array", "linecolor": "rgba(0, 0, 0, 1)", "showgrid": true, "title": {"text": "", "font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 15}}, "gridcolor": "rgba(0, 0, 0, 0.1)", "tickcolor": "rgb(0, 0, 0)", "type": "linear"}, "width": 858.09375}}