Теория массового обслуживания: базовые примеры
Начнем осваивать инструментарий библиотеки 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}}