Оптимизация распределения продукции между производственными предприятиями, складскими объектами и торговыми точками
 
 
В данном примере представлено, как настроить и решить задачу смешанного целочисленного линейного программирования. Задача заключается в нахождении оптимальных уровней производства и распределения продукции между заводами, складами и точками продаж.
 
 
Пример состоит из исполняемого скрипта, в котором производится генерация случайных местоположений заводов, складов и точек продаж. Параметр масштабирования  влияет на размер координатной сетки (в которой расположены производственные и распределительные объекты) и на количество объектов в ней. Изменяя его вы можете тестировать гипотезы о пропускной способности и реализуемости некоторых задач в такой логистической системе.
 
 
Для заданного значения параметра масштабирования  предположим, что существует следующее количество объектов:
Эти объекты расположены в отдельных целочисленных точках сетки от  до  в направлениях  и . Чтобы местоположения объектов не совпадали, необходимо выполнение условия: .
В данном примере примем , , , .
 
 
Производство и распределение
 
 
Существует P видов продукции, производимых предприятиями. Примем .
Спрос на каждый продукт  в точке продаж  составляет . Спрос — это количество, которое может быть продано за временной интервал. Одно из ограничений заключается в том, что система должна производить и распределять именно то количество продукции, на которое существует спрос.
Ограничения на производственную мощность предприятий и ёмкость складов:
- 
Производство продукта  на заводе  меньше . 
- 
Вместимость складских объектов  составляет  или . 
- 
Количество продукта , которое может быть перевезено со склада  в точку продаж за временной интервал, меньше  или , где  или — это коэффициент оборачиваемости продукта . 
Предположим, что каждая точка продаж получает свои поставки только с одного склада. Часть задачи — определить наиболее выгодное сопоставление точек продаж со складами.
 
 
Стоимость перевозки продуктов с завода на склад и со склада в точку продаж зависит от расстояния между объектами и от конкретного продукта. Расстояние в этом примере — это расстояние по координатной сетке. Оно равно сумме абсолютных разниц координат  и .
Стоимость производства единицы продукта  на заводе  составляет:  или .
 
 
Имея набор местоположений объектов, а также ограничения на производственную мощность, ёмкость складов и спрос, найдём:
- 
Уровень производства каждого вида продукции на каждом предприятии; 
- 
Схему движения продукции с производственных предприятий на склады; 
- 
Схему движения продукции со складских объектов в точки продаж. 
Полученные результаты должны гарантировать, что спрос удовлетворён, а общие затраты минимальны. Также требуется, чтобы каждая точка продаж получала всю свою продукцию только с  одного определённого склада.
 
 
Переменные и уравнения для задачи оптимизации
Управляющие переменные, то есть те, которые можно изменять в процессе оптимизации:
- 
 — количество продукта , которое перевозится с завода  на склад  
- 
 — бинарная переменная, принимающая значение , когда точка продаж s связана со складом  
Целевая функция для минимизации:
Ограничения целевой функции:
- 
 (производственная мощность предприятия). 
- 
 (удовлетворение спроса на продукцию). 
- 
 (вместимость складских объектов). 
- 
 (каждая торговая точка связана с одним складским объектом). 
- 
 (значение произведённой продукции является неотрицательной величиной). 
- 
 (логическое значение ) 
