Questions 1 and 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Project_subgraphs_1-2/Reciprocated_arcs.ipynb

253 lines
28 KiB

{
"cells": [
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#libraries\n",
"\n",
"import random\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Creation of the directed random regular graph according to Configuration model (Bollobas paper), with kout fixed\n",
"#Think to a different kin, kout (kin is function of kout someway)\n",
"\n",
"def RRG_direct(k,N):\n",
" bool_graph = 0\n",
" while bool_graph == 0:\n",
" #print('ok')\n",
" bool_graph = 1\n",
" buckets = [[] for i in range(N)]\n",
" edges_out = []\n",
" edges_in = []\n",
" edge_list_out = [[] for i in range(N)]\n",
" edge_list_in = [[] for i in range(N)]\n",
" pool_out = [i for i in range(N*k)]\n",
"\n",
" i=0\n",
" j=0\n",
" while i<N:\n",
" if(len(buckets[i]) != k):\n",
" buckets[i].append(j)\n",
" j += 1\n",
" else:\n",
" i += 1\n",
" \n",
" pool_out = [i for i in range(N*k)]\n",
" pool_out_mod = list(pool_out)\n",
" \n",
" for i in range(int(N*k)): #outgoing edges\n",
" j = int(random.uniform(0, 1)*(N*k-i))\n",
" l = j\n",
" while l == j:\n",
" l = int(random.uniform(0, 1)*(N*k))\n",
" \n",
" edges_out.append(pool_out_mod[j])\n",
" edges_in.append(pool_out[l])\n",
" del pool_out_mod[j]\n",
" \n",
" \n",
" for i in range(len(edges_out)): #We store the graph in two sorts of compressed-row pythonic formats (list of list)\n",
" edge_list_out[int(edges_out[i]/k)].append(int(edges_in[i]/k))\n",
" for i in range(len(edges_in)):\n",
" edge_list_in[int(edges_in[i]/k)].append(int(edges_out[i]/k))\n",
" \n",
" #print(edge_list)\n",
"\n",
" #I check if the graph I built is good (no multiedges/no loops) for both edge_lists, \n",
" #but in the limit of big N and low k,\n",
" #we could neglect this since the probability of finding such a wrong graph is .... (check paper Bollobas)\n",
"\n",
" for i in range(len(edge_list_out)):\n",
" for j in range(len(edge_list_out[i])):\n",
" temp = edge_list_out[i][j]\n",
" if i == edge_list_out[i][j]: #checking for loops\n",
" #print('ok0')\n",
" bool_graph = 0\n",
" break\n",
" no_element = list(edge_list_out[i])\n",
" del no_element[j]\n",
" for l in range(len(no_element)):\n",
" if no_element[l] == temp: #checking for multiedges\n",
" #print('ok1')\n",
" bool_graph = 0\n",
" break\n",
" del no_element\n",
" if bool_graph == 0:\n",
" break\n",
" if bool_graph == 0:\n",
" break\n",
" \n",
" if(bool_graph==0):\n",
" #print('ok')\n",
" del buckets, edges_out, edges_in, edge_list_out, edge_list_in, pool_out, pool_out_mod\n",
" \n",
" return edge_list_out, edge_list_in"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Computing numerically the reciprocated arcs\n",
"\n",
"def r_numerical(edge_list_out, edge_list_in, k, N):\n",
" r = 0\n",
" for i in range(len(edge_list_out)):\n",
" for j in range(len(edge_list_out[i])):\n",
" if(edge_list_out[i][j] in edge_list_in[i]):\n",
" r += 0.5\n",
" return 2*r/(k*N)"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Main\n",
"\n",
"def Compare_formula_vs_algo(k,N_ens):\n",
" dim_arr = [10, 50, 100, 500, 1000, 5000]\n",
" r_num = [[] for i in range(len(dim_arr))]\n",
" r_num_mean = []\n",
" r_num_err = []\n",
" r_th = []\n",
" for N in dim_arr:\n",
" print(N)\n",
" for n in range(N_ens):\n",
" \n",
" #Graph creation from ERG\n",
" #edge_list = ERG(p,N)\n",
" \n",
" #Graph creation from RRG\n",
" edge_list = RRG_direct(k,N)\n",
" n+=1\n",
" \n",
" #Computing the number of reciprocated arcs (algorithm)\n",
" r_num[dim_arr.index(N)].append(r_numerical(edge_list[0],edge_list[1],k,N))\n",
" \n",
" #Calculating the average over the ensemble\n",
" r_num_mean.append(sum(r_num[dim_arr.index(N)])/N_ens)\n",
" \n",
" #Calculating the error for each value\n",
" r_num_err.append(np.std(r_num[dim_arr.index(N)]))\n",
" \n",
" #Calculating the clustering coefficient for RRG (formula)\n",
" r_th.append(k/(N-1))\n",
" \n",
" #Calculating the clustering coefficient for ERG (formula)\n",
" #C_th.append(k/(N))\n",
" \n",
" return (r_num_mean, r_num_err, r_th)"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10\n",
"50\n",
"100\n",
"500\n",
"1000\n",
"5000\n"
]
}
],
"source": [
"r_try = Compare_formula_vs_algo(3,100)"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x234243d9e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Plots for random regular graphs\n",
"#Remember to specify the kout of the graph and get results for many different kout\n",
"\n",
"dim_arr = [10, 50, 100, 500, 1000, 5000]\n",
"log_dim_arr = np.log10(np.asarray(dim_arr))\n",
"\n",
"\n",
"\n",
"plt.errorbar(log_dim_arr, r_try[0], yerr=r_try[1], fmt='--o', label='C from numerics')\n",
"plt.plot(log_dim_arr, r_try[2], 'x', label='C from theory')\n",
"plt.xlabel('Net size')\n",
"plt.ylabel('# reciprocated arcs')\n",
"plt.title('Comparison reciprocated arcs numerics vs theory')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [default]",
"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.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}