2025-07-25 00:52:58 -04:00
|
|
|
{
|
|
|
|
"cells": [
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-25 21:50:20 -04:00
|
|
|
"execution_count": 1,
|
2025-07-25 00:52:58 -04:00
|
|
|
"id": "c883f5e2",
|
|
|
|
"metadata": {},
|
2025-07-31 01:12:53 -04:00
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"ename": "ModuleNotFoundError",
|
|
|
|
"evalue": "No module named 'consensus'",
|
|
|
|
"output_type": "error",
|
|
|
|
"traceback": [
|
|
|
|
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
|
|
|
|
"\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)",
|
|
|
|
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mjax\u001b[39;00m\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mjax\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mjnp\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mconsensus\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m *\n",
|
|
|
|
"\u001b[31mModuleNotFoundError\u001b[39m: No module named 'consensus'"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
2025-07-25 00:52:58 -04:00
|
|
|
"source": [
|
2025-07-25 21:50:20 -04:00
|
|
|
"import jax\n",
|
|
|
|
"import jax.numpy as jnp\n",
|
|
|
|
"from consensus import *"
|
2025-07-25 00:52:58 -04:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "e3c2fa64",
|
2025-07-25 00:52:58 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
2025-07-25 21:50:20 -04:00
|
|
|
"key = jax.random.PRNGKey(0)\n",
|
|
|
|
"config = ConsensusConfig()"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "04880fb1",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"key, subkey = jax.random.split(key)\n",
|
|
|
|
"\n",
|
|
|
|
"adj_mat = generate_random_adjacency_matrix(subkey, config)\n",
|
|
|
|
"\n",
|
|
|
|
"key, subkey = jax.random.split(key)\n",
|
|
|
|
"\n",
|
|
|
|
"\n",
|
|
|
|
"initial_state = generate_random_agent_states(subkey, config)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "acc686b9",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"Array([[1.4142135],\n",
|
|
|
|
" [1.4142135],\n",
|
|
|
|
" [1.7320508],\n",
|
|
|
|
" [1.7320508],\n",
|
|
|
|
" [1.7320508]], dtype=float32)"
|
|
|
|
]
|
|
|
|
},
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": 20,
|
2025-07-25 21:50:20 -04:00
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"jnp.linalg.norm(adj_mat, axis=1, keepdims=True, )"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "2685d249",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"Array([[-0.79141927, -0.31202483, -0.73786545, 0.6202612 , -0.6111777 ],\n",
|
|
|
|
" [ 0.27104306, 0.65300965, -0.09737301, -0.7656326 , 0.05701613],\n",
|
|
|
|
" [-0.9213977 , -0.69550824, 0.69740653, -0.00249243, 0.01338029],\n",
|
|
|
|
" ...,\n",
|
|
|
|
" [ 0.934633 , -0.4459145 , 0.7428684 , -0.5317199 , 0.9887655 ],\n",
|
|
|
|
" [ 0.5390346 , -0.48631144, 0.1265409 , -0.08987975, -0.11147618],\n",
|
|
|
|
" [-0.900332 , -0.08470678, 0.72673416, -0.75884247, 0.8060036 ]], dtype=float32)"
|
|
|
|
]
|
|
|
|
},
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": 21,
|
2025-07-25 21:50:20 -04:00
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"initial_state"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "01d95cba",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"out = run_consensus_sim(adj_mat, initial_state, config)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "23b2ac73",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stderr",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
2025-07-31 01:12:53 -04:00
|
|
|
"100%|██████████| 500/500 [00:01<00:00, 356.10it/s]\n"
|
2025-07-25 21:50:20 -04:00
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"outputs = []\n",
|
|
|
|
"from tqdm import tqdm\n",
|
|
|
|
"\n",
|
|
|
|
"for i in tqdm(range(config.num_sims)):\n",
|
|
|
|
" key, subkey = jax.random.split(key)\n",
|
|
|
|
"\n",
|
|
|
|
" adj_mat = generate_random_adjacency_matrix(subkey, config)\n",
|
|
|
|
"\n",
|
|
|
|
" key, subkey = jax.random.split(key)\n",
|
|
|
|
"\n",
|
|
|
|
" initial_state = generate_random_agent_states(subkey, config)\n",
|
|
|
|
"\n",
|
|
|
|
" trajectories = run_consensus_sim(adj_mat, initial_state, config)\n",
|
|
|
|
"\n",
|
|
|
|
" outputs.append(trajectories)\n",
|
|
|
|
"\n"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "ff65a64f",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"500"
|
|
|
|
]
|
|
|
|
},
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": 24,
|
2025-07-25 21:50:20 -04:00
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"len(outputs)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "9db9c2b7",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"x = outputs[1]"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "6584c0b2",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"Array([[[-1.66636720e-01, 5.12272954e-01, -7.18595386e-01,\n",
|
|
|
|
" -6.62203312e-01, 5.40143251e-01],\n",
|
|
|
|
" [-1.74384415e-01, 4.56314355e-01, -6.64573908e-01,\n",
|
|
|
|
" -6.39672816e-01, 5.08012652e-01],\n",
|
|
|
|
" [-1.80595487e-01, 4.05365229e-01, -6.15751922e-01,\n",
|
|
|
|
" -6.18524671e-01, 4.76983011e-01],\n",
|
|
|
|
" ...,\n",
|
|
|
|
" [-1.59010112e-01, -1.50679022e-01, -1.53786018e-01,\n",
|
|
|
|
" -1.67208239e-01, -1.54014796e-01],\n",
|
|
|
|
" [-1.58967257e-01, -1.50819257e-01, -1.53847516e-01,\n",
|
|
|
|
" -1.66839033e-01, -1.54245734e-01],\n",
|
|
|
|
" [-1.58922747e-01, -1.50957853e-01, -1.53907120e-01,\n",
|
|
|
|
" -1.66481182e-01, -1.54461235e-01]],\n",
|
|
|
|
"\n",
|
|
|
|
" [[-2.95487672e-01, 2.00281173e-01, 7.41982460e-01,\n",
|
|
|
|
" -6.08857512e-01, -5.24303138e-01],\n",
|
|
|
|
" [-2.84227967e-01, 2.24914923e-01, 6.94133639e-01,\n",
|
|
|
|
" -5.94611228e-01, -5.13903916e-01],\n",
|
|
|
|
" [-2.74258196e-01, 2.46254981e-01, 6.50272310e-01,\n",
|
|
|
|
" -5.80505908e-01, -5.03451347e-01],\n",
|
|
|
|
" ...,\n",
|
|
|
|
" [-9.05691609e-02, 2.46822182e-02, -1.64113492e-02,\n",
|
|
|
|
" -1.15323864e-01, -1.14397414e-01],\n",
|
|
|
|
" [-8.99871886e-02, 2.28142999e-02, -1.74129177e-02,\n",
|
|
|
|
" -1.14197671e-01, -1.13313831e-01],\n",
|
|
|
|
" [-8.94182399e-02, 2.09857989e-02, -1.83918513e-02,\n",
|
|
|
|
" -1.13096178e-01, -1.12253852e-01]],\n",
|
|
|
|
"\n",
|
|
|
|
" [[-1.30383307e-02, 1.71294942e-01, -8.86316597e-01,\n",
|
|
|
|
" 7.38471627e-01, -6.40124202e-01],\n",
|
|
|
|
" [-3.00604030e-02, 1.23224229e-01, -8.27797651e-01,\n",
|
|
|
|
" 7.04303384e-01, -6.11620843e-01],\n",
|
|
|
|
" [-4.47233506e-02, 8.00035298e-02, -7.74794400e-01,\n",
|
|
|
|
" 6.70914054e-01, -5.85195124e-01],\n",
|
|
|
|
" ...,\n",
|
|
|
|
" [-1.57231078e-01, -1.98106706e-01, -1.83590323e-01,\n",
|
|
|
|
" -1.40955046e-01, -1.56092867e-01],\n",
|
|
|
|
" [-1.57435969e-01, -1.97447628e-01, -1.83227822e-01,\n",
|
|
|
|
" -1.41696304e-01, -1.56145990e-01],\n",
|
|
|
|
" [-1.57636106e-01, -1.96798533e-01, -1.82872400e-01,\n",
|
|
|
|
" -1.42414570e-01, -1.56205371e-01]],\n",
|
|
|
|
"\n",
|
|
|
|
" ...,\n",
|
|
|
|
"\n",
|
|
|
|
" [[-1.63649127e-01, -8.41130137e-01, -7.75687933e-01,\n",
|
|
|
|
" -6.17362916e-01, -1.62886351e-01],\n",
|
|
|
|
" [-1.87853858e-01, -8.38172257e-01, -7.59123802e-01,\n",
|
|
|
|
" -5.96733749e-01, -1.62921131e-01],\n",
|
|
|
|
" [-2.09566846e-01, -8.34595501e-01, -7.44206071e-01,\n",
|
|
|
|
" -5.78146398e-01, -1.64056927e-01],\n",
|
|
|
|
" ...,\n",
|
|
|
|
" [-4.63634402e-01, -5.26826859e-01, -5.04092157e-01,\n",
|
|
|
|
" -4.52905446e-01, -4.47922230e-01],\n",
|
|
|
|
" [-4.63949651e-01, -5.25786340e-01, -5.03538966e-01,\n",
|
|
|
|
" -4.53391463e-01, -4.48639333e-01],\n",
|
|
|
|
" [-4.64258403e-01, -5.24773777e-01, -5.02999008e-01,\n",
|
|
|
|
" -4.53866601e-01, -4.49335635e-01]],\n",
|
|
|
|
"\n",
|
|
|
|
" [[ 8.49014282e-01, -4.23134297e-01, -1.02596506e-01,\n",
|
|
|
|
" -7.79161379e-02, -7.49398649e-01],\n",
|
|
|
|
" [ 7.69991755e-01, -4.08562779e-01, -8.34711716e-02,\n",
|
|
|
|
" -3.57792526e-02, -6.76743805e-01],\n",
|
|
|
|
" [ 6.99401498e-01, -3.93781751e-01, -6.74583837e-02,\n",
|
|
|
|
" 8.48539814e-04, -6.10982418e-01],\n",
|
|
|
|
" ...,\n",
|
|
|
|
" [ 5.44091836e-02, 1.56357903e-02, 2.96502374e-02,\n",
|
|
|
|
" 6.60664737e-02, 5.86968251e-02],\n",
|
|
|
|
" [ 5.42080291e-02, 1.62729044e-02, 2.99752634e-02,\n",
|
|
|
|
" 6.55355603e-02, 5.85015714e-02],\n",
|
|
|
|
" [ 5.40123284e-02, 1.68951005e-02, 3.02929282e-02,\n",
|
|
|
|
" 6.50210083e-02, 5.83060347e-02]],\n",
|
|
|
|
"\n",
|
|
|
|
" [[ 3.28030080e-01, 1.59404784e-01, 1.12652399e-01,\n",
|
|
|
|
" 4.21188235e-01, -5.76944411e-01],\n",
|
|
|
|
" [ 3.04681659e-01, 1.57281369e-01, 1.20595314e-01,\n",
|
|
|
|
" 4.16955978e-01, -5.35814166e-01],\n",
|
|
|
|
" [ 2.83952415e-01, 1.55611798e-01, 1.27279893e-01,\n",
|
|
|
|
" 4.11854506e-01, -4.97601837e-01],\n",
|
|
|
|
" ...,\n",
|
|
|
|
" [ 1.25164792e-01, 1.34655759e-01, 1.31267741e-01,\n",
|
|
|
|
" 1.28612176e-01, 1.17667601e-01],\n",
|
|
|
|
" [ 1.25210837e-01, 1.34499282e-01, 1.31179631e-01,\n",
|
|
|
|
" 1.28455788e-01, 1.18006803e-01],\n",
|
|
|
|
" [ 1.25256866e-01, 1.34351477e-01, 1.31099537e-01,\n",
|
|
|
|
" 1.28308088e-01, 1.18334584e-01]]], dtype=float32)"
|
|
|
|
]
|
|
|
|
},
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": 26,
|
2025-07-25 21:50:20 -04:00
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"x"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "620a7701",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"(500, 100, 5)"
|
|
|
|
]
|
|
|
|
},
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": 27,
|
2025-07-25 21:50:20 -04:00
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"x.shape"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-25 21:50:20 -04:00
|
|
|
"id": "b094224e",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlcAAAHPCAYAAAB+5v83AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAs9JJREFUeJzs3Xd8FGX+wPHPzJb0TYMUQk0goTcpRhARRUEQLDSxoKAop56CnIodz/4TPQErooIeKqeigggGRbGhKEgREEyoCRDS69aZ3x+bLFlSCGGTEPi+77U3M88888wzTzbmyzPPPKPouq4jhBBCCCF8Qm3sCgghhBBCnEkkuBJCCCGE8CEJroQQQgghfEiCKyGEEEIIH5LgSgghhBDChyS4EkIIIYTwIQmuhBBCCCF8SIIrIYQQQggfkuBKCCGEEMKHJLgSQjR5119/Pddff32jnPuTTz4hKSmJgwcP+qzMgwcPkpSUxCeffOKzMk8HTf267r//foYMGdLY1RBNgLGxKyBEU7J//37efPNNfvzxRzIzMzGZTCQmJjJ8+HDGjx+Pv79/Y1dRNCHLly8nOzubG2+8sbGr4nE61qm2jhw5wtKlS7n44ovp1KlTY1dHnMUkuBKilr799lvuuusuzGYzo0ePJjExEYfDwe+//87//d//8ffff/Pvf/+7sat5Vlq4cGFjV6FOVqxYwe7duysFMnFxcWzZsgWjseH/E11dnXyhvq8rMzOT+fPnExcXVy/B1b///W/kdbyiNiS4EqIWDhw4wPTp02nRogWLFi0iKirKs+/aa69l3759fPvtt41XwbOc2Wxu7Cr4lKIo+Pn5NXY1Tshms2EymVDV2o0waSrXdbySkhICAwMxmUyNXRXRRMiYKyFq4c0336SkpIQnn3zSK7Aq16ZNGyZNmuTZdjqdvPzyy1x88cV07dqVIUOG8MILL2C3272OGzJkCLfeeiu//fYbY8aMoVu3blx00UV8+umnXvkcDgfz58/nkksuoVu3bvTv359rrrmGH3/80Stfamoq//znP+nXrx/dunXjqquu4uuvv/bKUz5G6Pfff+fpp5/m3HPPpWfPntx+++3k5OR45d26dStTpkyhf//+dO/enSFDhjBr1izP/l9++YWkpCR++eUXr+OqGltz9OhRZs2axaBBg+jatSsDBw5k2rRpJxyrVJvjjh9zVV6vlStXMn/+fM4//3x69erFP//5TwoLC7Hb7Tz55JMkJyfTq1cvZs2a5fWzqWlsUFJSEvPmzauxzmvWrGHq1KkMHDiQrl27cvHFF/Pyyy/jcrm86vztt9+Snp5OUlISSUlJnvE81Z3/559/ZuLEifTs2ZM+ffowbdo0UlNTvfLMmzePpKQk9u3bx/3330+fPn0455xzmDVrFqWlpTXWu6Y6lbfpF198wYsvvsj5559Pjx49KCoqIi8vj2effZbLL7+cXr160bt3b26++WZ27tzpVX5111Wb7y1AQUEBTz31FEOGDKFr164MGjSIe++9l5ycHH755RfGjBkDwKxZszz1r3iuL7/8kquuuoru3bvTv39/Zs6cyZEjR7zOcf/999OrVy/279/PLbfcQq9evZg5c6Zn3/FjrjRN45133mHEiBF069aN8847j0ceeYT8/HyvfCf6XRJnFum5EqIW1q5dS6tWrejdu3et8j/00EMsW7aMSy+9lJtuuoktW7bw+uuvk5qayssvv+yVd9++fdx1112MGTOGK6+8ko8//pj777+fLl260KFDBwDmz5/P66+/ztixY+nevTtFRUVs27aNP//8kwEDBgCwe/durrnmGqKjo7nlllsIDAzkyy+/5Pbbb2fevHkMHTrU67xPPPEEFouFO+64g/T0dBYtWsTjjz/Of/7zHwCys7OZMmUK4eHhTJ06FYvFwsGDB0lJSalTG9555538/fffXHfddcTFxZGTk8OPP/7IoUOHaNmypc+PA3jjjTfw9/dn6tSp7Nu3j/feew+j0YiiKBQUFHDHHXewefNmPvnkE+Li4rjjjjvqdG3HW7ZsGYGBgdx0000EBgayfv165s6dS1FREffddx8At912G4WFhRw+fNjzRzYoKKjaMn/66SduueUWWrZsyR133IHVauW9997jmmuu4ZNPPqnUFnfffTctW7ZkxowZbN++nf/9739ERETwr3/9q9pz1KZOr7zyCiaTiSlTpmC32zGZTPz999+sWbOGYcOG0bJlS7Kysvjwww+57rrr+OKLL4iOjq72nLX93hYXF3PttdeSmprK1VdfTefOncnNzeWbb77hyJEjJCQk8M9//pO5c+cyfvx4zjnnHADP7+wnn3zCrFmz6NatGzNmzCA7O5vFixezceNGPv30UywWi6dOTqeTKVOmcM4553DffffVOJbykUceYdmyZVx11VVcf/31HDx4kP/+979s376d999/H5PJ5PPfJdEE6EKIGhUWFuqJiYn6tGnTapV/x44demJiov7ggw96pT/zzDN6YmKi/vPPP3vSLrzwQj0xMVHfsGGDJy07O1vv2rWr/swzz3jSRo0apU+dOrXG806aNEkfOXKkbrPZPGmapunjx4/XL7nkEk/axx9/rCcmJuo33nijrmmaJ/2pp57SO3XqpBcUFOi6ruspKSl6YmKivmXLlmrPuX79ej0xMVFfv369V/qBAwf0xMRE/eOPP9Z1Xdfz8/P1xMRE/c0336zxGo5X2+Ouu+46/brrrqtUr5EjR+p2u92TPmPGDD0pKUm/+eabvY4fP368fuGFF1Zb/4oSExP1uXPnerbL2/PAgQOetNLS0krHPfzww3qPHj28fj5Tp071Om9N5x89erSenJys5+bmetJ27Nihd+zYUb/33ns9aXPnztUTExP1WbNmeZV5++236/369at0ruNVV6fyNr3ooosqXZ/NZtNdLlela+jatas+f/78Gq+rtt/bl156SU9MTNS/+uqrSnUr/x5v2bKlyp+b3W7Xk5OT9ZEjR+pWq9WTvnbtWj0xMVF/6aWXPGn33XefnpiYqD///POVznPfffd5tc2GDRv0xMRE/fPPP/fKt27dOq/02vwuiTOL3BYU4gSKioqAmnsVKvruu+8AuOmmm7zSJ0+e7LW/XPv27enTp49nOyIignbt2nHgwAFPmsViYffu3ezdu7fKc+bl5bF+/XqGDx9OUVEROTk55OTkkJuby8CBA9m7d2+l2x/jxo1DURTPdp8+fXC5XKSnpwMQEhICuAfyOxyOWl17dfz9/TGZTPz666+VbpfUx3HlRo8e7TVOpnv37ui6ztVXX+2Vr3v37hw6dAin03nS56hKxZ6O8p9Hnz59KC0tJS0t7aTLy8zMZMeOHVx55ZWEhYV50jt27Mh5551X6TsFMGHCBK/tPn36kJeX5/k+19UVV1xRqSfHbDZ7xl25XC5yc3MJDAykXbt2bN++vdqyTuZ7+9VXX9GxY8dKPbCA1/e4Ktu2bSM7O5trrrnGa8zX4MGDiY+Pr3K85DXXXFNjmQCrVq0iJCSEAQMGeOqek5NDly5dCAwM9Nwu9+Xvkmga5LagECcQHBwMuG9L1EZ6ejqqqtK6dWuv9ObNm2OxWDzBS7nY2NhKZYSGhnoFE//85z/5xz/+waWXXkpiYiIDBw5k9OjRdOzYEXBPEaHrOi+99BIvvfRSlfXKzs72uj3TokULr/3lt0UKCgoA6NevH5deeinz58/nnXfeoV+/flx88cVcfvnlJz2A3Gw2M3PmTJ599lkGDBhAjx49GDx4MFdccQXNmzf3+XHVXWP5H7nj2zwkJARN0ygsLCQ8PPykrq0qu3fv5j//+Q/r16+vFMwUFhaedHkZGRkAtGvXrtK+hIQEfvjhB8+g63LV/Xzz8/M93+m6qOpWrKZpLF68mCVLlnDw4EGvsWUVg8Hjncz3dv/+/VxyySV1qnNN7RcfH8/vv//ulWY0GomJiTlhufv27aOwsJDk5OQq92dnZwO+/V0STYMEV0KcQHBwMFFRUezevfukjjvRv6bLGQyGE+bp27cvKSkpfP311/z444989NFHLFq0iNmzZzN27Fg0TQPcvWPnn39
|
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlcAAAHPCAYAAAB+5v83AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAukpJREFUeJzs3Xd4VFXCx/HvnT6ZyUx6IdQAoUqTYgQRUQQExUITdXFBcVk7VnRVdLGsr2UFLIioqCvKqqgogkGxoSgqK6ggkVATID0zSabf+/5xJ0OGFEJI53yeZ547c9ucOZmQH+ece66kKIqCIAiCIAiC0CA0zV0AQRAEQRCEtkSEK0EQBEEQhAYkwpUgCIIgCEIDEuFKEARBEAShAYlwJQiCIAiC0IBEuBIEQRAEQWhAIlwJgiAIgiA0IBGuBEEQBEEQGpAIV4IgCIIgCA1IhCtBEFq9q666iquuuqpZ3vu9996jR48eHDx4sMHOefDgQXr06MF7773XYOdsCVr757r77rsZPXp0cxdDaAV0zV0AQWhN9u/fz0svvcSmTZvIzc1Fr9eTlpbG+PHjmTZtGiaTqbmLKLQia9asoaCggKuvvrq5ixLSEstUV0eOHGHVqlWcd9559OrVq7mLI5zCRLgShDr64osvuPnmmzEYDEyaNIm0tDR8Ph8//fQT//d//8eff/7JP//5z+Yu5ilp+fLlzV2Eevnoo4/IzMysEmRSUlLYtm0bOl3T/xNdU5kaQmN/rtzcXJYsWUJKSkqjhKt//vOfiNvxCnUhwpUg1MGBAwe49dZbadeuHStWrCAhISG07YorrmDfvn188cUXzVfAU5zBYGjuIjQoSZIwGo3NXYzj8ng86PV6NJq6jTBpLZ/rWOXl5URERKDX65u7KEIrIcZcCUIdvPTSS5SXl/Pwww+HBasKnTp1YubMmaHXfr+fZ599lvPOO4++ffsyevRonnrqKbxeb9hxo0eP5rrrruPHH39k8uTJnHbaaZx77rm8//77Yfv5fD6WLFnC+eefz2mnncawYcO4/PLL2bRpU9h+u3fv5qabbmLo0KGcdtppXHrppXz22Wdh+1SMEfrpp5949NFHOeOMMxgwYADXX389hYWFYftu376d2bNnM2zYMPr168fo0aOZP39+aPv3339Pjx49+P7778OOq25sTV5eHvPnz2fkyJH07duXESNGMHfu3OOOVarLcceOuaoo19q1a1myZAlnnXUWAwcO5KabbsLpdOL1enn44YdJT09n4MCBzJ8/P+xnU9vYoB49erB48eJay7xhwwbmzJnDiBEj6Nu3L+eddx7PPvssgUAgrMxffPEF2dnZ9OjRgx49eoTG89T0/t999x0zZsxgwIABDB48mLlz57J79+6wfRYvXkyPHj3Yt28fd999N4MHD+b0009n/vz5uFyuWstdW5kq6vTjjz/m6aef5qyzzqJ///6UlpZSXFzMv/71Ly688EIGDhzIoEGDuOaaa9i5c2fY+Wv6XHX53gI4HA4eeeQRRo8eTd++fRk5ciR33nknhYWFfP/990yePBmA+fPnh8pf+b0++eQTLr30Uvr168ewYcO4/fbbOXLkSNh73H333QwcOJD9+/dz7bXXMnDgQG6//fbQtmPHXMmyzKuvvsqECRM47bTTOPPMM7n//vspKSkJ2+94v0tC2yJargShDjZu3EiHDh0YNGhQnfb/xz/+werVqxk7dix//etf2bZtG0uXLmX37t08++yzYfvu27ePm2++mcmTJ3PJJZfw7rvvcvfdd9OnTx+6d+8OwJIlS1i6dClTpkyhX79+lJaW8uuvv/Lbb78xfPhwADIzM7n88stJTEzk2muvJSIigk8++YTrr7+exYsXM2bMmLD3XbhwITabjRtuuIHs7GxWrFjBQw89xL///W8ACgoKmD17NtHR0cyZMwebzcbBgwfJyMioVx3eeOON/Pnnn1x55ZWkpKRQWFjIpk2bOHToEO3bt2/w4wBefPFFTCYTc+bMYd++fbzxxhvodDokScLhcHDDDTfwyy+/8N5775GSksINN9xQr892rNWrVxMREcFf//pXIiIi2Lx5M4sWLaK0tJS77roLgL/97W84nU4OHz4c+iNrsVhqPOe3337LtddeS/v27bnhhhtwu9288cYbXH755bz33ntV6uKWW26hffv2zJs3j99//53//ve/xMTEcMcdd9T4HnUp03PPPYder2f27Nl4vV70ej1//vknGzZsYNy4cbRv3578/HzefvttrrzySj7++GMSExNrfM+6fm/Lysq44oor2L17N5dddhm9e/emqKiIzz//nCNHjtC1a1duuukmFi1axLRp0zj99NMBQr+z7733HvPnz+e0005j3rx5FBQU8Nprr/Hzzz/z/vvvY7PZQmXy+/3Mnj2b008/nbvuuqvWsZT3338/q1ev5tJLL+Wqq67i4MGD/Oc//+H3339n5cqV6PX6Bv9dEloBRRCEWjmdTiUtLU2ZO3dunfbfsWOHkpaWptx7771h6x977DElLS1N+e6770LrzjnnHCUtLU3ZsmVLaF1BQYHSt29f5bHHHgutu+iii5Q5c+bU+r4zZ85UJk6cqHg8ntA6WZaVadOmKeeff35o3bvvvqukpaUpV199tSLLcmj9I488ovTq1UtxOByKoihKRkaGkpaWpmzbtq3G99y8ebOSlpambN68OWz9gQMHlLS0NOXdd99VFEVRSkpKlLS0NOWll16q9TMcq67HXXnllcqVV15ZpVwTJ05UvF5vaP28efOUHj16KNdcc03Y8dOmTVPOOeecGstfWVpamrJo0aLQ64r6PHDgQGidy+Wqctx9992n9O/fP+znM2fOnLD3re39J02apKSnpytFRUWhdTt27FB69uyp3HnnnaF1ixYtUtLS0pT58+eHnfP6669Xhg4dWuW9jlVTmSrq9Nxzz63y+TwejxIIBKp8hr59+ypLliyp9XPV9Xv7zDPPKGlpacqnn35apWwV3+Nt27ZV+3Pzer1Kenq6MnHiRMXtdofWb9y4UUlLS1OeeeaZ0Lq77rpLSUtLU5544okq73PXXXeF1c2WLVuUtLQ05cMPPwzb76uvvgpbX5ffJaFtEd2CgnAcpaWlQO2tCpV9+eWXAPz1r38NWz9r1qyw7RW6devG4MGDQ69jYmLo0qULBw4cCK2z2WxkZmayd+/eat+zuLiYzZs3M378eEpLSyksLKSwsJCioiJGjBjB3r17q3R/TJ06FUmSQq8HDx5MIBAgOzsbgMjISEAdyO/z+er02WtiMpnQ6/X88MMPVbpLGuO4CpMmTQobJ9OvXz8UReGyyy4L269fv34cOnQIv99/wu9RncotHRU/j8GDB+NyucjKyjrh8+Xm5rJjxw4uueQSoqKiQut79uzJmWeeWeU7BTB9+vSw14MHD6a4uDj0fa6viy++uEpLjsFgCI27CgQCFBUVERERQZcuXfj9999rPNeJfG8//fRTevbsWaUFFgj7Hlfn119/paCggMsvvzxszNeoUaNITU2tdrzk5ZdfXus5AdatW0dkZCTDhw8Plb2wsJA+ffoQERER6i5vyN8loXUQ3YKCcBxWqxVQuyXqIjs7G41GQ8eOHcPWx8fHY7PZQuGlQnJycpVz2O32sDBx00038fe//52xY8eSlpbGiBEjmDRpEj179gTUKSIUReGZZ57hmWeeqbZcBQUFYd0z7dq1C9te0S3icDgAGDp0KGPHjmXJkiW8+uqrDB06lPPOO48LL7zwhAeQGwwGbr/9dv71r38xfPhw+vfvz6hRo7j44ouJj49v8ONq+owVf+SOrfPIyEhkWcbpdBIdHX1Cn606mZmZ/Pvf/2bz5s1VwozT6Tzh8+Xk5ADQpUuXKtu6du3KN998Exp0XaGmn29JSUnoO10f1XXFyrLMa6+9xptvvsnBgwfDxpZVDoPHOpHv7f79+zn//PPrVeba6i81NZWffvopbJ1OpyMpKem45923bx9Op5P09PRqtxcUFAAN+7sktA4iXAnCcVitVhISEsjMzDyh4473v+kKWq32uPsMGTKEjIwMPvvsMzZt2sQ
|
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlcAAAHPCAYAAAB+5v83AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAuwhJREFUeJzs3Xd8FEX/wPHP7tXkkksjCSHUIAm9FwOIiKAgCI8IiFhAUBCxgVgQC/hY0J9YAAsiIKigPCooiGBQFAsgKgoqKBJqgJB6l3Z9f3/c5ciRQgjJXRLm/Xrda29nZ2dnJ5fLN7Ozs5KiKAqCIAiCIAhCtZADXQFBEARBEIT6RARXgiAIgiAI1UgEV4IgCIIgCNVIBFeCIAiCIAjVSARXgiAIgiAI1UgEV4IgCIIgCNVIBFeCIAiCIAjVSARXgiAIgiAI1UgEV4IgCIIgCNVIBFeCINR5t9xyC7fccktAjv3JJ5+QlJTE8ePHq63M48ePk5SUxCeffFJtZdYGdf28HnnkEQYMGBDoagh1gDrQFRCEuuTo0aO8/fbb/PDDD5w+fRqNRkNiYiJDhgzhhhtuQK/XB7qKQh2yfv16srKymDBhQqCr4lUb61RZ6enprFmzhoEDB9KmTZtAV0e4iIngShAq6ZtvvuG+++5Dq9UyYsQIEhMTsdvt/PLLL/zf//0f//77L//9738DXc2L0tKlSwNdhSrZsGEDBw4cKBXIxMfHs2fPHtRq/39Fl1en6lDT53X69GkWLVpEfHx8jQRX//3vfxGP4xUqQwRXglAJx44dY/r06TRq1IgVK1YQExPj3XbTTTdx5MgRvvnmm8BV8CKn1WoDXYVqJUkSOp0u0NU4J6vVikajQZYrN8KkrpzX2QoLCwkODkaj0QS6KkIdIcZcCUIlvP322xQWFvLMM8/4BFbFmjVrxvjx473rDoeD1157jYEDB9K+fXsGDBjASy+9hM1m89lvwIABTJkyhZ9//plRo0bRoUMHrrzyStatW+eTz263s2jRIq666io6dOhAr169uPHGG/nhhx988h08eJB7772Xnj170qFDB0aOHMlXX33lk6d4jNAvv/zCc889x6WXXkrnzp2ZNm0a2dnZPnn37t3LpEmT6NWrFx07dmTAgAHMmjXLu33nzp0kJSWxc+dOn/3KGluTkZHBrFmz6NevH+3bt6dv375MnTr1nGOVKrPf2WOuiuu1ceNGFi1axGWXXUaXLl249957ycvLw2az8cwzz5CcnEyXLl2YNWuWz8+morFBSUlJLFy4sMI6b9myhcmTJ9O3b1/at2/PwIEDee2113A6nT51/uabb0hLSyMpKYmkpCTveJ7yjr99+3bGjRtH586d6d69O1OnTuXgwYM+eRYuXEhSUhJHjhzhkUceoXv37nTr1o1Zs2ZRVFRUYb0rqlNxm37++ee8/PLLXHbZZXTq1In8/Hxyc3N5/vnnufbaa+nSpQtdu3bl9ttvZ//+/T7ll3delfncApjNZp599lkGDBhA+/bt6devHw899BDZ2dns3LmTUaNGATBr1ixv/Use64svvmDkyJF07NiRXr16MXPmTNLT032O8cgjj9ClSxeOHj3KHXfcQZcuXZg5c6Z329ljrlwuF++88w5Dhw6lQ4cO9O7dmyeeeAKTyeST71y/S0L9InquBKEStm7dSpMmTejatWul8j/22GOsXbuWq6++mttuu409e/awePFiDh48yGuvveaT98iRI9x3332MGjWK6667jo8//phHHnmEdu3a0apVKwAWLVrE4sWLGT16NB07diQ/P58//viDP//8kz59+gBw4MABbrzxRmJjY7njjjsIDg7miy++YNq0aSxcuJBBgwb5HPfpp5/GaDRy9913k5aWxooVK3jqqad45ZVXAMjKymLSpElEREQwefJkjEYjx48fJyUlpUpteM899/Dvv/9y8803Ex8fT3Z2Nj/88AMnT56kcePG1b4fwFtvvYVer2fy5MkcOXKE9957D7VajSRJmM1m7r77bn7//Xc++eQT4uPjufvuu6t0bmdbu3YtwcHB3HbbbQQHB7Njxw4WLFhAfn4+Dz/8MAB33nkneXl5nDp1yvtH1mAwlFvmjz/+yB133EHjxo25++67sVgsvPfee9x444188sknpdri/vvvp3HjxsyYMYO//vqL//3vf0RGRvLggw+We4zK1On1119Ho9EwadIkbDYbGo2Gf//9ly1btjB48GAaN25MZmYmH374ITfffDOff/45sbGx5R6zsp/bgoICbrrpJg4ePMj1119P27ZtycnJ4euvvyY9PZ2WLVty7733smDBAm644Qa6desG4P2d/eSTT5g1axYdOnRgxowZZGVlsXLlSn799VfWrVuH0Wj01snhcDBp0iS6devGww8/XOFYyieeeIK1a9cycuRIbrnlFo4fP87777/PX3/9xerVq9FoNNX+uyTUAYogCBXKy8tTEhMTlalTp1Yq/759+5TExERl9uzZPunz5s1TEhMTle3bt3vTrrjiCiUxMVHZtWuXNy0rK0tp3769Mm/ePG/a8OHDlcmTJ1d43PHjxyvDhg1TrFarN83lcik33HCDctVVV3nTPv74YyUxMVGZMGGC4nK5vOnPPvus0qZNG8VsNiuKoigpKSlKYmKismfPnnKPuWPHDiUxMVHZsWOHT/qxY8eUxMRE5eOPP1YURVFMJpOSmJiovP322xWew9kqu9/NN9+s3HzzzaXqNWzYMMVms3nTZ8yYoSQlJSm33367z/433HCDcsUVV5Rb/5ISExOVBQsWeNeL2/PYsWPetKKiolL7Pf7440qnTp18fj6TJ0/2OW5Fxx8xYoSSnJys5OTkeNP27duntG7dWnnooYe8aQsWLFASExOVWbNm+ZQ5bdo0pWfPnqWOdbby6lTcpldeeWWp87NarYrT6Sx1Du3bt1cWLVpU4XlV9nP76quvKomJicqXX35Zqm7Fn+M9e/aU+XOz2WxKcnKyMmzYMMVisXjTt27dqiQmJiqvvvqqN+3hhx9WEhMTlRdffLHUcR5++GGfttm1a5eSmJiofPbZZz75tm3b5pNemd8loX4RlwUF4Rzy8/OBinsVSvr2228BuO2223zSJ06c6LO92CWXXEL37t2965GRkbRo0YJjx45504xGIwcOHODw4cNlHjM3N5cdO3YwZMgQ8vPzyc7OJjs7m5ycHPr27cvhw4dLXf4YM2YMkiR517t3747T6SQtLQ2A0NBQwD2Q3263V+rcy6PX69FoNPz000+lLpfUxH7FRowY4TNOpmPHjiiKwvXXX++Tr2PHjpw8eRKHw3HexyhLyZ6O4p9H9+7dKSoqIjU19bzLO336NPv27eO6664jPDzcm966dWt69+5d6jMFMHbsWJ/17t27k5ub6/08V9V//vOfUj05Wq3WO+7K6XSSk5NDcHAwLVq04K+//iq3rPP53H755Ze0bt26VA8s4PM5Lssff/xBVlYWN954o8+Yr/79+5OQkFDmeMkbb7yxwjIBNm3aRGhoKH369PHWPTs7m3bt2hEcHOy9XF6dv0tC3SAuCwrCOYSEhADuyxKVkZaWhizLNG3a1Cc9Ojoao9HoDV6KxcXFlSojLCzMJ5i49957ueuuu7j66qtJTEykb9++jBgxgtatWwPuKSIUReHVV1/l1VdfLbNeWVlZPpdnGjVq5LO9+LKI2WwGoGfPnlx99dUsWrSId955h549ezJw4ECuvfba8x5ArtVqmTlzJs8//zx9+vShU6dO9O/fn//85z9ER0dX+37lnWPxH7mz2zw0NBSXy0VeXh4RERHndW5lOXDgAK+88go7duwoFczk5eWdd3knTpwAoEWLFqW2tWzZku+//9476LpYeT9fk8nk/UxXRVmXYl0uFytXrmTVqlUcP37cZ2xZyWDwbOfzuT169ChXXXVVlepcUfslJCTwyy+/+KSp1WoaNmx4znKPHDlCXl4eycnJZW7PysoCqvd3SagbRHAlCOcQEhJCTEwMBw4cOK/9zvXfdDGVSnXOPD169CAlJYWvvvqKH374gY8++ogVK1Ywd+5cRo8ejcv
|
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlcAAAHPCAYAAAB+5v83AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAq6RJREFUeJzs3Xd8FNXawPHfbEvfVJJAAoQEQq9SjCAiiIIgKE3EgoLi5VpBrw29otf+igVQUQRFvRau2EAEg2JDUVCkKAgmlJBQ0vtmy8z7xyZLlhRCSHaT8Hw/n3V3zpyZeeYkcR/OnDmjaJqmIYQQQgghGoTO2wEIIYQQQrQkklwJIYQQQjQgSa6EEEIIIRqQJFdCCCGEEA1IkishhBBCiAYkyZUQQgghRAOS5EoIIYQQogFJciWEEEII0YAkuRJCCCGEaECSXAkhmr1rr72Wa6+91ivH/uijj+jcuTOHDx9usH0ePnyYzp0789FHHzXYPpuC5n5e9913H8OHD/d2GKIZMHg7ACGak0OHDvH666+zadMmjh8/jtFoJDExkdGjR3PllVfi6+vr7RBFM7J69Wqys7O5/vrrvR2KS1OMqa6OHTvGypUrueiii+jatau3wxFnMUmuhKijb775hjvuuAOTycT48eNJTEzEZrPx66+/8n//93/8/fff/Oc///F2mGelZcuWeTuEelmzZg379u2rksjExMSwY8cODAbP/y+6ppgaQmOf1/Hjx1m8eDExMTGNklz95z//QR7HK+pCkish6iAtLY05c+bQpk0bVqxYQWRkpGvd1VdfzcGDB/nmm2+8F+BZzmQyeTuEBqUoCj4+Pt4O45TKysowGo3odHUbYdJczutkJSUl+Pv7YzQavR2KaCZkzJUQdfD6669TUlLC448/7pZYVWjfvj3Tp093Ldvtdl566SUuuugievTowfDhw3nuueewWq1u2w0fPpybb76ZrVu3MmnSJHr27MmIESP45JNP3OrZbDYWL17MxRdfTM+ePRk0aBBXXXUVmzZtcquXkpLC7bffzsCBA+nZsycTJkzgq6++cqtTMUbo119/5cknn+Tcc8+lT58+3HLLLeTk5LjV3blzJzNnzmTQoEH06tWL4cOHc//997vW//zzz3Tu3Jmff/7ZbbvqxtZkZmZy//33M3ToUHr06MGQIUOYPXv2Kccq1WW7k8dcVcS1du1aFi9ezPnnn0/fvn25/fbbKSwsxGq18vjjj5OUlETfvn25//773X42tY0N6ty5M4sWLao15g0bNjBr1iyGDBlCjx49uOiii3jppZdwOBxuMX/zzTekp6fTuXNnOnfu7BrPU9Pxf/rpJ6ZNm0afPn3o378/s2fPJiUlxa3OokWL6Ny5MwcPHuS+++6jf//+nHPOOdx///2UlpbWGndtMVW06eeff87zzz/P+eefT+/evSkqKiIvL4+nn36ayy67jL59+9KvXz9uvPFG9uzZ47b/ms6rLr+3AAUFBTzxxBMMHz6cHj16MHToUO655x5ycnL4+eefmTRpEgD333+/K/7Kx/riiy+YMGECvXr1YtCgQdx9990cO3bM7Rj33Xcfffv25dChQ9x000307duXu+++27Xu5DFXqqry5ptvMmbMGHr27Ml5553Hv//9b/Lz893qnepvSbQs0nMlRB1s3LiRtm3b0q9fvzrVf/DBB/n444+55JJLuOGGG9ixYwevvvoqKSkpvPTSS251Dx48yB133MGkSZO44oorWLVqFffddx/du3enU6dOACxevJhXX32VyZMn06tXL4qKiti1axd//PEHgwcPBmDfvn1cddVVREVFcdNNN+Hv788XX3zBLbfcwqJFixg5cqTbcR977DHMZjO33nor6enprFixgkcffZQXXngBgOzsbGbOnEloaCizZs3CbDZz+PBhkpOT69WGt912G3///TfXXHMNMTEx5OTksGnTJo4cOUJsbGyDbwfw2muv4evry6xZszh48CDvvPMOBoMBRVEoKCjg1ltvZfv27Xz00UfExMRw66231uvcTvbxxx/j7+/PDTfcgL+/P5s3b2bhwoUUFRVx7733AvCPf/yDwsJCjh496vqSDQgIqHGfP/74IzfddBOxsbHceuutWCwW3nnnHa666io++uijKm1x5513Ehsby9y5c/nzzz/53//+R1hYGP/6179qPEZdYnr55ZcxGo3MnDkTq9WK0Wjk77//ZsOGDYwaNYrY2FiysrL44IMPuOaaa/j888+Jioqq8Zh1/b0tLi7m6quvJiUlhYkTJ9KtWzdyc3P5+uuvOXbsGAkJCdx+++0sXLiQK6+8knPOOQfA9Tf70Ucfcf/999OzZ0/mzp1LdnY2b731Fr/99huffPIJZrPZFZPdbmfmzJmcc8453HvvvbWOpfz3v//Nxx9/zIQJE7j22ms5fPgw//3vf/nzzz957733MBqNDf63JJoBTQhRq8LCQi0xMVGbPXt2nerv3r1bS0xM1ObNm+dW/tRTT2mJiYnaTz/95Cq78MILtcTERG3Lli2usuzsbK1Hjx7aU0895SobN26cNmvWrFqPO336dG3s2LFaWVmZq0xVVe3KK6/ULr74YlfZqlWrtMTERO3666/XVFV1lT/xxBNa165dtYKCAk3TNC05OVlLTEzUduzYUeMxN2/erCUmJmqbN292K09LS9MSExO1VatWaZqmafn5+VpiYqL2+uuv13oOJ6vrdtdcc412zTXXVIlr7NixmtVqdZXPnTtX69y5s3bjjTe6bX/llVdqF154YY3xV5aYmKgtXLjQtVzRnmlpaa6y0tLSKts99NBDWu/evd1+PrNmzXI7bm3HHz9+vJaUlKTl5ua6ynbv3q116dJFu+eee1xlCxcu1BITE7X777/fbZ+33HKLNnDgwCrHOllNMVW06YgRI6qcX1lZmeZwOKqcQ48ePbTFixfXel51/b198cUXtcTERO3LL7+sElvF7/GOHTuq/blZrVYtKSlJGzt2rGaxWFzlGzdu1BITE7UXX3zRVXbvvfdqiYmJ2rPPPlvlOPfee69b22zZskVLTEzUPvvsM7d63333nVt5Xf6WRMsilwWFOIWioiKg9l6Fyr799lsAbrjhBrfyGTNmuK2v0LFjR/r37+9aDgsLo0OHDqSlpbnKzGYz+/bt48CBA9UeMy8vj82bNzN69GiKiorIyckhJyeH3NxchgwZwoEDB6pc/pgyZQqKoriW+/fvj8PhID09HYCgoCDAOZDfZrPV6dxr4uvri9Fo5JdffqlyuaQxtqswfvx4t3EyvXr1QtM0Jk6c6FavV69eHDlyBLvdftrHqE7lno6Kn0f//v0pLS0lNTX1tPd3/Phxdu/ezRVXXEFISIirvEuXLpx33nlVfqcApk6d6rbcv39/8vLyXL/P9XX55ZdX6ckxmUyucVcOh4Pc3Fz8/f3p0KEDf/75Z437Op3f2y+//JIuXbpU6YEF3H6Pq7Nr1y6ys7O56qqr3MZ8DRs2jPj4+GrHS1511VW17hNg3bp1BAUFMXjwYFfsOTk5dO/eHX9/f9fl8ob8WxLNg1wWFOIUAgMDAedlibpIT09Hp9PRrl07t/JWrVphNptdyUuF1q1bV9lHcHCwWzJx++23889//pNLLrmExMREhgwZwvjx4+nSpQvgnCJC0zRefPFFXnzxxWrjys7Odrs806ZNG7f1FZdFCgoKABg4cCCXXHIJixcv5s0332TgwIFcdNFFXHbZZac9gNxkMnH33Xfz9NNPM3jwYHr37s2wYcO4/PLLadWqVYNvV9M5VnzJndzmQUFBqKpKYWEhoaGhp3Vu1dm3bx8vvPACmzdvrpLMFBYWnvb+MjIyAOjQoUOVdQkJCfzwww+uQdcVavr55ufnu36n66O6S7GqqvLWW2/x7rvvcvjwYbexZZWTwZOdzu/toUOHuPjii+sVc23tFx8fz6+//upWZjAYiI6OPuV+Dx48SGFhIUlJSdWuz87OBhr2b0k0D5JcCXEKgYGBREZGsm/fvtPa7lT/mq6g1+tPWWfAgAEkJyfz1VdfsWnTJj788ENWrFjBI488wuTJk1FVFXD
|
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlcAAAHPCAYAAAB+5v83AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAArElJREFUeJzs3Xd4FNX6wPHvzNZkk00lCQQQAoQqTYoRRERREAVFQMSCFxTl2tGrotd6sf5Er8C1ISrqBeXaQQSDYkNRVBRUUEzoLT2btnXm98duNlmSQAip8H6eZ5+ZOXPm7JmTTfbNmTNnFF3XdYQQQgghRL1Qm7oCQgghhBDHEwmuhBBCCCHqkQRXQgghhBD1SIIrIYQQQoh6JMGVEEIIIUQ9kuBKCCGEEKIeSXAlhBBCCFGPJLgSQgghhKhHElwJIYQQQtQjCa6EEC3eFVdcwRVXXNEk7/3uu+/StWtX9uzZU29l7tmzh65du/Luu+/WW5nNQUs/r7vuuosRI0Y0dTVEC2Bs6goI0ZLs2rWLl156iXXr1pGVlYXJZCI1NZXRo0dzySWXYLVam7qKogVZvnw5ubm5XHXVVU1dlaDmWKfaOnjwIMuWLePss8+me/fuTV0dcQKT4EqIWvr888+5+eabMZvNjBs3jtTUVDweDz/++CP/93//x19//cW//vWvpq7mCWnRokVNXYU6WbFiBdu2basSyCQnJ7Np0yaMxsb/E11TnepDQ59XVlYWCxYsIDk5uUGCq3/961/I43hFbUhwJUQt7N69m1tvvZU2bdqwePFiEhISgvsuu+wydu7cyeeff950FTzBmc3mpq5CvVIUBYvF0tTVOCKXy4XJZEJVazfCpKWc16FKS0sJDw/HZDI1dVVECyFjroSohZdeeonS0lIefvjhkMCq3EknncTUqVOD216vl//85z+cffbZ9OrVixEjRvDUU0/hdrtDjhsxYgTXXnstP/zwAxMmTODkk0/mrLPO4v333w/J5/F4WLBgAeeccw4nn3wygwcP5tJLL2XdunUh+TIyMrjpppsYNGgQJ598MuPHj+fTTz8NyVM+RujHH3/k0Ucf5dRTT6Vv375cf/315OXlheTdvHkz06dPZ/DgwfTu3ZsRI0Ywe/bs4P7vvvuOrl278t1334UcV93YmuzsbGbPns2wYcPo1asXQ4cOZebMmUccq1Sb4w4dc1Ver5UrV7JgwQJOP/10+vXrx0033URRURFut5uHH36YtLQ0+vXrx+zZs0N+NocbG9S1a1fmz59/2DqvWbOGGTNmMHToUHr16sXZZ5/Nf/7zH3w+X0idP//8c/bu3UvXrl3p2rVrcDxPTe//7bffMmXKFPr27cuAAQOYOXMmGRkZIXnmz59P165d2blzJ3fddRcDBgzglFNOYfbs2ZSVlR223oerU3mbfvTRRzz99NOcfvrp9OnTh+LiYgoKCnj88ce54IIL6NevH/379+fqq69m69atIeXXdF61+dwCOBwOHnnkEUaMGEGvXr0YNmwYd9xxB3l5eXz33XdMmDABgNmzZwfrX/m9Pv74Y8aPH0/v3r0ZPHgwt99+OwcPHgx5j7vuuot+/fqxa9currnmGvr168ftt98e3HfomCtN03j11VcZM2YMJ598Mqeddhr33XcfhYWFIfmO9Lskji/ScyVELaxdu5Z27drRv3//WuX/5z//yXvvvce5557L3/72NzZt2sQLL7xARkYG//nPf0Ly7ty5k5tvvpkJEyZw0UUX8c4773DXXXfRs2dPunTpAsCCBQt44YUXmDhxIr1796a4uJhff/2V3377jSFDhgCwbds2Lr30UhITE7nmmmsIDw/n448/5vrrr2f+/PmMHDky5H3nzJmD3W7nhhtuYO/evSxevJiHHnqIf//73wDk5uYyffp0YmJimDFjBna7nT179pCenl6nNrzxxhv566+/uPzyy0lOTiYvL49169axf/9+2rZtW+/HAbz44otYrVZmzJjBzp07eeONNzAajSiKgsPh4IYbbuCXX37h3XffJTk5mRtuuKFO53ao9957j/DwcP72t78RHh7O+vXrmTdvHsXFxdx5550AXHfddRQVFXHgwIHgl6zNZquxzG+++YZrrrmGtm3bcsMNN+B0OnnjjTe49NJLeffdd6u0xS233ELbtm2ZNWsWv//+O//73/+IjY3lH//4R43vUZs6Pfvss5hMJqZPn47b7cZkMvHXX3+xZs0aRo0aRdu2bcnJyeGtt97i8ssv56OPPiIxMbHG96zt57akpITLLruMjIwMLr74Ynr06EF+fj6fffYZBw8epFOnTtx0003MmzePSy65hFNOOQUg+Dv77rvvMnv2bE4++WRmzZpFbm4ur732Gj/99BPvv/8+drs9WCev18v06dM55ZRTuPPOOw87lvK+++7jvffeY/z48VxxxRXs2bOH//73v/z+++8sXboUk8lU779LogXQhRCHVVRUpKempuozZ86sVf4tW7boqamp+j333BOS/thjj+mpqan6t99+G0w788wz9dTUVH3Dhg3BtNzcXL1Xr176Y489FkwbO3asPmPGjMO+79SpU/Xzzz9fd7lcwTRN0/RLLrlEP+ecc4Jp77zzjp6amqpfddVVuqZpwfRHHnlE7969u+5wOHRd1/X09HQ9NTVV37RpU43vuX79ej01NVVfv359SPru3bv11NRU/Z133tF1XdcLCwv11NRU/aWXXjrsORyqtsddfvnl+uWXX16lXueff77udruD6bNmzdK7du2qX3311SHHX3LJJfqZZ55ZY/0rS01N1efNmxfcLm/P3bt3B9PKysqqHHfvvffqffr0Cfn5zJgxI+R9D/f+48aN09PS0vT8/Pxg2pYtW/Ru3brpd9xxRzBt3rx5empqqj579uyQMq+//np90KBBVd7rUDXVqbxNzzrrrCrn53K5dJ/PV+UcevXqpS9YsOCw51Xbz+0zzzyjp6am6p988kmVupV/jjdt2lTtz83tdutpaWn6+eefrzudzmD62rVr9dTUVP2ZZ54Jpt155516amqq/uSTT1Z5nzvvvDOkbTZs2KCnpqbqH374YUi+L7/8MiS9Nr9L4vgilwWFOILi4mLg8L0KlX3xxRcA/O1vfwtJnzZtWsj+cp07d2bAgAHB7djYWDp27Mju3buDaXa7nW3btrFjx45q37OgoID169czevRoiouLycvLIy8vj/z8fIYOHcqOHTuqXP6YNGkSiqIEtwcMGIDP52Pv3r0AREZGAv6B/B6Pp1bnXhOr1YrJZOL777+vcrmkIY4rN27cuJBxMr1790bXdS6++OKQfL1792b//v14vd6jfo/qVO7pKP95DBgwgLKyMjIzM4+6vKysLLZs2cJFF11EdHR0ML1bt26cdtppVT5TAJMnTw7ZHjBgAAUFBcHPc11deOGFVXpyzGZzcNyVz+cjPz+f8PBwOnbsyO+//15jWUfzuf3kk0/o1q1blR5YIORzXJ1ff/2V3NxcLr300pAxX8OHDyclJaXa8ZKXXnrpYcsEWLVqFZGRkQwZMiRY97y8PHr27El4eHjwcnl9/i6JlkEuCwpxBBEREYD/skRt7N27F1VVad++fUh6q1atsNvtweClXOvWrauUERUVFRJM3HTTTfz973/n3HPPJTU1laFDhzJu3Di6desG+KeI0HWdZ555hmeeeabaeuXm5oZcnmnTpk3I/vLLIg6HA4BBgwZx7rnnsmDBAl599VUGDRrE2WefzQUXXHDUA8jNZjO33347jz/+OEOGDKFPnz4MHz6cCy+8kFatWtX7cTWdY/mX3KFtHhkZiaZpFBUVERMTc1TnVp1t27bx73//m/Xr11cJZoqKio66vH379gHQsWPHKvs6derE119/HRx0Xa6mn29hYWHwM10X1V2K1TSN1157jSVLlrBnz56QsWWVg8FDHc3ndteuXZxzzjl1qvPh2i8lJYUff/wxJM1oNJKUlHTEcnfu3ElRURFpaWnV7s/NzQXq93dJtAwSXAlxBBERESQkJLBt27ajOu5I/02XMxgMR8wzcOBA0tPT+fTTT1m3bh1vv/02ixc
|
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"for i in range(5):\n",
|
|
|
|
" plot_consensus(x[i], config)"
|
2025-07-25 00:52:58 -04:00
|
|
|
]
|
2025-07-26 20:07:01 -04:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-26 20:07:01 -04:00
|
|
|
"id": "eaf34907",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"Array([ 0.88282514, 0.4825251 , -0.07153511, 0.03161097, 0.97659564], dtype=float32)"
|
|
|
|
]
|
|
|
|
},
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": 29,
|
2025-07-26 20:07:01 -04:00
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"s = initial_state[0]\n",
|
|
|
|
"s"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-26 20:07:01 -04:00
|
|
|
"id": "faa4b66f",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"Array([[ 0. , -0.40030003, -0.95436025, -0.8512142 , 0.0937705 ],\n",
|
|
|
|
" [ 0.40030003, 0. , -0.5540602 , -0.45091414, 0.49407053],\n",
|
|
|
|
" [ 0.95436025, 0.5540602 , 0. , 0.10314608, 1.0481308 ],\n",
|
|
|
|
" [ 0.8512142 , 0.45091414, -0.10314608, 0. , 0.9449847 ],\n",
|
|
|
|
" [-0.0937705 , -0.49407053, -1.0481308 , -0.9449847 , 0. ]], dtype=float32)"
|
|
|
|
]
|
|
|
|
},
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": 30,
|
2025-07-26 20:07:01 -04:00
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"s[jnp.newaxis, :] - s[:, jnp.newaxis]"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-26 20:07:01 -04:00
|
|
|
"id": "4d025175",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"Array([3, 3, 3, 4, 2], dtype=int32)"
|
|
|
|
]
|
|
|
|
},
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": 31,
|
2025-07-26 20:07:01 -04:00
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"jnp.sum(adj_mat, axis=1)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": null,
|
|
|
|
"id": "0be99bad",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": []
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-07-31 01:12:53 -04:00
|
|
|
"execution_count": null,
|
2025-07-26 20:07:01 -04:00
|
|
|
"id": "dcf551fc",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
2025-07-31 01:12:53 -04:00
|
|
|
"Running Kuramoto simulation for 10000 steps...\n",
|
2025-07-26 20:07:01 -04:00
|
|
|
"Simulation complete.\n",
|
|
|
|
"\n",
|
|
|
|
"--- Analysis Results ---\n",
|
2025-07-31 01:12:53 -04:00
|
|
|
"Initial Coherence R(0): 0.1514\n",
|
|
|
|
"Final Coherence R(T): 0.8072\n",
|
2025-07-26 20:07:01 -04:00
|
|
|
"\n",
|
|
|
|
"Natural Frequencies (ω):\n",
|
2025-07-31 01:12:53 -04:00
|
|
|
"[-0.7398006 -0.604128 -0.20279019 0.44994825 -0.46915287]\n",
|
2025-07-26 20:07:01 -04:00
|
|
|
"\n",
|
|
|
|
"Mean Frequencies over Simulation:\n",
|
2025-07-31 01:12:53 -04:00
|
|
|
"[-0.73979986 -0.22966443 -0.196503 -0.18220069 -0.21775451]\n"
|
2025-07-26 20:07:01 -04:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
2025-07-31 01:12:53 -04:00
|
|
|
"image/png": "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
|
2025-07-26 20:07:01 -04:00
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 1200x800 with 2 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"from kuramoto import *\n",
|
2025-07-31 01:12:53 -04:00
|
|
|
"config = KuramotoConfig(num_agents=5, coupling=2, dt=0.01, T=100)\n",
|
2025-07-26 20:07:01 -04:00
|
|
|
"key = jax.random.PRNGKey(42)\n",
|
|
|
|
"key, adj_key, state_key = jax.random.split(key, 3)\n",
|
|
|
|
"\n",
|
|
|
|
"# 2. Generate system components\n",
|
|
|
|
"adj_matrix = generate_random_adjacency_matrix(adj_key, config)\n",
|
|
|
|
"thetas0, omegas = generate_initial_state(state_key, config)\n",
|
|
|
|
"\n",
|
|
|
|
"# 3. Run the simulation\n",
|
|
|
|
"print(f\"Running Kuramoto simulation for {config.num_time_steps} steps...\")\n",
|
|
|
|
"trajectory = run_kuramoto_simulation(thetas0, omegas, adj_matrix, config)\n",
|
|
|
|
"# Block until the computation is done to measure time accurately if needed\n",
|
|
|
|
"trajectory.block_until_ready()\n",
|
|
|
|
"print(\"Simulation complete.\")\n",
|
|
|
|
"\n",
|
|
|
|
"# 4. Analyze the results\n",
|
|
|
|
"R_over_time = phase_coherence(trajectory)\n",
|
|
|
|
"avg_frequencies = mean_frequency(trajectory, omegas, adj_matrix, config)\n",
|
|
|
|
"\n",
|
|
|
|
"print(\"\\n--- Analysis Results ---\")\n",
|
|
|
|
"print(f\"Initial Coherence R(0): {R_over_time[0]:.4f}\")\n",
|
|
|
|
"print(f\"Final Coherence R(T): {R_over_time[-1]:.4f}\")\n",
|
|
|
|
"print(\"\\nNatural Frequencies (ω):\")\n",
|
|
|
|
"print(np.asarray(omegas))\n",
|
|
|
|
"print(\"\\nMean Frequencies over Simulation:\")\n",
|
|
|
|
"print(np.asarray(avg_frequencies))\n",
|
|
|
|
"\n",
|
|
|
|
"# 5. Plot the results\n",
|
|
|
|
"plot_kuramoto_results(np.asarray(trajectory), np.asarray(R_over_time), config)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": null,
|
|
|
|
"id": "70037c87",
|
|
|
|
"metadata": {},
|
2025-07-31 01:12:53 -04:00
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"Array([[1., 0., 0., 0., 0.],\n",
|
|
|
|
" [0., 1., 0., 0., 1.],\n",
|
|
|
|
" [0., 0., 1., 1., 0.],\n",
|
|
|
|
" [0., 0., 1., 1., 1.],\n",
|
|
|
|
" [0., 1., 0., 1., 1.]], dtype=float32)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"execution_count": 9,
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"adj_matrix"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": null,
|
|
|
|
"id": "7a0cd55f",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"import numpy as np\n",
|
|
|
|
"import matplotlib.pyplot as plt"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": null,
|
|
|
|
"id": "e8791633",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"[<matplotlib.lines.Line2D at 0x72f9e59c8260>]"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"execution_count": 5,
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWh1JREFUeJzt3Xd8VfX9x/HXvTe5N3sRMgiBsIdAkDCMe0RxVMVVtCoULVqLrW3skA6obS22jrqoKEq1+lOoVm2timJUFEXBALKRHVYWkL3vPb8/Tu5NAgkQSHJyk/fz8TiPe3Jz7r0fbpHz7nfaDMMwEBEREbGI3eoCREREpHtTGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGxlMKIiIiIWEphRERERCwVYHUBJ8Lj8bB//37Cw8Ox2WxWlyMiIiInwDAMSktL6dWrF3Z7y+0ffhFG9u/fT3JystVliIiIyEnYs2cPvXv3bvH3fhFGwsPDAfMPExERYXE1IiIiciJKSkpITk723cdb4hdhxNs1ExERoTAiIiLiZ443xEIDWEVERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmGkLdRWweePQ8EWqysRERHxOwojbeGzh2HJLFh4M7jrrK5GRETEryiMnKryg/Dl0+b5wa2w7jVr6xEREfEzCiOn6osnoKYMHE7z56V/AXettTWJiIj4EYWRU1GWDyueNc+vmQchsXB4J3zzqrV1iYiI+BGFkVOx7DGorYCksXDatXD2z8znlz4EdTWWliYiIuIvFEZOVskB+Pp58/yCX4PNBuNuh7AEKM6B1f+0tj4RERE/oTBysj57BOqqoE86DLjQfC4wGM651zz/9BFzyq+IiIgck8LIySjaA6teNM+9rSJeY6ZARBKU7ofsFywpT0RExJ8ojJyMzx4Gdw2knAP9zm36u8AgOPfn9dc9AjUVHV+fiIiIH1EYaa1DO2H1y+b5hb9t/prRt0BUHyjPh5XPdVxtIiIifkhhpLU+fQg8dTDgIuhzRvPXBDjhvF+Z558/BtWlHVaeiIiIvzmpMDJ37lxSUlIICgpiwoQJrFixosVrzz//fGw221HHFVdccdJFW6ZwW8MaIhf85tjXjroRYvpDxUH46pn2r01ERMRPtTqMLFq0iMzMTGbPns2qVatITU1l4sSJ5OfnN3v9G2+8wYEDB3zH+vXrcTgc3HDDDadcfIdb+hcwPDD4UuidduxrHQFw3n3m+RdPQlVx+9cnIiLih1odRh599FGmT5/OtGnTGD58OPPmzSMkJIQFCxY0e31MTAwJCQm+Y8mSJYSEhPhfGMnf3LDvzAW/PrHXjLweYodAVVHD/jUiIiLSRKvCSE1NDdnZ2WRkZDS8gd1ORkYGy5cvP6H3eP7557nxxhsJDQ1t8Zrq6mpKSkqaHJb7ZA5gwLArITH1xF5jd8D59a0jy+dCxaF2K09ERMRftSqMFBYW4na7iY+Pb/J8fHw8ubm5x339ihUrWL9+PT/4wQ+Oed2cOXOIjIz0HcnJya0ps+3lroONbwE2OP8EW0W8hk+CuNOgugSWP9UOxYmIiPi3Dp1N8/zzzzNy5EjGjx9/zOtmzpxJcXGx79izZ08HVdiCj+eYj6ddA/HDW/daux0umGmefzkPygvbtjYRERE/16owEhsbi8PhIC8vr8nzeXl5JCQkHPO15eXlLFy4kNtvv/24n+NyuYiIiGhyWGb/atjyDtjscP7Mk3uPod8xu3Zqy+Hzx9u2PhERET/XqjDidDpJS0sjKyvL95zH4yErK4v09PRjvva1116jurqaW2655eQqtcq6183H066FnoNP7j1stoapwCufh6pOMAZGRESkk2h1N01mZibz58/nxRdfZNOmTdx1112Ul5czbdo0AKZMmcLMmUe3IDz//PNMmjSJHj16nHrVHcm7YFnc0FN7n0GXQOxgs3Vk3b9OvS4REZEuIqC1L5g8eTIFBQXMmjWL3NxcRo8ezeLFi32DWnNycrDbm2acLVu2sGzZMj744IO2qboj1VWbjw7Xqb2PzQZjb4PF98HKBTD29qYb7ImIiHRTNsMwDKuLOJ6SkhIiIyMpLi7u+PEjr30fNrwJlz0EE+44tfeqPAyPDIW6Krh9CSQfeyCviIiIPzvR+7f2pjkeb8tIgPPU3ys4GkZcZ55/3fwicSIiIt2NwsjxtFU3jdfY28zH9W9oETQREREURo7P1zLSRmEkKQ0SRoK7umHTPRERkW5MYeR43G0cRrwDWcHsqun8Q3ZERETalcLI8bR1ywjAyBvAGQYHt8Guz9rufUVERPyQwsjxtPWYEQBXOIz6rnmugawiItLNKYwcT1t303h5u2o2vQ1l+W373iIiIn5EYeR42qObBsxBrL3HgacOVr/Utu8tIiLiRxRGjqc9umm8vK0j2S+Ax9327y8iIuIHFEaOx11jPrZ1ywjAaddAUCQU5cD2j9r+/UVERPyAwsjx1FWZj+0RRgKDYfTN5rkGsoqISDelMHIsHrc5pgPap5sGIM3c7ZhvF0Px3vb5DBERkU5MYeRYvONFoH1aRgB6DoaUc8DwwKp/ts9niIiIdGIKI8fi7oAwAjC2vnUk+0Vw17bf54iIiHRCCiPHUlc/eNVmB3tA+33O0CshJBbKcs3uGhERkW5EYeRYvINXHS5zT5n2EuCEMbea5xrIKiIi3YzCyLG057TeI42ZCtjMKb6HdrT/54mIiHQSCiPH0p7Teo8U0w8GXmSeZ7/Q/p8nIiLSSSiMHIt3zEh7Tes9kndF1tUvN53JIyIi0oUpjBxLR7aMAAyaCBFJUHEQ1r/RMZ8pIiJiMYWRY2mvHXtb4giAcbeb51/NA8PomM8VERGxkMLIsdR14ABWrzHfh4AgOLAG9nzVcZ8rIiJiEYWRY2k8tbejhPaAkTeY51/N67jPFRERsYjCyLH4pvY6O/ZzJ9xpPm78LxTv69jPFhER6WAKI8fiG8Aa1LGfmzAS+p4NhhtWPtexny0iItLBFEaOxTu91tHBLSMAZ/zQfMx+AWorO/7zRUREOojCyLH4umk6uGUEYMjlENkHKg/Butc7/vNFREQ6iMLIsfi6aSxoGbE7YPx081zTfEVEpAtTGDmWjl6B9UhjboXAEMhbD7s/t6YGERGRdqYwcixWDWD1Co6GUZPN8y+ftqYGERGRdqYwcixWTe1tbEL9QNYt78Lh3dbVISIi0k4URo7FO5vGqpYRgLih0P98MDya5isiIl2SwsixWDm1t7EJd5mPq16EmnJraxEREWljCiPH0tEb5bVk0CUQ3Q+qimHtImtrERERaWMKI8fiG8BqcRix22H8Heb5V89omq+IiHQpJxVG5s6dS0pKCkFBQUyYMIEVK1Yc8/qioiJmzJhBYmIiLpeLwYMH8+67755UwR3K6qm9jZ1+MzjDoGAz7PjE6mpERETaTKvDyKJFi8jMzGT27NmsWrWK1NRUJk6cSH5+frPX19TUcPHFF7Nr1y5ef/11tmzZwvz580lKSjrl4tuduxMMYPUKioTR3zPPv3rG2lpERETaUKvDyKOPPsr06dOZNm0aw4cPZ968eYSEhLBgwYJmr1+wYAGHDh3irbfe4qyzziIlJYXzzjuP1NTUUy6+3flm01g8gNXL21Xz7WI4tMPaWkRERNpIq8JITU0N2dnZZGRkNLyB3U5GRgbLly9v9jX//e9/SU9PZ8aMGcTHxzNixAj+/Oc/43a7W/yc6upqSkpKmhyW6AxTexuLHQQDLwYMWDHf6mpERETaRKvCSGFhIW63m/j4+CbPx8fHk5ub2+xrduzYweuvv47b7ebdd9/ld7/7HY888gh/+tOfWvycOXPmEBkZ6TuSk5NbU2bb6SxTexvzLoK2+mWoLrW2FhERkTbQ7rNpPB4PcXFxPPvss6SlpTF58mR+85vfMG/evBZfM3PmTIqLi33Hnj172rvM5nWWqb2NDbgQegyC6hLIfsHqakRERE5Zq8JIbGwsDoe
|
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"x = [i for i in range(50)]\n",
|
|
|
|
"y = [np.log(i+1)/(i+1) for i in x]\n",
|
|
|
|
"y2 = [2*np.log(i+1)/(i+1) for i in x]\n",
|
|
|
|
"\n",
|
|
|
|
"plt.plot(x, y)\n",
|
|
|
|
"plt.plot(x, y2)\n"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": 3,
|
|
|
|
"id": "a9136787",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"import sims"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": 4,
|
|
|
|
"id": "742861f5",
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
|
|
|
"{'num_sims': 500,\n",
|
|
|
|
" 'num_agents': 5,\n",
|
|
|
|
" 'max_range': 1,\n",
|
|
|
|
" 'step_size': 0.1,\n",
|
|
|
|
" 'directed': False,\n",
|
|
|
|
" 'weighted': False,\n",
|
|
|
|
" 'num_time_steps': 100}"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"execution_count": 4,
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"sims.consensus_config\n"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": null,
|
|
|
|
"id": "2c460e07",
|
|
|
|
"metadata": {},
|
2025-07-26 20:07:01 -04:00
|
|
|
"outputs": [],
|
|
|
|
"source": []
|
2025-07-25 00:52:58 -04:00
|
|
|
}
|
|
|
|
],
|
|
|
|
"metadata": {
|
|
|
|
"kernelspec": {
|
|
|
|
"display_name": "graph-recognition-w-attn",
|
|
|
|
"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.3"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"nbformat": 4,
|
|
|
|
"nbformat_minor": 5
|
|
|
|
}
|