Переменные  и  присутствуют в целевой функции и ограничениях только в первой степени. Поскольку переменная  ограничена целочисленными значениями, задача представляет собой смешанно-целочисленную задачу линейного программирования.
 
 
Генерируем исходные данные для задачи
 
 
Сгенерируем случайное местоположение объектов:
 
 
Разумеется, выбор случайных мест для размещения объектов не является реалистичным. Данный пример предназначен для демонстрации методов решения, а не того, как выбирать удачные местоположения для объектов. Отобразим объекты на схеме.
 
 
Создадим случайные значения себестоимости продукции, производственных мощностей, коэффициентов оборачиваемости и спроса:
 
 
Создадим матрицы распределений расстояний:
 
 
Создадим задачу оптимизации, переменные и ограничения:
 
 
Ограничение производственной мощности:
 
 
Ограничение на удовлетворение спроса:
 
 
Ограничение на вместимость складских объектов:
 
 
Ограничение на назначение складов точкам продаж:
 
 
Первая часть целевой функции — производственные затраты:
 
 
Вторая часть целевой функции — транспортные затраты от фабрик к складам:
 
 
Третья часть целевой функции — сумма транспортных расходов со складов до торговых точек:
 
 
Полный вид целевой функции:
 
 
Настройка параметров решателя:
 
 
Решение оптимизационной задачи:
 
 
Running HiGHS 1.11.0 (git hash: 364c83a51e): Copyright (c) 2025 HiGHS under MIT licence terms
MIP  has 1333 rows; 21142 cols; 80724 nonzeros; 1922 integer variables (1922 binary)
Coefficient ranges:
  Matrix [1e+00, 4e+03]
  Cost   [3e+01, 2e+06]
  Bound  [1e+00, 1e+00]
  RHS    [1e+00, 2e+04]
Presolving model
1333 rows, 21142 cols, 80724 nonzeros  0s
1333 rows, 21142 cols, 80724 nonzeros  0s
Solving MIP model with:
   1333 rows
   21142 cols (1922 binary, 0 integer, 0 implied int., 19220 continuous, 0 domain fixed)
   80724 nonzeros
Src: B => Branching; C => Central rounding; F => Feasibility pump; J => Feasibility jump;
     H => Heuristic; L => Sub-MIP; P => Empty MIP; R => Randomized rounding; Z => ZI Round;
     I => Shifting; S => Solve LP; T => Evaluate node; U => Unbounded; X => User solution;
     z => Trivial zero; l => Trivial lower; u => Trivial upper; p => Trivial point
        Nodes      |    B&B Tree     |            Objective Bounds              |  Dynamic Constraints |       Work      
Src  Proc. InQueue |  Leaves   Expl. | BestBound       BestSol              Gap |   Cuts   InLp Confl. | LpIters     Time
         0       0         0   0.00%   0               inf                  inf        0      0      0         0     1.0s
 R       0       0         0   0.00%   46513964.721    50547653.24682     7.98%        0      0      0      2284     1.5s
 C       0       0         0   0.00%   46798746.52812  49053386.94956     4.60%     1202     87      0      2826     2.7s
 L       0       0         0   0.00%   46803901.39706  46804109.73308     0.00%     1491    112      0      2892     8.2s
         1       0         1 100.00%   46803901.39706  46804109.73308     0.00%     1491    112      0      3959     8.3s
Solving report
  Status            Optimal
  Primal bound      46804109.7331
  Dual bound        46803901.3971
  Gap               0.000445% (tolerance: 0.01%)
  P-D integral      0.345085736919
  Solution status   feasible
                    46804109.7331 (objective)
                    0 (bound viol.)
                    0 (int. viol.)
                    0 (row viol.)
  Timing            8.28 (total)
                    0.00 (presolve)
                    0.00 (solve)
                    0.00 (postsolve)
  Max sub-MIP depth 2
  Nodes             1
  Repair LPs        0 (0 feasible; 0 iterations)
  LP iterations     3959 (total)
                    0 (strong br.)
                    608 (separation)
                    1067 (heuristics)
 
 
 
 
 
Округлим значение  до целого:
 
 
Ответим на вопрос — Сколько торговых точек обслуживает каждый склад? Обратите внимание, что в данном случае некоторым складам соответствует число 0. В найденном оптимальном решении эти склады не задействованы.
 
 
Точки продаж: [0 1 3 3 2 3 3 3 2 1 3 2 2 3 4 0 2 3 2 2 3 2 0 1 0 4 1 4 0 1 2]
 
 
 
 
 
Построим схему связи между каждой торговой точкой и соответствующим ей складом:
 
 
В этом примере мы показали, как полноценно решить логистическую задачу, найдя оптимальное решение для заданных условий и ограничений.
Весь код можно было бы скрыть за "Маскированной кодовой ячейкой" и, меняя ее параметры, получать новые решения под новые задачи. Также интересно было бы изучить форматы загрузки исходных данных из картографических или других приложений.
 
 
 
 
{"id": "id_7091a730_28fa_4894_ab05_57d932f58f6e", "data": [{"xaxis": "x", "colorbar": {"y": 0.513888888888889, "title": {"text": ""}, "len": 0.9525371828521435, "x": 0.9934383202099738}, "yaxis": "y", "x": [8, 15, 20, 16, 17, 2, 17, 12, 17, 24, 23, 14, 19, 16, 13, 4, 20, 6, 25, 17, 9, 11, 14, 8, 10, 24, 7, 4, 19, 5, 19], "showlegend": true, "mode": "markers", "name": "Производственные предприятия", "legendgroup": "Производственные предприятия", "marker": {"symbol": "square", "color": "rgba(255, 255, 255, 1.000)", "line": {"color": "rgba(255, 0, 0, 1.000)", "width": 1}, "size": 8}, "y": [6, 14, 18, 20, 13, 20, 24, 11, 21, 5, 6, 4, 8, 14, 1, 16, 6, 22, 9, 14, 3, 24, 13, 4, 24, 9, 3, 5, 19, 19, 25], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.513888888888889, "title": {"text": ""}, "len": 0.9525371828521435, "x": 0.9934383202099738}, "yaxis": "y", "x": [22, 3, 12, 4, 19, 17, 19, 11, 7, 22, 9, 25, 25, 15, 22, 24, 4, 20, 23, 22, 24, 3, 25, 1, 9, 21, 7, 10, 4, 8, 3], "showlegend": true, "mode": "markers", "name": "Складские объекты", "legendgroup": "Складские объекты", "marker": {"symbol": "triangle-up", "color": "rgba(255, 255, 255, 1.000)", "line": {"color": "rgba(0, 128, 0, 1.000)", "width": 1}, "size": 8}, "y": [23, 11, 2, 23, 9, 8, 24, 11, 16, 25, 5, 4, 3, 25, 4, 23, 1, 12, 16, 18, 6, 18, 22, 6, 10, 21, 10, 17, 12, 12, 20], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.513888888888889, "title": {"text": ""}, "len": 0.9525371828521435, "x": 0.9934383202099738}, "yaxis": "y", "x": [11, 7, 25, 23, 13, 23, 21, 18, 14, 21, 3, 11, 20, 12, 15, 8, 25, 22, 19, 7, 25, 15, 3, 22, 17, 25, 21, 13, 19, 15, 14, 16, 19, 25, 20, 10, 8, 23, 13, 17, 10, 20, 7, 4, 23, 12, 6, 22, 22, 20, 13, 7, 21, 3, 16, 13, 2, 4, 8, 4, 8, 24], "showlegend": true, "mode": "markers", "name": "Торговые точки", "legendgroup": "Торговые точки", "marker": {"symbol": "circle", "color": "rgba(255, 255, 255, 1.000)", "line": {"color": "rgba(0, 0, 255, 1.000)", "width": 1}, "size": 8}, "y": [20, 15, 15, 4, 13, 1, 23, 10, 23, 24, 2, 23, 1, 4, 16, 25, 21, 20, 5, 25, 24, 22, 17, 7, 10, 20, 2, 17, 10, 19, 17, 19, 16, 13, 2, 1, 24, 11, 11, 2, 3, 21, 19, 9, 10, 8, 14, 2, 1, 4, 8, 23, 8, 6, 12, 12, 10, 4, 8, 15, 17, 14], "type": "scatter"}], "config": {"showlegend": true, "xaxis": {"showticklabels": true, "gridwidth": 0.5, "tickvals": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "range": [0, 25.5], "domain": [0.03619130941965587, 0.9934383202099738], "mirror": false, "tickangle": 0, "showline": true, "ticktext": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], "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": false, "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": [], "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, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "range": [0, 25.5], "domain": [0.03762029746281716, 0.9901574803149606], "mirror": false, "tickangle": 0, "showline": true, "ticktext": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], "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": false, "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"}, "legend": {"yanchor": "middle", "xanchor": "lower", "bordercolor": "rgba(0, 0, 0, 1)", "bgcolor": "rgba(255, 255, 255, 1.000)", "borderwidth": 1, "tracegroupgap": 0, "y": -0.15, "font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 11}, "title": {"font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 15}, "text": ""}, "traceorder": "normal", "x": 0.5}, "width": 721.640625}}
{"id": "id_a34195b9_c7ef_4e18_aadb_d26a3f687eb4", "data": [{"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [8, 15, 20, 16, 17, 2, 17, 12, 17, 24, 23, 14, 19, 16, 13, 4, 20, 6, 25, 17, 9, 11, 14, 8, 10, 24, 7, 4, 19, 5, 19], "showlegend": true, "mode": "markers", "name": "Производственные предприятия", "legendgroup": "Производственные предприятия", "marker": {"symbol": "square", "color": "rgba(255, 255, 255, 1.000)", "line": {"color": "rgba(255, 0, 0, 1.000)", "width": 1}, "size": 8}, "y": [6, 14, 18, 20, 13, 20, 24, 11, 21, 5, 6, 4, 8, 14, 1, 16, 6, 22, 9, 14, 3, 24, 13, 4, 24, 9, 3, 5, 19, 19, 25], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [22, 3, 12, 4, 19, 17, 19, 11, 7, 22, 9, 25, 25, 15, 22, 24, 4, 20, 23, 22, 24, 3, 25, 1, 9, 21, 7, 10, 4, 8, 3], "showlegend": true, "mode": "markers", "name": "Складские объекты", "legendgroup": "Складские объекты", "marker": {"symbol": "triangle-up", "color": "rgba(255, 255, 255, 1.000)", "line": {"color": "rgba(0, 128, 0, 1.000)", "width": 1}, "size": 8}, "y": [23, 11, 2, 23, 9, 8, 24, 11, 16, 25, 5, 4, 3, 25, 4, 23, 1, 12, 16, 18, 6, 18, 22, 6, 10, 21, 10, 17, 12, 12, 20], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [11, 7, 25, 23, 13, 23, 21, 18, 14, 21, 3, 11, 20, 12, 15, 8, 25, 22, 19, 7, 25, 15, 3, 22, 17, 25, 21, 13, 19, 15, 14, 16, 19, 25, 20, 10, 8, 23, 13, 17, 10, 20, 7, 4, 23, 12, 6, 22, 22, 20, 13, 7, 21, 3, 16, 13, 2, 4, 8, 4, 8, 24], "showlegend": true, "mode": "markers", "name": "Торговые точки", "legendgroup": "Торговые точки", "marker": {"symbol": "circle", "color": "rgba(255, 255, 255, 1.000)", "line": {"color": "rgba(0, 0, 255, 1.000)", "width": 1}, "size": 8}, "y": [20, 15, 15, 4, 13, 1, 23, 10, 23, 24, 2, 23, 1, 4, 16, 25, 21, 20, 5, 25, 24, 22, 17, 7, 10, 20, 2, 17, 10, 19, 17, 19, 16, 13, 2, 1, 24, 11, 11, 2, 3, 21, 19, 9, 10, 8, 14, 2, 1, 4, 8, 23, 8, 6, 12, 12, 10, 4, 8, 15, 17, 14], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [11, 10, 10], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [20, 20, 17], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [7, 7, 7], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [15, 15, 16], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [25, 25, 23], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [15, 16, 16], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [23, 23, 25], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [4, 4, 4], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [13, 13, 11], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [13, 11, 11], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [23, 25, 25], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [1, 1, 3], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [21, 21, 21], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [23, 21, 21], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [18, 17, 17], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [10, 10, 8], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [14, 15, 15], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [23, 23, 25], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [21, 19, 19], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [24, 24, 24], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [3, 3, 4], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [2, 1, 1], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [11, 19, 19], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [23, 23, 24], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [20, 22, 22], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [1, 1, 4], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [12, 12, 12], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [4, 4, 2], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [15, 10, 10], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [16, 16, 17], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [8, 3, 3], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [25, 25, 20], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [25, 25, 21], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [21, 21, 21], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [22, 22, 22], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [20, 20, 18], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [19, 24, 24], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [5, 5, 6], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [7, 4, 4], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [25, 25, 23], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [25, 22, 22], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [24, 24, 25], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [15, 15, 15], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [22, 25, 25], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [3, 3, 3], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [17, 18, 18], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [22, 22, 24], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [7, 6, 6], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [17, 17, 17], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [10, 10, 8], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [25, 25, 21], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [20, 21, 21], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [21, 21, 22], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [2, 4, 4], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [13, 10, 10], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [17, 17, 17], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [19, 19, 19], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [10, 9, 9], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [15, 15, 15], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [19, 19, 25], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [14, 10, 10], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [17, 17, 17], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [16, 16, 19], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [19, 24, 24], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [19, 22, 22], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [16, 16, 18], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [25, 25, 20], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [13, 12, 12], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [20, 20, 25], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [2, 3, 3], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [10, 10, 12], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [1, 2, 2], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [8, 4, 4], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [24, 24, 23], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [23, 23, 20], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [11, 12, 12], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [13, 13, 11], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [11, 11, 11], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [17, 17, 12], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [2, 2, 2], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [10, 9, 9], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [3, 3, 5], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [20, 21, 21], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [21, 21, 21], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [7, 7, 3], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [19, 20, 20], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [4, 7, 7], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [9, 9, 10], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [23, 23, 24], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [10, 6, 6], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [12, 12, 9], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [8, 5, 5], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [6, 6, 8], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [14, 12, 12], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [22, 22, 22], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [2, 2, 4], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [22, 22, 22], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [1, 1, 4], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [20, 25, 25], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [4, 4, 4], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [13, 13, 17], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [8, 8, 8], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [7, 4, 4], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [23, 23, 23], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [21, 19, 19], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [8, 8, 9], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [3, 3, 1], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [6, 6, 6], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [16, 20, 20], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [12, 12, 12], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [13, 13, 11], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [12, 11, 11], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [2, 2, 3], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [10, 11, 11], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [4, 4, 4], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [4, 4, 1], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [8, 9, 9], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [8, 8, 5], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [4, 3, 3], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [15, 15, 18], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [8, 7, 7], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [17, 17, 16], "type": "scatter"}, {"xaxis": "x", "colorbar": {"y": 0.4965277777777778, "title": {"text": ""}, "len": 0.9178149606299213, "x": 0.9934383202099738}, "yaxis": "y", "x": [24, 23, 23], "showlegend": false, "mode": "lines", "name": "", "legendgroup": "", "line": {"color": "rgba(0, 128, 0, 1.000)", "shape": "linear", "dash": "dash", "width": 1}, "y": [14, 14, 16], "type": "scatter"}], "config": {"showlegend": true, "xaxis": {"showticklabels": true, "gridwidth": 0.5, "tickvals": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "range": [0, 25.5], "domain": [0.03619130941965587, 0.9934383202099738], "mirror": false, "tickangle": 0, "showline": true, "ticktext": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], "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": false, "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": 14}, "yref": "paper", "showarrow": false, "text": "Оптимальная схема распределения продукции", "xref": "paper", "x": 0.5148148148148148}], "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, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "range": [0, 25.95], "domain": [0.03762029746281716, 0.9554352580927384], "mirror": false, "tickangle": 0, "showline": true, "ticktext": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], "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": false, "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"}, "legend": {"yanchor": "middle", "xanchor": "lower", "bordercolor": "rgba(0, 0, 0, 1)", "bgcolor": "rgba(255, 255, 255, 1.000)", "borderwidth": 1, "tracegroupgap": 0, "y": -0.15, "font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 11}, "title": {"font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 15}, "text": ""}, "traceorder": "normal", "x": 0.5}, "width": 721.640625}}