{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting Started" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The package `stochastic_matching` allows you to:\n", "\n", "- Build a stochastic model (from scratch, from one of the provided models, or by some combination).\n", "- Attach arrival rates on nodes to it.\n", "- Study the theoretical stability of the system.\n", "- Explore the feasible matching rates.\n", "- Use a simulator to study the behavior of the system under pre-defined or custom-made policies." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Graph building" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Two types of graphs can be used:\n", "\n", "- Simple graphs, where edges are pairs of distinct nodes.\n", "- Hypergraphs, where edges are arbitrary non-empty subsets of nodes, possibly with multiplicity." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simple graphs can be created from an adjacency matrix." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.223990Z", "start_time": "2022-01-27T13:28:50.307667Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:22.262691Z", "iopub.status.busy": "2025-09-26T18:46:22.262691Z", "iopub.status.idle": "2025-09-26T18:46:23.457475Z", "shell.execute_reply": "2025-09-26T18:46:23.457475Z", "shell.execute_reply.started": "2025-09-26T18:46:22.262691Z" } }, "outputs": [], "source": [ "import numpy as np\n", "import stochastic_matching as sm\n", "\n", "adja = np.array([[0, 1, 1, 0], [1, 0, 1, 1], [1, 1, 0, 1], [0, 1, 1, 0]])\n", "\n", "diamond = sm.Model(adjacency=adja)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The graph can be displayed." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.254840Z", "start_time": "2022-01-27T13:28:52.229493Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.457475Z", "iopub.status.busy": "2025-09-26T18:46:23.457475Z", "iopub.status.idle": "2025-09-26T18:46:23.462229Z", "shell.execute_reply": "2025-09-26T18:46:23.462229Z", "shell.execute_reply.started": "2025-09-26T18:46:23.457475Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "diamond.show_graph()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hypergraphs can be build from their incidence matrix. For example, the following hypergraph is made of a line of three nodes with mono-edges at both ends. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.270527Z", "start_time": "2022-01-27T13:28:52.256803Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.463293Z", "iopub.status.busy": "2025-09-26T18:46:23.463293Z", "iopub.status.idle": "2025-09-26T18:46:23.470530Z", "shell.execute_reply": "2025-09-26T18:46:23.470530Z", "shell.execute_reply.started": "2025-09-26T18:46:23.463293Z" } }, "outputs": [], "source": [ "incidence = np.array([[1, 1, 0, 0], [0, 1, 1, 0], [0, 0, 1, 1]])\n", "graph = sm.Model(incidence=incidence, names=\"alpha\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On display, edges are represented by small black nodes, and the edges displayed alway link one node to one edge." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.286469Z", "start_time": "2022-01-27T13:28:52.273532Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.472010Z", "iopub.status.busy": "2025-09-26T18:46:23.470530Z", "iopub.status.idle": "2025-09-26T18:46:23.476795Z", "shell.execute_reply": "2025-09-26T18:46:23.476795Z", "shell.execute_reply.started": "2025-09-26T18:46:23.472010Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "graph.show_graph()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The package provides several graph generators to create graphs without manually describing them." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.302359Z", "start_time": "2022-01-27T13:28:52.287993Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.478220Z", "iopub.status.busy": "2025-09-26T18:46:23.476795Z", "iopub.status.idle": "2025-09-26T18:46:23.483066Z", "shell.execute_reply": "2025-09-26T18:46:23.483066Z", "shell.execute_reply.started": "2025-09-26T18:46:23.478220Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "paw = sm.Tadpole()\n", "paw.show_graph()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.317355Z", "start_time": "2022-01-27T13:28:52.303469Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.484084Z", "iopub.status.busy": "2025-09-26T18:46:23.484084Z", "iopub.status.idle": "2025-09-26T18:46:23.490076Z", "shell.execute_reply": "2025-09-26T18:46:23.490076Z", "shell.execute_reply.started": "2025-09-26T18:46:23.484084Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "candy = sm.HyperPaddle(names=\"alpha\")\n", "candy.show_graph()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See the [Graphs notebook](graphs.ipynb) for details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stability and achievable matching rates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To study a matching queues system, you need to associate a graph to arrival rates on nodes." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.332510Z", "start_time": "2022-01-27T13:28:52.318356Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.490076Z", "iopub.status.busy": "2025-09-26T18:46:23.490076Z", "iopub.status.idle": "2025-09-26T18:46:23.494646Z", "shell.execute_reply": "2025-09-26T18:46:23.494646Z", "shell.execute_reply.started": "2025-09-26T18:46:23.490076Z" } }, "outputs": [], "source": [ "diamond = sm.CycleChain(names=\"alpha\", rates=[2, 3, 2, 1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From then you can see if a stable solution exists." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.347610Z", "start_time": "2022-01-27T13:28:52.334020Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.495652Z", "iopub.status.busy": "2025-09-26T18:46:23.495652Z", "iopub.status.idle": "2025-09-26T18:46:23.503377Z", "shell.execute_reply": "2025-09-26T18:46:23.503377Z", "shell.execute_reply.started": "2025-09-26T18:46:23.495652Z" } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.stabilizable" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can access the kernel space of solutions." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.377070Z", "start_time": "2022-01-27T13:28:52.348790Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.503377Z", "iopub.status.busy": "2025-09-26T18:46:23.503377Z", "iopub.status.idle": "2025-09-26T18:46:23.507780Z", "shell.execute_reply": "2025-09-26T18:46:23.507780Z", "shell.execute_reply.started": "2025-09-26T18:46:23.503377Z" } }, "outputs": [ { "data": { "text/plain": [ "Kernels of a graph with 4 nodes and 5 edges.\n", "Node dimension is 0.\n", "Edge dimension is 1\n", "Type: Surjective-only\n", "Node kernel:\n", "[]\n", "Edge kernel:\n", "[[ 1 -1 0 -1 1]]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.kernel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can have the *default* solution, which is the product of the arrival rates by the pseudo-inverse of the incidence matrix. Note that the default solution may not be positive even if a positive solution exists." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.409570Z", "start_time": "2022-01-27T13:28:52.381693Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.508785Z", "iopub.status.busy": "2025-09-26T18:46:23.508785Z", "iopub.status.idle": "2025-09-26T18:46:23.513283Z", "shell.execute_reply": "2025-09-26T18:46:23.513283Z", "shell.execute_reply.started": "2025-09-26T18:46:23.508785Z" } }, "outputs": [ { "data": { "text/plain": [ "array([1.25, 0.75, 1. , 0.75, 0.25])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.base_flow" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can compute the maximin solution, which maximizes the minimum of the rates over all edges." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.424591Z", "start_time": "2022-01-27T13:28:52.410576Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.513283Z", "iopub.status.busy": "2025-09-26T18:46:23.513283Z", "iopub.status.idle": "2025-09-26T18:46:23.518895Z", "shell.execute_reply": "2025-09-26T18:46:23.518895Z", "shell.execute_reply.started": "2025-09-26T18:46:23.513283Z" } }, "outputs": [ { "data": { "text/plain": [ "array([1.5, 0.5, 1. , 0.5, 0.5])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.maximin" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can find a flow that maximizes a given edge. The following maximizes the last edge." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.439920Z", "start_time": "2022-01-27T13:28:52.426933Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.518895Z", "iopub.status.busy": "2025-09-26T18:46:23.518895Z", "iopub.status.idle": "2025-09-26T18:46:23.527668Z", "shell.execute_reply": "2025-09-26T18:46:23.527668Z", "shell.execute_reply.started": "2025-09-26T18:46:23.518895Z" } }, "outputs": [ { "data": { "text/plain": [ "array([2., 0., 1., 0., 1.])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.optimize_edge(4, 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also minimize it." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.455588Z", "start_time": "2022-01-27T13:28:52.440922Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.528987Z", "iopub.status.busy": "2025-09-26T18:46:23.527668Z", "iopub.status.idle": "2025-09-26T18:46:23.533420Z", "shell.execute_reply": "2025-09-26T18:46:23.533420Z", "shell.execute_reply.started": "2025-09-26T18:46:23.528987Z" } }, "outputs": [ { "data": { "text/plain": [ "array([1., 1., 1., 1., 0.])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.optimize_edge(4, -1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another possibility is to ask to maximize some reward based on weights on the edges." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.470720Z", "start_time": "2022-01-27T13:28:52.456806Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.534817Z", "iopub.status.busy": "2025-09-26T18:46:23.533420Z", "iopub.status.idle": "2025-09-26T18:46:23.540505Z", "shell.execute_reply": "2025-09-26T18:46:23.540505Z", "shell.execute_reply.started": "2025-09-26T18:46:23.534817Z" } }, "outputs": [ { "data": { "text/plain": [ "array([1., 1., 1., 1., 0.])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.optimize_rates([1, 2, 2, 2, 1])" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.486586Z", "start_time": "2022-01-27T13:28:52.472090Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.541520Z", "iopub.status.busy": "2025-09-26T18:46:23.541520Z", "iopub.status.idle": "2025-09-26T18:46:23.547925Z", "shell.execute_reply": "2025-09-26T18:46:23.547925Z", "shell.execute_reply.started": "2025-09-26T18:46:23.541520Z" } }, "outputs": [ { "data": { "text/plain": [ "array([2., 0., 1., 0., 1.])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.optimize_rates([1, 2, 2, 2, 4])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also provide the incompressible flow, i.e. for each edge the minimal rate that goes through in any solution." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.502374Z", "start_time": "2022-01-27T13:28:52.487584Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.548933Z", "iopub.status.busy": "2025-09-26T18:46:23.548933Z", "iopub.status.idle": "2025-09-26T18:46:23.569743Z", "shell.execute_reply": "2025-09-26T18:46:23.569236Z", "shell.execute_reply.started": "2025-09-26T18:46:23.548933Z" } }, "outputs": [ { "data": { "text/plain": [ "array([1., 0., 1., 0., 0.])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.incompressible_flow()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Flows can be displayed using the `show_flow` method. If no flow is provided, the base flow is displayed." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.517461Z", "start_time": "2022-01-27T13:28:52.503884Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.570752Z", "iopub.status.busy": "2025-09-26T18:46:23.569743Z", "iopub.status.idle": "2025-09-26T18:46:23.579685Z", "shell.execute_reply": "2025-09-26T18:46:23.578676Z", "shell.execute_reply.started": "2025-09-26T18:46:23.570752Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "diamond.show_flow()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.533530Z", "start_time": "2022-01-27T13:28:52.518462Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.580683Z", "iopub.status.busy": "2025-09-26T18:46:23.579685Z", "iopub.status.idle": "2025-09-26T18:46:23.586942Z", "shell.execute_reply": "2025-09-26T18:46:23.586942Z", "shell.execute_reply.started": "2025-09-26T18:46:23.580683Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "diamond.show_flow(flow=diamond.maximin)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A color code shows the problematic nodes with flow conservation issues and non-positive edges." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.549246Z", "start_time": "2022-01-27T13:28:52.535267Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.587948Z", "iopub.status.busy": "2025-09-26T18:46:23.587948Z", "iopub.status.idle": "2025-09-26T18:46:23.595310Z", "shell.execute_reply": "2025-09-26T18:46:23.595310Z", "shell.execute_reply.started": "2025-09-26T18:46:23.587948Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "diamond.show_flow(flow=diamond.optimize_edge(4, 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you want to have a closer look to the polytope of solutions, you can display the kernel:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.565369Z", "start_time": "2022-01-27T13:28:52.551220Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.596318Z", "iopub.status.busy": "2025-09-26T18:46:23.596318Z", "iopub.status.idle": "2025-09-26T18:46:23.601572Z", "shell.execute_reply": "2025-09-26T18:46:23.601572Z", "shell.execute_reply.started": "2025-09-26T18:46:23.596318Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "diamond.show_kernel(disp_flow=True, flow=diamond.maximin)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can access the vertices of the polytope." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.580790Z", "start_time": "2022-01-27T13:28:52.566609Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.604134Z", "iopub.status.busy": "2025-09-26T18:46:23.602663Z", "iopub.status.idle": "2025-09-26T18:46:23.608680Z", "shell.execute_reply": "2025-09-26T18:46:23.608680Z", "shell.execute_reply.started": "2025-09-26T18:46:23.604134Z" } }, "outputs": [ { "data": { "text/plain": [ "[{'kernel_coordinates': array([-0.25]),\n", " 'edge_coordinates': array([1., 1., 1., 1., 0.]),\n", " 'null_edges': [4],\n", " 'bijective': True},\n", " {'kernel_coordinates': array([0.75]),\n", " 'edge_coordinates': array([2., 0., 1., 0., 1.]),\n", " 'null_edges': [1, 3],\n", " 'bijective': False}]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.vertices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can display a vertex." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.595877Z", "start_time": "2022-01-27T13:28:52.582828Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.608680Z", "iopub.status.busy": "2025-09-26T18:46:23.608680Z", "iopub.status.idle": "2025-09-26T18:46:23.614164Z", "shell.execute_reply": "2025-09-26T18:46:23.614164Z", "shell.execute_reply.started": "2025-09-26T18:46:23.608680Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "diamond.show_vertex(0)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:52.611667Z", "start_time": "2022-01-27T13:28:52.598775Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.614164Z", "iopub.status.busy": "2025-09-26T18:46:23.614164Z", "iopub.status.idle": "2025-09-26T18:46:23.621778Z", "shell.execute_reply": "2025-09-26T18:46:23.621778Z", "shell.execute_reply.started": "2025-09-26T18:46:23.614164Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "diamond.show_vertex(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See the [Algebra notebook](analysis.ipynb) for more details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To run a simulation, you just need to specify:\n", "\n", "- A policy (using the name of an implemented policy or providing a custom one)\n", "- Number of arrival rates to simulate (default to 1,000,000)\n", "- The maximal queue size (default to 1,000)\n", "- A random seed (optional)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The simulator returns an estimate of the stability of the policy: False if a queue was maxed before the end, True otherwise." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:57.393381Z", "start_time": "2022-01-27T13:28:52.612671Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:23.622945Z", "iopub.status.busy": "2025-09-26T18:46:23.622945Z", "iopub.status.idle": "2025-09-26T18:46:32.439671Z", "shell.execute_reply": "2025-09-26T18:46:32.439165Z", "shell.execute_reply.started": "2025-09-26T18:46:23.622945Z" } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.run(\"longest\", n_steps=10000000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results of simulation are stored in a `logs` attribute that contains:\n", "\n", "- The number of matchings for each edge\n", "- For each node and state, the number of steps spent by that node in that state\n", "- Number of steps performed\n", "\n", "A printable version, `plogs`, is available." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:57.424570Z", "start_time": "2022-01-27T13:28:57.396348Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:32.439671Z", "iopub.status.busy": "2025-09-26T18:46:32.439671Z", "iopub.status.idle": "2025-09-26T18:46:32.444081Z", "shell.execute_reply": "2025-09-26T18:46:32.444081Z", "shell.execute_reply.started": "2025-09-26T18:46:32.439671Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Arrivals: [2497426 3748647 2502895 1251032]\n", "Traffic: [1664184 833241 1251543 832920 418111]\n", "Queues: [[7418931 1425915 652538 ... 0 0 0]\n", " [6668530 1336514 800062 ... 0 0 0]\n", " [8886833 742688 246867 ... 0 0 0]\n", " [7672998 1455916 557020 ... 0 0 0]]\n", "Steps done: 10000000\n" ] } ], "source": [ "diamond.simulator.plogs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The flow can be displayed." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:57.439948Z", "start_time": "2022-01-27T13:28:57.428614Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:32.445521Z", "iopub.status.busy": "2025-09-26T18:46:32.445521Z", "iopub.status.idle": "2025-09-26T18:46:32.453715Z", "shell.execute_reply": "2025-09-26T18:46:32.453715Z", "shell.execute_reply.started": "2025-09-26T18:46:32.445521Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", " Refresh\n", "\n", "\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "diamond.show_flow()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The CCDFs can be computed and shown." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:57.455407Z", "start_time": "2022-01-27T13:28:57.443230Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:32.455722Z", "iopub.status.busy": "2025-09-26T18:46:32.454726Z", "iopub.status.idle": "2025-09-26T18:46:32.461410Z", "shell.execute_reply": "2025-09-26T18:46:32.461410Z", "shell.execute_reply.started": "2025-09-26T18:46:32.455722Z" } }, "outputs": [ { "data": { "text/plain": [ "array([[1.000000e+00, 2.581069e-01, 1.155154e-01, 5.026160e-02,\n", " 2.141220e-02, 8.995300e-03, 3.730000e-03, 1.524100e-03,\n", " 6.317000e-04, 2.628000e-04, 1.046000e-04, 3.570000e-05,\n", " 1.180000e-05, 3.900000e-06, 1.100000e-06, 2.000000e-07,\n", " 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00],\n", " [1.000000e+00, 3.331470e-01, 1.994956e-01, 1.194894e-01,\n", " 7.159350e-02, 4.286670e-02, 2.560520e-02, 1.531590e-02,\n", " 9.173200e-03, 5.459200e-03, 3.252300e-03, 1.954700e-03,\n", " 1.170700e-03, 7.005000e-04, 4.128000e-04, 2.319000e-04,\n", " 1.277000e-04, 7.000000e-05, 4.020000e-05, 2.450000e-05],\n", " [1.000000e+00, 1.113167e-01, 3.704790e-02, 1.236120e-02,\n", " 4.097700e-03, 1.349100e-03, 4.402000e-04, 1.369000e-04,\n", " 4.160000e-05, 1.150000e-05, 2.500000e-06, 6.000000e-07,\n", " 1.000000e-07, 0.000000e+00, 0.000000e+00, 0.000000e+00,\n", " 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00],\n", " [1.000000e+00, 2.327002e-01, 8.710860e-02, 3.140660e-02,\n", " 1.115720e-02, 3.904000e-03, 1.312800e-03, 4.458000e-04,\n", " 1.518000e-04, 4.920000e-05, 1.160000e-05, 1.500000e-06,\n", " 2.000000e-07, 0.000000e+00, 0.000000e+00, 0.000000e+00,\n", " 0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00]])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.simulator.ccdf[:, :20]" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:58.692516Z", "start_time": "2022-01-27T13:28:57.459544Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:32.462424Z", "iopub.status.busy": "2025-09-26T18:46:32.462424Z", "iopub.status.idle": "2025-09-26T18:46:32.817647Z", "shell.execute_reply": "2025-09-26T18:46:32.817647Z", "shell.execute_reply.started": "2025-09-26T18:46:32.462424Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = diamond.simulator.show_ccdf(sort=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The queues occupancies are given by:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:58.708223Z", "start_time": "2022-01-27T13:28:58.697036Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:32.818655Z", "iopub.status.busy": "2025-09-26T18:46:32.818655Z", "iopub.status.idle": "2025-09-26T18:46:32.825077Z", "shell.execute_reply": "2025-09-26T18:46:32.825077Z", "shell.execute_reply.started": "2025-09-26T18:46:32.818655Z" } }, "outputs": [ { "data": { "text/plain": [ "array([0.4605973, 0.8301682, 0.166806 , 0.3682495])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diamond.simulator.avg_queues" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "They can be displayed (optionally sorted)." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:58.879194Z", "start_time": "2022-01-27T13:28:58.711854Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:32.826088Z", "iopub.status.busy": "2025-09-26T18:46:32.826088Z", "iopub.status.idle": "2025-09-26T18:46:32.910309Z", "shell.execute_reply": "2025-09-26T18:46:32.910309Z", "shell.execute_reply.started": "2025-09-26T18:46:32.826088Z" } }, "outputs": [ { "data": { "image/png": "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oUPl8OHDEh8fbwYRh4SEyNq1a0sHGe/fv9/MoCpr165dsmnTJvnkk08sqjUAAHBXHsXFxcVSi+hUcJ01pYOLGzZs6PTnB09Y7fRn4sJkzmSVagCwK0d+f9fo2VIAAABnI9wAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAABbIdwAAIDaHW5ef/11OX36dPXUBgAAwNXhZsKECRIQECAjR46UzZs3X+z7AwAAWBtuDhw4IIsXL5YjR45Iv379pH379jJr1izJzs52bs0AAABcEW68vLzkjjvukA8++ECysrIkJiZGli5dKv/zP/8jt912mykvKiqqSl0AAACsHVDs7+8vffr0kbCwMPH09JTt27dLVFSUtGnTRjZs2HDxtQMAAHBFuDl06JDMnj1brr76atM1lZubK6tWrZK9e/eabqt77rnHhBwAAAC3DzeDBw+WoKAgWbRokemS0jDz1ltvSXh4uHm9Xr16Mn78eNNlBQAA4Gpejt7QvHlz+fe//226os6lWbNmphUHAADA7cPNwoUL//AaDw8PueKKK6paJwAAANd1Sz3++OMyb968CuXz58+Xv/zlL1WvCQAAgBXh5t1335XevXtXKO/Vq5e88847zqgTAACA68LNL7/8Io0aNapQ3rBhQ7OwHwAAQI0KN23btpW1a9dWKP/444+ldevWzqoXAACAawYUx8bGypgxY+Tw4cPSv39/U5aamipz5syRxMTEqtUCAADAqnDz4IMPSn5+vkyfPl2mTZtmyoKDg+WVV16RyMhIZ9ULAADANeFGjR492hzaelO3bl2pX79+1d4dAADAHcJN2cX6AAAAavSAYt1X6oEHHpCWLVuaHcLr1KlT7nBUUlKS6dby9fWVHj16SFpa2nmvP378uDz22GPSokUL8fHxkauuukrWrFnj8PsCAAB7crjlZsSIEbJ//36ZNGmSCRi6GnFVLV++3AxQTk5ONsFGByRHRETIrl27zDYPZysoKJCbbrrJvKZr6gQGBsq+ffukcePGVa4DAACo5eFm06ZN8tlnn0lISMhFv/ncuXPN5pvR0dHmXEPO6tWrJSUlRSZMmFDhei0/evSobN68WS655BJTpq0+56ODn/UooTuYAwAA+3K4W0p3BC8u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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = diamond.simulator.show_average_queues(sort=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is possible to use the arrival rates to express the results as waiting times." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "ExecuteTime": { "end_time": "2022-01-27T13:28:59.208592Z", "start_time": "2022-01-27T13:28:58.883161Z" }, "execution": { "iopub.execute_input": "2025-09-26T18:46:32.912318Z", "iopub.status.busy": "2025-09-26T18:46:32.911318Z", "iopub.status.idle": "2025-09-26T18:46:32.994939Z", "shell.execute_reply": "2025-09-26T18:46:32.994433Z", "shell.execute_reply.started": "2025-09-26T18:46:32.912318Z" } }, "outputs": [ { "data": { "image/png": "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t24t3bp1k7Nnz5bI7wmg+JQvxmcDQLHp27evtGrVSiZMmCBLlizJ9d7s2bNNUNHQo+644w758ccf5bXXXjPBZ//+/SbUJCQkSNu2bc09+ow777zT/YzNmzeb9zUAaS+Smjlzpqk10sD0xBNPlOjvC8Cz6AECUGZpHdDy5ctlz549ua7receOHXNd0/MDBw5IZmameb98+fISERHhfr9JkyZSvXp197kOdV28eFFuu+02CQgIcB+HDh2Sn376qQR+OwDFiR4gAGVW586dJSoqSmJiYkzPjidp+AkJCZENGzZc917OoASgbCIAASjTdDq8DoU1btzYfU2Hsv73f/831316rkNhWj+kvT2///67qetxDYHt27fPFD27aL1PSkqK6SnSImoA3oUhMABlWvPmzeVvf/ubzJs3z31t1KhRsn79epk8ebKp99Fhsvnz58vo0aPN+xqWevToIU8++aRs377dBCGd7aUzwnLONOvQoYP06dNHvvzyS0lOTpYtW7bI2LFj5dtvv3XkdwXgOQQgAGXepEmTJCsrK1fvzQcffCArV66UZs2aSWxsrLkn5zDZW2+9JaGhodKlSxf505/+ZIqa69Sp435fF1Vcs2aNGWYbMmSI6T3SWWW//PKLBAUFlfjvCMCzfLKzs7M9/EwAAIBSjR4gAABgHQIQAACwDgEIAABYhwAEAACsQwACAADWIQABAADrEIAAAIB1CEAAAMA6BCAAAGAdAhAAALAOAQgAAIht/h9uSpJ7AkAwwAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = diamond.simulator.show_average_queues(sort=True, as_time=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See the [Simulation notebook](simulator.ipynb) for more details." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.8" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }