{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# GDM via Differentiable Programming\n", "\n", "In this simulation we use a **differentiable programming** approach to solve the problem of **consensus reaching** in **group-decision making** (GDM). GDM studies the problem of aggregating the opinions of many experts/agents and the dynamics required to reach a consensus. Differentiable programming (also known as *software 2.0*) offers a novel approach to coding, focused on defining parametrized differentiable model to solve a problem instead of coding a precise algorithm (for a neat presentation of this paradigm, see, for instance [1]). \n", "\n", "In this notebook, we first define a model for aggregating preferences, and then we use differentiable programming to compute an optimal change to the original preferences that would lead to a consensus.\n", "\n", "In this simulation we will use a simple model, but we will underline how this can be easily extended." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Problem Statement\n", "\n", "A set of $M$ experts/agents provided us with evaluations over a set of $N$ choices/options. Evaluations are expressed as the degree of preference of one option over another. Preferences are quantified as real number in the interval $(0,1)$. For simplicity, we make the assumption that all pairs of options have a preference specified, and that the preferences expressed by an expert are consistent.\n", "\n", "We consider three related problems: (i) Given the pairwise preferences for an expert, how can we define a ranking for his/her choices? (ii) Given the pairwise preferences for all the experts, how can we define a global consensus ranking for the available choices? (iii) How are the pairwise preferences of each expert supposed to be changed in order to converge to the global consensus ranking?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We assume that the data is given in the form of a tensor $X$ with dimensions $N \\times N \\times M$, where $N$ is the number of choices/options and $M$ is the number of experts/agents. A slice $X[:,:,i]$ of this tensor is a matrix of dimension $N \\times N$ encoding the pairwise prefereces of the i-th expert.\n", "\n", "### Individual Aggregation\n", "In order to produce a ranking for each expert (Problem (i)), we need an *aggregation function f over the choices* which, for every expert, reduces the matrix of pairwise preferences to a ranking vector:\n", "$$\n", "f: \\mathbb{R}^{N \\times N \\times M} \\rightarrow \\mathbb{R}^{N \\times M}.\n", "$$\n", "\n", "### Global Aggregation\n", "In order to generate a final global consensus (Problem (ii)), we need to produce a final ranking $r$ of dimension $N$. To do this, we define an *aggregation function g over the experts* which aggregates together the rankings of the experts:\n", "$$\n", "g: \\mathbb{R}^{N \\times M} \\rightarrow \\mathbb{R}^{N}.\n", "$$\n", "\n", "### Aggregation Model\n", "We compose the functions $f$ and $g$ in our aggregation model:\n", "$$\n", "g \\circ f: \\mathbb{R}^{N \\times N \\times M} \\rightarrow \\mathbb{R}^{N}.\n", "$$\n", "For simplicity, here we will take $f$ and $g$ to be simple averages. Notice, however, that these functions can be changed to whatever function we want, as long as they are differentiable.\n", "\n", "### Consensus \n", "In order to evaluate the change in individual preferences (Problem (iii)), we express the *change for consensus* as a tensor $W$ of dimension $N \\times N \\times M$. We then redefine our aggregation model as:\n", "$$\n", "r = g(f(X+W))\n", "$$\n", "Notice that $W$ is applied in an addittive way, but this may changed (for instance, being multiplicative), and more structure may be imposed on it (for instance, requiring $W$ to be symmetric).\n", "\n", "### Loss function \n", "We now formulate an optimization problem requiring to learn a consensus that would require a *minimal* change in the individual preferences. To do this, we define the following loss to be minimized:\n", "$$\n", "\\mathcal{L} = \\left\\| r - f(X+W) \\right\\|_2.\n", "$$\n", "This loss evaluates the 2-norm of the difference between the final consensus and the ranking proposed by each expert. Notice that this loss can easily be changed to other $p$-norms, to a different loss altogether, or that it can be enriched with a regularization term." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Importing Libraries\n", "\n", "Importing standard libraries and the following modules:\n", "- *datagenerator.py*: containing data sources;\n", "- *aggregationlib.py*: containing functions to perform aggregations." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import tensorflow as tf\n", "\n", "import datagenerator as data\n", "import normalizationlib as normlib\n", "import aggregationlib as agglib" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Loading the data\n", "\n", "We load the data taken from a paper by Viedma et al. [2], and we normalize it. (Normalization can arbitrarily change)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "X = data.get_PREF_tensor_Viedma1()\n", "X = normlib.normalize_by_column_tensor(X).astype('float32')\n", "\n", "n_choices = X.shape[0]\n", "n_experts = X.shape[2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining the loss function\n", "We define the loss as the $\\ell_2$-norm between the matrix $R$ containing the ranking of each expert and the aggregate ranking $r$. This loss function gives us a measure of the distance of each expert from the collective aggregated solution $r$. \n", "(Loss function can arbitrarily change)." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def L2loss(R,r):\n", " rr = tf.reshape(r,(r.shape[0],1))\n", " return tf.norm(R-rr, ord=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implemeting the model\n", "We define the model explained above $r = g(f(X+W))$, where both $f$ and $g$ are simple averages (*tf.reduce_mean*). The framework for differentiable programming takes care of computing $\\frac{\\partial\\mathcal{L}}{\\partial W}$. We then learn with a learning step $\\epsilon = 0.005$.\n", "(Aggregation functions $f$ and $g$ and step $\\epsilon$ can arbitrarily change)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "learning_step = 0.005\n", "W = tf.Variable(tf.zeros((n_choices,n_choices,n_experts), dtype='float32'))\n", "\n", "def step(X):\n", " with tf.GradientTape(persistent=True) as tape:\n", " XX = X + W\n", " R = tf.reduce_mean(XX,axis=1)\n", " r = tf.reduce_mean(R,axis=1)\n", " \n", " loss = L2loss(R,r)\n", " \n", " W_grad = tape.gradient(loss,W)\n", " W.assign_sub(W_grad*learning_step)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running the model\n", "We finally run the model for $500$ iterations to learn the value of $W$.\n", "(Number of iterations can arbitrarily change)." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "for _ in range(500):\n", " step(X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Analysis of the Results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analysis of the original data\n", "We first take a look at the original data; in particular, we visualize what is the ranking of the options among the experts at the beginning." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "R = tf.reduce_mean(X,axis=1)\n", "\n", "for i in range(8):\n", " plt.subplot(2, 4, i+1)\n", " plt.bar(np.arange(6),R[:,i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that experts have different rankings among them; for instance some place the first option as the best alternative, some favour the second option, some opt for the third." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analysis of the data after learning\n", "We now look at the data after each expert has reviewed his/her opinion as computed by the matrix $W$." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "R = tf.reduce_mean(X+W,axis=1)\n", "\n", "for i in range(8):\n", " plt.subplot(2, 4, i+1)\n", " plt.bar(np.arange(6),R[:,i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now all the experts converge to the same ranking." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us also visualize the type of changes imposed by $W$." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,6))\n", "for i in range(8):\n", " plt.subplot(2, 4, i+1)\n", " im = plt.imshow(W[:,:,i],cmap='binary')\n", " cbar = plt.colorbar(im,shrink=.5)\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We notice that the solution found by this simple algorithm relies on increasing/decreasing the value of certain choices of a fixed amount wrt to all the other options (black means increasing a preference, white means decreasing preference).\n", "\n", "Notice that these changes may violate the original consistency of the preferences expressed by each individual expert." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Alternative Models\n", "We consider a couple of alternative implementations and check the results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Symmetric changes\n", "We reimplement the same model, this time forcing $W$ to be symmetric." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def L2loss(R,r):\n", " rr = tf.reshape(r,(r.shape[0],1))\n", " return tf.norm(R-rr, ord=2)\n", "\n", "learning_step = 0.005\n", "W = tf.Variable(tf.zeros((n_choices,n_choices,n_experts), dtype='float32'))\n", "\n", "def step(X):\n", " with tf.GradientTape(persistent=True) as tape:\n", " \n", " symW = 0.5*(W + tf.transpose(W,perm=[1,0,2]))\n", " XX = X + symW\n", " R = tf.reduce_mean(XX,axis=1)\n", " r = tf.reduce_mean(R,axis=1)\n", " \n", " loss = L2loss(R,r)\n", " \n", " W_grad = tape.gradient(loss,W)\n", " W.assign_sub(W_grad*learning_step)\n", " \n", "for _ in range(1000):\n", " step(X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We plot the individual ranking after the correction for consensus." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "symW = 0.5*(W + tf.transpose(W,perm=[1,0,2]))\n", "R = tf.reduce_mean(X+symW,axis=1)\n", "\n", "for i in range(8):\n", " plt.subplot(2, 4, i+1)\n", " plt.bar(np.arange(6),R[:,i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consensus reached. We now plot the correction for consensus." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "symW = 0.5*(W + tf.transpose(W,perm=[1,0,2]))\n", "\n", "plt.figure(figsize=(12,6))\n", "for i in range(8):\n", " plt.subplot(2, 4, i+1)\n", " im = plt.imshow(symW[:,:,i],cmap='binary')\n", " cbar = plt.colorbar(im,shrink=.5)\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now changes are symmetric. The result is formally correct, although it may practically make little sense (anti-symmetry may be of more interest)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Noisy initialization\n", "Instead of initiliazing $W$ to zero we now initialize with random Gaussian noise, to represent the fact that the estimations of the experts are not precise. This add some stochasticity and allows us to run the algorithm with different initializations. We reimplement the model forcing $W$ to be Gaussian." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def L2loss(R,r):\n", " rr = tf.reshape(r,(r.shape[0],1))\n", " return tf.norm(R-rr, ord=2)\n", "\n", "learning_step = 0.005\n", "W = tf.Variable(tf.random.normal((n_choices,n_choices,n_experts), mean=0.0, stddev=.05, dtype='float32'))\n", "\n", "def step(X):\n", " with tf.GradientTape(persistent=True) as tape:\n", " \n", " XX = X + W\n", " R = tf.reduce_mean(XX,axis=1)\n", " r = tf.reduce_mean(R,axis=1)\n", " \n", " loss = L2loss(R,r)\n", " \n", " W_grad = tape.gradient(loss,W)\n", " W.assign_sub(W_grad*learning_step)\n", " \n", "for _ in range(1000):\n", " step(X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We plot the individual ranking after the correction for consensus." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "R = tf.reduce_mean(X+W,axis=1)\n", "\n", "for i in range(8):\n", " plt.subplot(2, 4, i+1)\n", " plt.bar(np.arange(6),R[:,i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consensus (different from before!) reached. We now plot the correction for consensus." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAF2CAYAAACYkYLEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3de7RdZX32/etKSEJCoiQkRQggVKASSxUM0FEeD4BgaNXIECqeXhziSG11FFodFV5btWgdWMd4tEOxkiKPUSuIUDX4cGgEKR6QskGqAgKRRgihQkhCOIeE3/vHXivvYrPWXqf73vOwvp8x9shea8/1W79NcjHXfc857+mIEAAAAAAgrWlFNwAAAAAAdcRgCwAAAAAyYLAFAAAAABkw2AIAAACADBhsAQAAAEAGu+Qouuuuu8a8efNylFauuk3btm3LVnv27NnZakvSC1/4wqz1c1m3bp02btzoovsos3nz5sWiRYuy1M75b16SXvSiF2WrvWXLlmy1c3vmmWey1r/33ns3RkSefzQ1MHv27HjBC16Qpfb27duz1G2aNWtWttq5e3/qqaey1Z42Le/88SOPPEKmJjFz5syYM2dOltrPPvtslrpNO3bsyFb7iSeeyFZbknL9N5ek3XffPVttSdqwYcNIZCrLYGvevHl685vfnKO0jj322Cx1m+67775stQ899NBstSXpxBNPzFY75y0CjjjiiGy162LRokU655xzstTO+W9eks4+++xstVevXp2ttpT33/3999+frbYkvf/97/9N1jeouBe84AV6xzvekaX2gw8+mKVu04EHHpitdu7ef/WrX2WrPXfu3Gy1Jenyyy8nU5OYM2eOXvOa12Sp/dhjj2WpOxX1//M//zNbbUl66Utfmq32SSedlK22JP3d3/3dSGSK0wgBAAAAIAMGWwAAAACQAYMtAAAAAMiAwRYAAAAAZMBgCwAAAAAyYLAFAAAAABkw2AIAAACADHoabNleZvtO22ttn5W7KaDuyBSQHrkC0iJTwPC6DrZsT5d0nqQTJS2R9DbbS3I3BtQVmQLSI1dAWmQKSKOXI1tHSlobEfdExDZJF0tanrctoNbIFJAeuQLSIlNAAr0MthZLuq/l8frGc89he4XtMdtjTz31VKr+gDrqO1Nbt26dsuaAiuqaq9ZMPfnkk1PaHFBBfWVq27ZtU9ocUBW9DLbc5rl43hMRKyNiaUQs3XXXXYfvDKivvjP1ghe8YAraAiqta65aMzV79uwpaguorL4yNXPmzClqC6iWXgZb6yXt2/J4H0kb8rQDjAQyBaRHroC0yBSQQC+DrZskHWT7ANszJZ0qaXXetoBaI1NAeuQKSItMAQns0m2DiNhu+wOSrpY0XdKFEXFb9s6AmiJTQHrkCkiLTAFpdB1sSVJEXCHpisy9ACODTAHpkStUle1lkv5J44OaCyLi3Ak//2tJ75W0XdJDkt4TEb/J3ReZAobX002NAQAAkF6P97P6maSlEfEHki6V9I9T2yWAQTHYQiXYjjZfVxXdF1BVHTJFroAhDJiprveziogfRMQTjYc/1fhiFUDt1WE/1dNphEAZTJv23LmBZ599dmFBrQC1MDFTErkChjXAvqrd/ayOmmT70yVdOVBzQAVV/fMfgy1URpuwFdQJUA8dBlsFdALUR7sPhrbHWp5aGRErWx73dO9FSbL9TklLJb1m2D6Bqqj65z8GW6gE25o+ffpzntu+fXtB3QDV1y5TErkChtFhX7UxIpZO8rKe7mdl+3WSPiLpNRHxdIJ2gdKrw+e/LIOtBQsW6J3vfGeO0nrNa/JO5vz0pz/NVvuooyY7K2B4n/jEJ7LV3rRpU7ba9913X/eN1H4WflRs2bJFl19+ebbaOd1www3Zah933HHZakvSVVflOy28DDNzo5ypbdu26Te/ybOY21133ZWlbtNtt+VbfXvWrFnZakvSjTfemK32smXLstXuxwC52nk/K0n3a/x+Vm9v3cD2YZLOl7QsIh5M0WdqL37xi/XP//zPWWp//vOfz1K36SMf+Ui22jn3I5L05je/OVvtv/zLv8xWux9V31dxZAuV0GkWHsBgyBSQ3iC56nQ/K9vnSBqLiNWSPiNprqRv2ZakeyPiTWm7B8qnDvsqBluojKrPbABlQ6aA9AbJVbv7WUXER1u+f93wnQHVVPV9VbW7x8hozmy0fgEYXLtM9ZIr28ts32l7re2z2vz81bZvsb3d9slZmgdKin0VkFYdMsWRLVRG1Wc2gLLpN1MtN189XuMX9d9ke3VE3N6y2b2S3i3pQ4naBCqFfRWQVtUzxWALlVCHc3aBMhkwUztvvtqo0bz56s7BVkSsa/ys+BVAgCnGvgpIqw6ZYrCFyqj6zAZQNgNkqt+brwIjh30VkFbVM8VgC5VQh5kNoEwmydRkN2Dt+earwChiXwWkVYdMMdhCZVR9ZgMomw6ZmuwGrD3dfBUYZeyrgLSqnqmu3du+0PaDtn85FQ0B7djWtGnTnvNVZeQKRWuXqR5ytfPmq7Znavzmq6uzN9sDMoUyqNO+ikyhDOqQqV46/oqkctyWHSNtkKU/S7xM9VdErlCwfpd+j4jtkpo3X71D0iXNm6/afpMk2T7C9npJp0g63/ZtmX+Npq+ITKEEqr5MdYuviEyhBKr++a/raYQRcb3t/XM2AXTTnNno8zWlXaaaXKFog2RK6unmqzdp/PTCKUWmUAaD5qqMyBTKoA6f/7hmC5XBMtVAWhWfdQdKiVwBaVX981+y6RfbK2yP2R575JFHUpUFJHU8Z3dh899c42vFhJe1W6Z68VT1PKzWTD399NNFt4OaGfCarUojU8itDteX9KM1Uw8//HDR7aCGBsxUqT7/JTuy1VgaeKUk/d7v/R5LASO5NjMbk62aJlV8merWTC1YsKAyfaM6Rm0GvjVT8+fPJ1PIYpRy1Zqpl7/85WQKWbTJ1GS3KJFK9vmP0whRCQOeB88y1UAHdbq2BCgLcgWk1SFT3SbbS/X5r5el3y+SdIOk37O93vbp+dsCnm+A1WjKvEw1uULh+l2NsMzIFMqCTAFpVf3zXy+rEb5tKhoBJjPIbGFEbLfdXKZ6uqQLm8tUSxqLiNW2j5D0bUnzJb3R9t9HxMtS99+mN3KFQtVtBp5MoQzqlCsyhTKow+c/TiNEZQwyQ1jWZaqBMqjyrDtQVoPkyvYySf+k8Q+GF0TEuRN+/mpJn5P0B5JOjYhLE7QKVELVP/8x2EIl1Gm2ECgDMgWkV4d7AgFlUod9FYMtVAaz8EBaZApIr+r3BALKpur7KgZbqIQ6zGwAZUKmgPQ65KrbMtXt7gl0VKYWgUqpw76KwRYqo+ozG0DZkCkgvVG7JySQW9X3VQy2UAl1mNkAyoRMAelxT0ggrTrsq7IMtp588kn913/9V47S+uIXv5ilbtMRRxyRrfYll1ySrbYkPfroo9lqH3vssdlqf/e73+1pu6rPbAxjx44deuSRR7LUXrBgQZa6TYcccki22l/5yley1Zake++9N1vt2bNnZ6vdq1HO1Ete8hJddtllWWqPjY1132gIN9xwQ7baTz31VLbaknTyySdnq/2iF70oW21Juuqqq3raboBc7bwnkKT7NX5PoLf3W6Ro9913n84888wstdevX5+lbtN3vvOdbLXf+MY3ZqstSddee2222v/zP/+TrXY/qr6vqvZQESOjObPR+gVgcO0yRa6A4Qyyr4qI7ZKa9wS6Q9IlzXsC2X5To+4RttdLOkXS+bZvy/hrAKVRh89/nEaIyqj6zAZQNmQKSK/q9wQCyqbq+yoGW6iEOpyzC5QJmQLSI1dAWnXIFIMtVEbVZzaAsiFTQHrkCkir6plisIVKqMPMBlAmZApIj1wBadUhUwy2UAm2Kz+zAZQJmQLSI1dAWnXIFIMtVEbVZzaAsiFTQHrkCkir6plisIXKqHrYgLIhU0B65ApIq+qZ6tq97X1t/8D2HbZvs33GVDQGtGoeRm79qioyhTJolylyBQyHfRWQVh0y1cuRre2SPhgRt9ieJ+lm22si4vbMvQHPUfWZjRZkCqVQo0xJ5AolUaNckSmUQtUz1XWwFREPSHqg8f2jtu+QtFgSYcOUqcMFkk1kCmVQp0xJ5ArlUKdckSmUQR0y1dc1W7b3l3SYpBvb/GyFpBWSNH/+/AStAc9V9ZmNdnrN1K677jqlfWE01DFTUudctWZqv/32m/K+MBrqmKteMjVnzpwp7wujoeqZ6rl723MlXSbpzIjYOvHnEbEyIpZGxNK5c+em7BGoxTm7E/WTqZkzZ059g6i1Qa/Zsr3M9p2219o+q83PZ9n+ZuPnNzY+pE2ZyXLVmqlFixZNZVsYEaO2r2rN1KxZs4ppELVWh0z1NNiyPUPjQfvXiPi3vC0B7U2bNu05X1VGplAGEzPVLVe2p0s6T9KJkpZIepvtJRM2O13S5og4UNJnJX06Q+ud+iNXKBz7KiCtqmeq62mEti3py5LuiIj/nb8l4PnqcM5uE5lCGQyYqSMlrY2Iexo1Lpa0XM+9hmO5pI83vr9U0hdsOyJiuI4nR65QBuyrgLTqkKlehodHS3qXpGNt39r4+uPMfQHPU/WZjRZkCqXQ4cjWQttjLV8rWl6yWNJ9LY/XN55Tu20iYrukRyTtke+32IlcoRTYVwFpVT1TvaxG+CNJnoJegI7qMLPRRKZQBpNkamNELO30sjbPTTxi1cs2yZErlAH7KiCtOmSqesNDjKyqz2wAZdPvNVsaP5K1b8vjfSRt6LSN7V0kvVDSpkQtA6U3yL6q7AvPAEWq+ue/6nWMkVSH1WiAMhlwNcKbJB1k+wDbMyWdKmn1hG1WSzqt8f3Jkq7Nfb0WUBaD7KvKvvAMUKQ6fP5jsIXKqPrMBlA2/R7ZalyD9QFJV0u6Q9IlEXGb7XNsv6mx2Zcl7WF7raS/lvS8WXqgzgbYV+1ceCYitklqLjzTarmkVY3vL5V0XGMBC6D2qv75r6+bGgNFqcM5u0CZDJqpiLhC0hUTnvtoy/dPSTpl6AaBCuqQq4W2x1oer4yIlS2P2y08c9SEGs9ZeMZ2c+GZjUkaB0qqDp//GGyhMqo4mwGUGZkC0muTq8kWnZFKvPAMUAZV31dlGWxt2bJF3/nOd3KU1kMPPZSlbtMll1ySrfZLX/rSbLUlaffdd89We+PGfJNnmzdv7rpNHWY2hrHbbrvpiCOOyFJ74cKFWepOhc9+9rNZ699www3Zap900knZakvSIYccMunPRz1TDz30kFauXNl9wwHMnTs3S92mmTNnZqu9ZMnES4XSOvTQQ7PVPu+887LV7tWAuepn4Zn1ZV14ZsuWLfre976XpfaRRx6ZpW5Tt/9fDuNf/uVfstXOLffn1l4Muq+yvUzSP0maLumCiDh3ws9nSfqqpFdKeljSWyNi3dANt1HtoSJGStXP2QXKZoDVCAF0MUCmWHgGmES/mSrbojOcRohKGPVZeCA1MgWkN0iuGtdgNReemS7pwubCM5LGImK1xhee+Vpj4ZlNGh+QAbU34L5q56IzjRrNRWdub9lmuaSPN76/VNIXbDvHJAaDLVTGILPuZTqMDJQNR7KA9AbJFQvPAJ21yVSlFp1hsIVKGGRmo+Uw8vEaD9pNtldHROvMxs7DyLZP1fhh5LcmahsoLY5sAemRKyCtDpmq1KIzTGuiMrh3CZAW12wB6ZEpIK0BMtXPojPKvegM/xdAJXS4g/hC22MtXysmvKzdYeTFnbZp3LC1eRgZqLV2mWJGHhhOh30VgAENmKlSLTrDaYSoDO5dAqTFrDuQHrkC0uo3U2VbdIbBFirB9iA7sFrcuwTIYcBMAZgEuQLSGjRTZVp0putgy/aukq6XNKux/aUR8bHcjQETDXA6xs7DyJLu1/isxdsnbNM8jHyDpujeJWQKZVGnU5zIFcqiLrkiUyiLqmeqlyNbT0s6NiIesz1D0o9sXxkRP83cG7DTIDMbZTuM3IJMoXA1nIEnVyhczXJFplC4OmSq62CrMcv/WOPhjMYX17Rgyg0ys1Gmw8gt70mmUApVny1sRa5QFnXJFZlCWVQ9Uz0NFW1Pt32rpAclrYmIG9tss6K5Kty2bdtS94kR15zZqMtyuv1m6vHHH5/6JlFr7TJV91y1Zuqxxx5rXwQYwqjtq1ozVUyHqLs6ZKqnjiNiR0S8QuMLDBxp+/fbbLMyIpZGxNKZM2em7hOo1XK6/WZqt912m/omUXt1W/q9W65aMzV37tximkTtjWqmiukQo6DqmepreBgRWyRdJ2lZlm6ADuows9EOmUJR6nhkq4lcoSjsq4C06pCprh3bXmR798b3syW9TtKvcjcGtKrTjSLJFMqgbjc1JlcoA/ZVQFp1yFQvqxHuJWmV7ekaH5xdEhHfy9sW8HxVnM3ogEyhFGqUKYlcoSRqlCsyhVKoeqZ6WY3w55IOm4JegI6aMxt1QKZQBnXKlESuUA51yhWZQhnUIVPVHipipFT9nF2gbOp6zRZQpJSZsr3A9hrbdzf+nN9hu6tsb7HNkSfUTtX3U9XrGCOpDufsAmVSt2u2gDLIsK86S9I1EXGQpGsaj9v5jKR3DftmQNnU4fMfgy1URtVnNoCy4cgWkF7iTC2XtKrx/SpJb263UURcI+nRYd8MKKOq76d6WSADKFwdztkFyoRMAellyNWeEfGAJEXEA7Z/J2VxoOzqsK9isIXKqOJsBlBmZApIr02uFtoea3m8MiJWNh/Y/r6kF7Up9ZEM7QGVU/V9FYMtVEIdZjaAMiFTQHodcrUxIpZ2ek1EvG6Ser+1vVfjqNZekh5M1CpQCXXYV2UZbL34xS/W+eefn6O03vKWt2Sp23Teeedlq3355Zdnqy1J73jHO7LVnjNnTrbav/jFL3raruozG8PYunWr1qxZk6X2jTfemKVu0zHHHJOt9urVq7PVlqQHH8z3ueazn/1sttq9Sp0p2wskfVPS/pLWSfrTiNjcZrurJP2hpB9FxBuSNtGjiNBTTz2VrXZOM2fOzFb785//fLbakvSud+Vbw2HGjBnZavcjca5WSzpN0rmNP7+bsnhKhxxyiL75zW9mqb1169YsdZvWrVuXrXbOf/OSdNJJJ2WrvWXLlmy1JWn+/LaLaz5P1T//Vbt7jIw6rEYDlEmm1QhZOQ0jLcO+6lxJx9u+W9LxjceyvdT2BS3v+0NJ35J0nO31tl8/7BsDZVCHz3+cRojKqPrMBlA2GTK1XNJrG9+vknSdpA9P3CgirrH92onPA3WQMlcR8bCk49o8PybpvS2PX5XsTYGSqfrnPwZbqIQ6nLMLlMkkmZr0Yv4uWDkNI419FZBWHTLFYAuVUfWZDaBsOmRq0ov5WTkNmBz7KiCtqmeKwRYqo+phA8pmkEyxchowOfZVQFpVz1S1u8fIqMMFkkCZZFogo7lymlTyldOAHNhXAWnVIVMMtlAZ06ZNe84XgOFMzFSCXLFyGkYe+yograpnitMIUQl1uEASKJMcmWLlNIw69lVAWnXIVM/DQ9vTbf/M9vdyNgR0UvWZjYnIFIqW4chWocgUyqBOmZLIFYpX9Uz1c2TrDEl3SHpBpl6Ajuows9EGmUJhyBSQHrkC0qpDpnoaHtreR9KfSLqg27ZALlWf2WhFplAGdTqyRaZQFnXJlESuUA5Vz1SvHX9O0t9IerbTBrZX2B6zPbZp06YkzQFNdViNZoK+MvXMM89MXWcYCZlWIyxSX5l67LHHpq4zjIxR21e1Zmrz5s1T2xlGQupM2V5ge43tuxt/zu+w3VW2t6Q4fbbrYMv2GyQ9GBE3T7ZdRKyMiKURsXTBggXD9gU8T9VnNpoGydSMGTOmqDuMkroc2RokU3Pnzp2i7jBq6pApqbdctWZq/vy2n1mBoSXO1FmSromIgyRd03jczmckvWvYN5N6O7J1tKQ32V4n6WJJx9r+eoo3B3pVs9lCMoXC1ezIFplCKbCvAtLKkKnlklY1vl8l6c3tNoqIayQ9OuybST0MtiLi7IjYJyL2l3SqpGsj4p0p3hzoR11mC8kUyqIuR7bIFMqkDpmSyBXKo02mFjZPX218reij3J4R8YAkNf78nRw9t+I+W6iEOqxGA5QJmQLSI1dAWh0ytTEilk7ymu9LelGbH30kZW+96muwFRHXSbouSydAF1WeIeyETKFIZApIj1wBafWbqYh4Xaef2f6t7b0i4gHbe0l6cNj+uqnf/xFQSzU7Dx4oXM2u2QJKoYiV02y/wvYNtm+z/XPbbx3qTYESyfD5b7Wk0xrfnybpu8MW7IbBFioj5XnwRSz9CZRNXa7ZAsqkgJXTnpD0/0TEyyQtk/Q527sP+8ZAWSTO1LmSjrd9t6TjG49le6ntnfeTs/1DSd+SdJzt9bZfP+gbcs0WKiHDefDNHdi5ts9qPP5wm+0+I2mOpD9L+eZA0bi2BEgvQ66WS3pt4/tVGj+V7zn7qoi4q+X7DbYflLRI0paUjQBFSJ2piHhY0nFtnh+T9N6Wx69K9Z5MY6IyEs9sTPnSn0DZcGQLSK/IldNsHylppqRfD9o/UDZV309xZAuV0GFmY6HtsZbHKyNiZY8ln7MDs5196U+gTDiyBaRX5MppjYv9vybptIh4tp/XAmVVh31VlsHWE088oVtuuSVHab3nPe/JUrfp0UfzHcR4+ctfnq22JD355JPZaq9ZsyZb7S1bup/pYLvdbEallv4cxsKFC7ViRT+Tob3L/e9y1113zVb7+uuvz1Zbkg488MBstU855ZRstSXpYx/72KQ/75CpkbF161b9+7//e5bajz/+eJa6Tfvuu2+22hs3bsxWW5I++clPZqt9wgknZKvdq0FylWLlNNsvkPR/Jf1tRPy0rwYSmTZtmubMmZOl9owZM7LUbRobG+u+0YBy7kekvPvBMuwj6rCv4sgWKqPfmY2yLf0JlE3VZwuBMkqcq+bKaeeqw8pptmdK+rakr0bEt1K+OVAGVd9XVXuoiJHRnNlIeM7ulC/9CZRJu0xVffYQKFqGfVUvK6f9qaRXS3q37VsbX68Y9o2BMsiQqSnHkS1URuKZjXMlXWL7dEn3SjpFGt+BSXpfRLy38fiHkl4qaa7t9ZJOj4irUzYCFKXqs4VAGU31ymkR8XVJX0/2pkDJVH1fxWALlZD6nN0ilv4EyqQO58EDZUOugLTqkCkGW6iEm2+++epddtll4YSn817JDdRYh0xJ5AoYGPsqIK06ZIrBFiohIpYV3QNQJ2QKSI9cAWnVIVPVPi4HAAAAACXFYAsAAAAAMujpNELb6yQ9KmmHpO2T3UgWQHdkCkiPXAFpkSlgeP1cs3VMRFTqgjSg5MgUkB65AtIiU8AQOI0QAAAAADLodbAVkv7d9s22V7TbwPYK22O2x7Zu3ZquQ6Ce+srUY489NsXtAZU0aa5aM7Vt27YC2gMqp+dMbdq0qYD2gPLr9TTCoyNig+3fkbTG9q8i4vrWDSJipaSVkvSSl7wkEvcJ1E1fmdp///3JFNDdpLlqzdTuu+9OpoDues7UoYceSqaANno6shURGxp/Pijp25KOzNkUUHdkCkiPXAFpkSlgeF0HW7Z3sz2v+b2kEyT9MndjQF2RKSA9cgWkRaaANHo5jXBPSd+23dz+GxFxVdaugHojU0B65ApIi0wBCXQdbEXEPZJePgW9ACOBTAHpkSsgLTIFpMHS7wAAAACQAYMtAAAAAMiAwRYAAAAAZMBgCwAAAAAyYLAFAAAAABkw2AIAAACADBwR6YvaD0n6TY+bL5S0MXkTU4Pe03hxRCwquoky6zNTUrn+fvtV1d7L1je5mgSZqowy9U6mJkGmKqNMvY9EprIMtvpqwB6LiKWFNjEgekdZVfnvt6q9V7Vv9KbKf7/0jjKq8t8tvaMfnEYIAAAAABkw2AIAAACADMow2FpZdANDoHeUVZX/fqvae1X7Rm+q/PdL7yijKv/d0jt6Vvg1WwAAAABQR2U4sgUAAAAAtcNgCwAAAAAyKHSwZXuZ7Tttr7V9VpG99MP2vrZ/YPsO27fZPqPonvphe7rtn9n+XtG9IC0yVRxyVU9kqjhkqr7IVTHIVDEKG2zZni7pPEknSloi6W22lxTVT5+2S/pgRBwi6Q8lvb9CvUvSGZLuKLoJpEWmCkeuaoZMFY5M1RC5KhSZKkCRR7aOlLQ2Iu6JiG2SLpa0vMB+ehYRD0TELY3vH9X4P9zFxXbVG9v7SPoTSRcU3QuSI1MFIVe1RaYKQqZqjVwVgEwVp8jB1mJJ97U8Xq+K/INtZXt/SYdJurHYTnr2OUl/I+nZohtBcmSqOOSqnshUcchUfZGrYpCpghQ52HKb5yq1Dr3tuZIuk3RmRGwtup9ubL9B0oMRcXPRvSALMlUAclVrZKoAZKr2yNUUI1PFKnKwtV7Svi2P95G0oaBe+mZ7hsaD9q8R8W9F99OjoyW9yfY6jR+2P9b214ttCQmRqWKQq/oiU8UgU/VGrqYemSpQYTc1tr2LpLskHSfpfkk3SXp7RNxWSEN9sG1JqyRtiogzi+5nELZfK+lDEfGGontBGmSqeOSqXshU8chU/ZCrYpGpqVfYka2I2C7pA5Ku1vgFhpdUIWgNR0t6l8ZnBm5tfP1x0U1htJEpIC0yBaRHrjBqCjuyBQAAAAB1VuhNjQEAAACgrhhsAQAAAEAGDLYAAAAAIAMGWwAAAACQAYMtAAAAAMiAwRYAAAAAZMBgCwAAAAAyYLAFAAAAABkw2AIAAACADBhsAQAAAEAGDLYAAAAAIAMGWwAAAACQAYMtAAAAAMiAwRYAAAAAZMBgCwAAAAAyYLAFAAAAABkw2AIAAACADBhsAQAAAEAGDLYAAAAAIAMGWwAAAACQAYMtAAAAAMiAwRYAAAAAZMBgCwAAAAAyYLAFAAAAABkw2AIAAACADBhsAQAAAEAGDLYAAAAAIAMGWwAAAACQAYMtAAAAAMiAwRYAAAAAZMBgCwAAAAAyYLAFAAAAABkw2AIAAACADBhsAQAAAEAGDLYAAAAAIAMGWwAAAACQAYMtAAAAAMiAwRYAAAAAZMBgCwAAAAAyYLAFAAAAABkw2AIAAACADBhsAQAAAEAGDLYAAAAAIAMGWwAAAACQAYMtAAAAAI6IlGMAACAASURBVMhglxxFZ86cGbNnz85RWrNmzcpSt2nOnDnZam/evDlbbUmaPn16ttozZszIVnvr1q168sknne0NamDevHmxaNGiLLUXLFiQpW7TM888k622nfefzY4dO7LV3rZtW7baknTXXXdtjIg8/2hqYLfddotc//Zz/v9SyrsvWbhwYbbaUt7MPvzww9lqS9KmTZvI1CRmz54d8+bNy1I752czSXriiSey1X7ooYey1Zby7sOnTct7TGbjxo0jkaksg63Zs2frj/7oj3KU1gEHHJClbtNhhx2Wrfall16arbaUN3B77rlnttoXXXRRttp1sWjRIn3qU5/KUvvUU0/NUrdpw4YN2WrnnnzZsmVLttr33XdfttqSdMwxx/wm6xtU3IIFC/RXf/VXWWrvvffeWeo2fetb38pW+93vfne22pI0c+bMbLVXrVqVrbYkXXTRRWRqEvPmzdNb3vKWLLUPP/zwLHWbbrnllmy1v/SlL2WrLUknnnhittpz587NVluSzj///JHIFKcRAgAAAEAGDLYAAAAAIAMGWwAAAACQAYMtAAAAAMiAwRYAAAAAZMBgCwAAAAAyYLAFAAAAABn0NNiyvcz2nbbX2j4rd1NA3ZEpID1yBaRFpoDhdR1s2Z4u6TxJJ0paIulttpfkbgyoKzIFpEeugLTIFJBGL0e2jpS0NiLuiYhtki6WtDxvW0CtkSkgPXIFpEWmgAR6GWwtlnRfy+P1jeeew/YK22O2x7Zt25aqP6CO+s7Uo48+OmXNARXVNVetmXr88centDmggvrK1JNPPjmlzQFV0ctgy22ei+c9EbEyIpZGxNKZM2cO3xlQX31nat68eVPQFlBpXXPVmqnddtttitoCKquvTM2ePXuK2gKqpZfB1npJ+7Y83kfShjztACOBTAHpkSsgLTIFJNDLYOsmSQfZPsD2TEmnSlqdty2g1sgUkB65AtIiU0ACu3TbICK22/6ApKslTZd0YUTclr0zoKbIFJAeuQLSIlNAGl0HW5IUEVdIuiJzL8DIIFNAeuQKSItMAcPr6abGQFV1uyGj7VfbvsX2dtsnT/jZabbvbnydNnVdAwAAoA4YbKESbEebr6u6vKaXGzLeK+ndkr4x4bULJH1M0lEav9fIx2zPT/PbAMXrkKmuuQLQGZkC0qpDpno6jRAog+nTpz/n8Y4dOxZ2ecnOGzJKku3mDRlvb24QEesaP3t2wmtfL2lNRGxq/HyNpGWSLhr8NwDKZWKmpJ5yBWASA+yrAEyi6plisIVKsK1p0557IHbHjh3dXtbuhoxH9fiWPd14GKiqdpmSesoVgA4G3FcB6KAOmWKwhcqYOLPxzDPPLLQ91vLUyohY2fK4p5sHdzDMa4FKaHdk65lnnimgE6A+2uyrCuoEqIeqZyrLYGvevHk65phjcpTWS1/60ix1mw4++OBsta+88spstSVp3bp12WofcMAB2Wq3m12fqMMs/MaIWDrJy4a5IeN6Sa+d8Nrrenxtck888YRuvvnmLLV//OMfZ6nb9Nvf/jZb7Q9+8IPZakvSH/7hH2arvWrVqmy1e9HpyNaoeOyxx/SjH/0oS+3c+6m99947W+3LL788W21J2n///bPVXrRoUbbavRrlXO21117627/92yy1H3/88Sx1m9761rdmq/2KV7wiW21Juuuuu7LVPvvss7PVlqTzzz+/6zaDZsr2Mkn/pPHbFlwQEedO+PmrJX1O0h9IOjUiLm352Q5Jv2g8vDci3tR3Ay04soXKaDcL38XOGzJKul/jN2R8e4+vvVrSp1oWxThBUt7/6wBTbIBMAeiCXAFp9ZuplgXSjtf45PlNtldHxO0tmzUXSPtQmxJPRkSyUTKDLVTCIDMbnW7IaPscSWMRsdr2EZK+LWm+pDfa/vuIeFlEbLL9CY0P2CTpnOZiGUAdjPIMPJALuQLSGjBTwyyQlhyDLVTGILOF7W7IGBEfbfn+Jo2fItjutRdKurDvNwUqghl4ID1yBaTVJlPdrtkfZoE0Sdq1UX+7pHMj4jv99DsRgy1UArOFQFpkCkiPXAFpDXjN/rCLnO0XERts/66ka23/IiJ+3cfrn4PBFiqDHRiQFpkC0iNXQFoDZGqYBdIUERsaf95j+zpJh0lisIV6s82pGUBCZApIj1wBaQ2YqYEXSGssjPZERDxte6GkoyX9Y78NtGKwhcpgthBIi0wB6ZErIK2pXCBN0iGSzm8snDFN49ds3d7hrXrCYAuVwGwhkBaZAtIjV0Bag2Zq0AXSIuInkg7tv9POug4VbV9o+0Hbv0z5xkC/pk2b9pyvKiNXKIOJmapyrsgUyoJMAWlVPVO9dPwVScsy9wFMqjmz0fpVcV8RuUKB2mWq4rn6isgUCjbovsr2Mtt32l5r+6w2P3+17Vtsb7d9cvLG2/uKyBQKVofPf10HWxFxvSRu5orCVX1moxW5QhkMcmRrmA+Ftk+zfXfj67SEvwqZQmkMkKnpks6TdKKkJZLeZnvJhM3ulfRuSd9I3G5HZAplUfXPf8mu2bK9QtIKSdp9991TlQUkjeZ58K2ZmjdvXsHdoG4GyVTLh8LjNb607k22V0+4eLj5ofBDE167QNLHJC3V+P1Obm68dvPAv0SfWjM1e/bsqXpbjJAB91VHSlobEfc0alwsabmknbmKiHWNnz2bptM0WjO1ePHigrtBHdXh81+y4WFErIyIpRGxdLfddktVFtip6jMb/WrN1Jw5c4puBzU0wJGtnR8KI2KbpOaHwp0iYl1E/FzSxA+Fr5e0JiI2NQZYazTFpyi1ZmrWrFlT+dYYIW0ytdD2WMvXigkvWSzpvpbH6xvPlV5rpvbYY4+i20FNVf3zH6sRohLqMLMBlMkkmVpoe6zl8cqIWNn4vt2HwqN6fMvKfqAEetUhVxsjYulkL2vzXKTrCqiuOnz+Y7CFyqjibAZQZh0yNdkHw2E+FPKBEiNhgH3Vekn7tjzeR9KGZA0BFVf1z3+9LP1+kaQbJP2e7fW2T8/fFvBcdViNphW5QtEGXI1wmA+FWT9QkimUwYD7qpskHWT7ANszJZ0qaXXWRntAplAGdfj81/XIVkS8bSoaAbqp+sxGK3KFMhggUzs/FEq6X+MfCt/e42uvlvQp2/Mbj0+QdHa/DXRCplAW/eYqIrbb/oDGMzJd0oURcZvtcySNRcRq20dI+rak+ZLeaPvvI+JlqXuf0BeZQilU/fMfpxGiEupwzi5QJoNkapgPhRGxyfYnND5gk6RzIoJlpVErg+6rIuIKSVdMeO6jLd/fpPGjwcBIqcPnPwZbqIyqz2wAZTNIpob5UBgRF0q6sO83BSqEfRWQVtUzVe3uMTIGPWe3hxuwzrL9zcbPb7S9f+P5/W0/afvWxteXkv5CQMEGvGYLwCTqcH0JUCZ1yBSDLVRGv/dZaLkB64mSlkh6m+0lEzY7XdLmiDhQ0mclfbrlZ7+OiFc0vt6X5rcAymOA+2wB6IJMAWkNkqkeJttfbfsW29ttnzzhZ6fZvrvxddqw/XMaISphwHN2d96AtVGjeQPW21u2WS7p443vL5X0BdvtlqgGaqUO58EDZUOugLQGyVTLZPvxGl8J9ybbqyOi9fPfvZLeLelDE167QNLHJC3V+O1Jbm68dvOgvwNTLqiMNjMbC22PtXytmPCSXm6iunObiNgu6RFJezR+doDtn9n+D9uvSv4LAQXjyBaQHpkC0hogUzsn2yNim6TmZPtOEbEuIn4u6dkJr329pDURsakxwFojadkw/Wc5srV582ZdeumlOUrrNa95TZa6TVdeeWW22nvuuWe22pK0zz75Fio69NBDs9WePXt21206zGxMdvNVqbebqHba5gFJ+0XEw7ZfKek7tl8WEVu7NpvJs89O/P9BGnPnzs1St2n58uXdNxrQqaeemq22JH384x/PVnvVqlXZavdi1Gfg99tvP33+85/PUvupp57KUrdp69Z8/xs67LDDstWWpJ/85CfZal977bXZavdqlHOV87PfGWeckaVu0w9/+MNstZctG+pzelcHHnhgttp33XVXttq96pCphbbHWh6vjIiVLY/bTbYf1eNb9jJR3xdOI0RlDDBD2MtNVJvbrLe9i6QXStoUESHpaUmKiJtt/1rSwZLGBNQEs+5AeuQKSKtNplJMtud4bVv8HwGVMcBh5J03YLU9U+M3YF09YZvVkpoXP54s6dqICNuLGuf8yvbvSjpI0j1JfhGgJDiNEEiPTAFpDZCpXibbc7y2LY5soRJy3YBV0pclfc32WkmbND4gk6RXSzrH9nZJOyS9jxuwok5G+XQnIBdyBaQ1YKZ2TrZLul/jn+3e3uNrr5b0KdvzG49PkHR2vw20YrCFysh0A9anJJ3S5nWXSbqs/y6B6mDWHUiPXAFp9ZupXibbbR8h6duS5kt6o+2/j4iXRcQm25/Q+IBNks4ZdrKdwRYqgdlCIC0yBaRHroC0Bs1UD5PtN2n8FMF2r71Q0oV9v2kHDLZQCbaZLQQSIlNAeuQKSKsOmWKwhcpgthBIi0wB6ZErIK2qZ6raQ0WMjObMBis8AWm0y1QvubK9zPadttfaPqvNz2fZ/mbj5zfa3r/x/P62n7R9a+PrS8l/KaBg7KuAtOqQqa4d297X9g9s32H7Ntt57ywHdDB9+vTnfFUVmUJZTMxUt1w1bodwnqQTJS2R9DbbSyZsdrqkzRFxoKTPSvp0y89+HRGvaHy9L91vQq5QHuyrgLSqnqleTiPcLumDEXGL7XmSbra9JiJuz9wbsFMdztltQaZQuAEzdaSktRFxT6PGxZKWS2r9t7tc0scb318q6Qu2290kMjVyhcKxrwLSqkOmunYfEQ9ExC2N7x+VdIekxbkbAyaq+sxGE5lCWXQ4srXQ9ljL14qWlyyWdF/L4/V6/r/dndtExHZJj0jao/GzA2z/zPZ/2H5Vyt+FXKEs2FcBaVU9U30tkNE49/4wSTe2+dkKSSskaebMmQlaA/5/dZjZaKfXTM2bN29K+0L9TZKpjRGxtNPL2jwXPW7zgKT9IuJh26+U9B3bL4uIrT033aNOuWrN1OLFfGZEeqO2r2rN1Pz585/3OmBYdchUz93bnqvxm7ye2W7nGBErI2JpRCzdZRcWOUR6VZ/ZmKifTM2ZM2fqG0Tt9XvNlsaPZO3b8ngfSRs6bWN7F0kvlLQpIp6OiIclKSJulvRrSQcn+DWeY7JctWZqjz32aF8AGNIo7ataMzV37txiGkTtVT1TPQ22bM/QeND+NSL+LW9LwPPVYTWaVmQKRRtwNcKbJB1k+wDbMyWdKmn1hG1WSzqt8f3Jkq6NiLC9qLHAhmz/rqSDJN2T7BcSuULx2FcBadUhU10PQTUubP6ypDsi4n/nbwlor4qzGe2QKZRFv5mKiO22PyDpaknTJV0YEbfZPkfSWESs1vi/7a/ZXitpk8YHZJL0aknn2N4uaYek90XEpkS/CrlCabCvAtKqeqZ6Od/vaEnvkvQL27c2nvt/I+KKfG0Bz1WHc3ZbkCkUbtBMNf6dXjHhuY+2fP+UpFPavO4yjc+Q50KuUDj2VUBadchU18FWRPxI7S94BqZU1Wc2msgUyqIumZLIFcqjLrkiUyiLqmeq2kNFjIw6nLMLlMmA12wBmAT7KiCtQTNle5ntO22vtX1Wm5/Psv3Nxs9vbKy4Kdv7237S9q2Nry8N+zuwbCAqo+ozG0DZkCkgPXIFpNVvphqLMZ0n6XiNr5B7k+3VE27IfbqkzRFxoO1TJX1a0lsbP/t1RLxi+M7HMeWCSmC2EEiLI1tAelM9Cw/U3YCZOlLS2oi4JyK2SbpY0vIJ2yyXtKrx/aWSjmssCpMce1ZUxiD3WRhmB2b77Mbzd9p+fbJfBCiJAe6zBaCLfjPVMgt/oqQlkt5me8mEzXbOwkv6rMZn4YGR0CZTC22PtXytmPCSxZLua3m8vvFc220iYrukRyQ1b8B4gO2f2f4P268atn9OI0QlDLIazTCHkRs7ulMlvUzS3pK+b/vgiNiR4NcBCleHFZ6AshkwVztn4Rs1mrPwrfuq5ZI+3vj+UklfsO2IiOE6BsqtQ6Y2RsTSyV7W5rmJWem0zQOS9ouIh22/UtJ3bL9s4g29+5FlsHXwwQfr6quvzlFan/rUp7LUbTrmmGOy1f7qV7+arbYknXnmmdlqf/GLX8xWe/PmzT1tN8Cs+8A7sMbzF0fE05L+u3HPoCMl3dBvEynMnTtXRx99dJbaP/jBD7LUbfrCF76Qrfbhhx+erbYk3X777d03GtCsWbOy1e7VKB/JWrt2rU466aQstf/X//pfWeo2PfLII9lq77PPPtlqS9JDDz2UrfYBBxyQrXY/BshVu1n4ozpt07jfXXMWfuOAbSa3++67a/nyiWdqpXHGGWdkqdv0F3/xF9lq9/oZZ1DXXHNNttonnnhittr9GCBT6yXt2/J4H0kbOmyz3vYukl4oaVNjAuNpSYqIm23/WtLBksYGaF0SpxGiIjqcs5vzMHIvrwUqi2u2gPQG3FcNMwsP1NqA12zdJOkg2wfYnqnxM5VWT9hmtaTTGt+fLOnaiAjbixpnRsn270o6SNI9w/wOnEaIypjiw8js2FB7DK6A9AbYVw08Cz9kq0Al9Luvahz9/YCkqyVNl3RhRNxm+xxJYxGxWtKXJX2tcebSJo0PyCTp1ZLOsb1d0g5J74uIobLGYAuVYHtKDyP3+FqgsgbMFIBJDJirnbPwku7X+Ie+t0/YpjkLf4NaZuGHbBcovUH3VRFxhaQrJjz30Zbvn5J0SpvXXSbpsv477YxpTVTGVB5Gbjx/amO1wgM0fhj5P5P8IkBJcBohkF6/mWqcwt6chb9D0iXNWXjbb2ps9mVJezRm4f9a0vNW1wXqqur7KY5soRIGmdkY5jByY7tLNL6YxnZJ72clQtQJR7aA9KZ6Fh6ouzrsqxhsoTIGmc0YZgcWEf8g6R/6flOgIgbJlO1lkv5J4xMYF0TEuRN+PkvSVyW9UtLDkt4aEesaPztb47db2CHpLyMiz7K1QIGqOPMOlFnVM8VgC5VQh5kNoEwGyRT3rgMmx74KSKsOmar2UBEjpern7AJlM8A1WzvvXRcR2yQ1713XarmkVY3vL5V03MR710XEf0tq3rsOqBX2VUBaVc9U1yNbtneVdL2kWY3tL42Ij+VuDGhVh5mNJjKFMpgkUwttt968cWVErGx8P8zNVxdL+umE1ya7dx25QhmwrwLSqkOmejmN8GlJx0bEY7ZnSPqR7Ssj4qfdXgikVMXZjA7IFEqhQ6YmuydQme9dR65QCuyrgLSqnqmug63GMtiPNR7OaHxxbwdMqTrMbDSRKZRB3e5dR65QBuyrgLTqkKmehoq2p9u+VdKDktZExI1ttllhe8z22MaNG1P3CVT+nN1W/WbqkUcemfomUXsDXLNV6nvXdctVa6a2b9+e8q2BnUZpX9WaqYcffriYJlF7Vc9UTx1HxI6IeIXGZyKPtP37bbZZGRFLI2LpwoULU/eJEdec2Wj9qrJ+M/XCF75w6ptErbXLVLdcDXPz1Yi4TVLz3nVXKcO967rlqjVTu+zCYrxIb9T2Va2Z2mOPPYppErVWh0z1tbeJiC22r5O0TNIvs3QEdFDF2YxuyBSKVNd715ErFIl9FZBW1TPVtXvbi2zv3vh+tqTXSfpV7saAVnWY2WgiUyiDQY5slRm5QhmwrwLSqkOmehkq7iXpB7Z/rvHz9ddExPfytgU8X9XP2W1BplAKA1yzVWbkCqVApoC0BsmU7WW277S91vZZbX4+y/Y3Gz+/0fb+LT87u/H8nbZfP2z/vaxG+HNJhw37RsAw6rAaTROZQhnUKVMSuUI51ClXZAplMEimbE+XdJ6k4zW+Eu5NtldHxO0tm50uaXNEHGj7VEmflvRW20s0vvjTyyTtLen7tg8e5hrjSk+5YLTUaLYQKIWaHdkCSoFMAWkNkKkjJa2NiHsiYpukiyUtn7DNckmrGt9fKuk42248f3FEPB0R/y1pbaPewFiOCZVQp9lCoAzIFJAeuQLS6pCphbbHWh6vjIiVLY8XS7qv5fF6SUdNqLFzm4jYbvsRSXs0nv/phNcuHvw3YLCFCmGGEEiLTAHpkSsgrTaZ2hgRSyd5ids8N/GG3J226eW1fWGwhUpgthBIi0wB6ZErIK0BM7Ve0r4tj/eRtKHDNutt7yLphZI29fjavjD9gsrgPHggLa7ZAtIjU0BaA2TqJkkH2T7A9kyNL3ixesI2qyWd1vj+ZEnXRkQ0nj+1sVrhAZIOkvSfw/TPkS1UQurZQtsLJH1T0v6S1kn604jY3Ga70yT9bePhJyNiVeP56zS+LO6TjZ+dEBEPJmsQyIwZeCA9cgWkNUimGtdgfUDS1ZKmS7owIm6zfY6ksYhYLenLkr5me63Gj2id2njtbbYvkXS7pO2S3j/MSoRSpsHW2rVrtXz5xEU/0rj++uuz1G368Ic/nK32u9/97my1Jek973lPttrHHntsttq9hijxDOFZkq6JiHMb9184S9Jz/vIbA7KPSVqq8fN1b24sHdoclL0jIlov0Mxm9uzZOuywPCvwzpkzJ0vdpj333DNb7QsvvDBbbUnaa6+9stXesWOo/3d3deWVV3bdZpRn3RctWqQ///M/z1J7zZo1Weo2LVmyJFvt8YndfH75y19mq/2rX5Xjfrujmqtt27bp3nvvzVL70EMPzVK36ZOf/GS22ieeeGK22pJ00UUXZau9//77Z6vdj0EyFRFXSLpiwnMfbfn+KUmndHjtP0j6h77ftIPR/D8CKsd26lMzWpf8XCXpzW22eb3Gb+K4qTHAWiNp2bBvDJRBu0yN6odEIJUM+ypgpNUhU5xGiMoYYOnPyewZEQ9IUkQ8YPt32mzTbunQ1uU//4/tHZIu0/gphnmnhIHEON0JSI9cAWlVPVMMtlAJzZmNCSZd+tP29yW9qM2PPtLr27Z5rjmgekdE3G97nsYHW++S9NUe6wKF65CpYWtyLSRGWo5cAaOsDplisIXKGOACydd1+pnt39req3FUay9J7T7QrZf02pbH+0i6rlH7/safj9r+hsbvLs5gC5WSYbawUtdCAjlUfRYeKJuqZ6raQ0WMjAzn7LYu+XmapO+22eZqSSfYnm97vqQTJF1texfbCxt9zZD0Bkn5rvoGMsh0zRbXQmKk1eH6EqBM6pApjmyhMhLPbJwr6RLbp0u6V40VaWwvlfS+iHhvRGyy/QmN369Bks5pPLebxgddMzS+pOj3Jf1LyuaAqdAhU1wLCQyh6rPwQNlUPVMMtlAJqc/ZjYiHJR3X5vkxSe9teXyhpAsnbPO4pFcmawYowCSZ4lpIYEB1uL4EKJM6ZKrn7m1Pt/0z29/L2RDQyfTp05/zVXVkCkWbmKlechURr4uI32/z9V1Jv21cA6ku10Lu2/J4H0kbGrV3XgspqXktZM/IFMog5b7K9gLba2zf3fhzfoftrrK9Jce/fXKFolX9818/Q8UzJN2RqxFgMnU4Z7cNMoXCZLpmq+hrIckUCpVhX9VcdOYgSdc0HrfzGY0fCc6BXKEwdfj811PHtveR9CeSLsjbDtBZ1Wc2WpEplMEgR7a6OFfS8bbvlnR847FsL7V9gSRFxCZJzWshb1LjWkhJszQ+6Pq5pFsl3a8+roUkUyiLxJnqZdEZRcQ1kh4d9s0mIlcog6p//uv1mq3PSfobSfMy9gJ0VIdzdicgUyhUjkwVfC0kmULhOuQq96IzOZErFKoOn/+6DrZsv0HSgxFxs+3XTrLdCkkrJGnWrFnJGgSaqjib0c4gmdp7772nqDuMklHO1B577DFF3WHUtMlV7kVnsuglV62Z2nPPPaewO4ySqu+rehkqHi3pTbbXSbpY0rG2vz5xo4hYGRFLI2LpjBkzEreJUVeHc3Zb9J2pBQsWTHWPqLlM12wVpe9MzZ07d6p7xAgYZF+VYNGZXLrmqjVTu++++xS2hlGR+vNfH4vOnNbY5m7bp7U8f53tO23f2vjqerS5a8cRcXZE7BMR+0s6VdK1EfHOPn4vIImqn7PbRKZQFhmu2SoEmUKZJM5UL4vOZEGuUBaJM9V10RnbCyR9TNJRGl8V92MTBmXviIhXNL66ToBUdhoTo6VmR7aAwtXsyBZQChn2VV0XnWk8/qGkb0k6zvZ6268f9o2BMsiQqV4WnXm9pDURsSkiNktaI2nZoG/Y102NI+I6SdcN+mbAMKo66z4ZMoUikSkgvZS56mPRmVcle9P2fVwncoWCtMlU7kVnFku6r+Xx+sZzTf/H9g5Jl0n6ZETEZG/Y12ALKEodVqMByoRMAemRKyCtDpnKveiM2zzXHFC9IyLutz1P44Otd0n66mTFGGyhMuo4Cw8UiUwB6ZErIK1+MxURr+v0M9u/tb1X46hWp0Vn1kt6bcvjfdQ4shsR9zf+fNT2NzR+Tdekgy2mX1AJXLMFpMU1W0B67KuAtDJkqpdFZ66WdILt+Y2FMU6QdLXtXWwvbPQ1Q9IbJP2y2xtyZAuVwWwhkBaZAtIjV0BaiTN1rqRLbJ8u6V5Jp0jji85Iel9EvDciNtn+hKSbGq85p/HcbhofdM2QNF3S9yX9S7c3ZLCFSuA8eCAtMgWkR66AtFJnqo9FZy6UdOGEbR6X9Mp+35PBFiqDHRiQFpkC0iNXQFpVz1SWwdbMmTP14he/OEdpXXTRRVnqNv3jP/5jttorVqzIVluSbrzxxmy1H3nkkWy1x8bGum5je6RPzZgxY4Ze9KJ2C+sM7xe/+EWWuk3nnntuttqvelXW1Y613377Zav9wAMPZKvdi1HP1OOPP66f/OQnWWoffPDBWeo2/fjHP85Wu8sKxkP74Q9/mK32m9/c7nY5U2uUc/Xoo4/qRz/6UZbahx9+eJa6TZ/+9Kez1d57772z1Zakl7zkJdlqH3jggdlqS9Kf/dmfdd2mDpmqGzVrLAAABhJJREFU9lARIyXlBZK2F9heY/vuxp/zO2x3le0ttr834fkDbN/YeP03bc8cqiGgAKkXyCBXQNp9FYDqZ6p6HWMkNWc2Wr+GdJakayLiIEnXNB638xmN30Nhok9L+mzj9ZslnT5sQ8BUapcpcgUMJ8O+ChhpdcgUgy1URuKZjeWSVjW+XyWp7fknEXGNpEdbn7NtScdKurTb64Eyy7D0O7nCyKv6LDxQNlXPFAtkoBI6nLO70HbrBV8rI2JljyX3jIgHJKlxY7vf6aOdPSRtiYjtjcfrJS3u4/VA4TKdB0+uMNLqcH0JUCZ1yBSDLVTCzTfffPX06dMXTnh6Y0Qs6/Qa29+X1G5ViY8M2Y7bPJf3qnIgsQ6ZkqRdJ5vEIFdAZ532VYU0A9RAHTLFYAuVMNmgapLXvK7Tz2z/1vZejdn3vSQ92EfpjZJ2t71LYxZ+H0kb+u0PKNIgmWq8jlwBHQyaKwDt1SFT1TvxEUhjtaTTGt+fJum7vb4wxtdG/oGkkwd5PVBj5AoAgBYMtjCqzpV0vO27JR3feCzbS21f0NzI9g8lfUvScbbX235940cflvTXttdq/FqTL09p90A5kSsAAFr0dBqh7XUaXzlqh6TtEbE0Z1NAbhHxsKTj2jw/Jum9LY/b3jU3Iu6RdOSg70+mUEfkCqgXMgUMr59rto6JiEpdkAaUHJkC0iNXQFpkChgCpxECAAAAQAa9DrZC0r/bvtn2inYb2F5he8z22NNPP52uQ6Ce+srUxo1MKgI9mDRXrZl66qmnCmgPqJyeM/X4448X0B5Qfr2eRnh0RGxo3KByje1fRcT1rRs07sOyUpL22GMP7o0CTK6vTB1++OFkCuhu0ly1ZmrRokVkCuiu50wtXryYTAFt9HRkKyI2NP58UNK3NcQFzADIFJADuQLSIlPA8LoOtmzvZnte83tJJ0j6Ze7GgLoiU0B65ApIi0wBafRyGuGekr5tu7n9NyLiqqxdAfVGpoD0yBWQFpkCEug62Grc9+TlU9ALMBLIFJAeuQLSIlNAGiz9DgAAAAAZMNgCAAAAgAwYbAEAAABABgy2AAAAACADBlsAAAAAkAGDLQAAAADIwBGRvqj9kKTf9Lj5QkkbkzcxNeg9jRdHxKKimyizPjMllevvt19V7b1sfZOrSZCpyihT72RqEmSqMsrU+0hkKstgq68G7LGIWFpoEwOid5RVlf9+q9p7VftGb6r890vvKKMq/93SO/rBaYQAAAAAkAGDLQAAAADIoAyDrZVFNzAEekdZVfnvt6q9V7Vv9KbKf7/0jjKq8t8tvaNnhV+zBQAAAAB1VIYjWwAAAABQOwy2AAAAACCDQgdbtpfZvtP2WttnFdlLP2zva/sHtu+wfZvtM4ruqR+2p9v+me3vFd0L0iJTxSFX9USmikOm6otcFYNMFaOwwZbt6ZLOk3SipCWS3mZ7SVH99Gm7pA9GxCGS/lDS+yvUuySdIemOoptAWmSqcOSqZshU4chUDZGrQpGpAhR5ZOtISWsj4p6I2CbpYknLC+ynZxHxQETc0vj+UY3/w11cbFe9sb2PpD+RdEHRvSA5MlUQclVbZKogZKrWyFUByFRxihxsLZZ0X8vj9arIP9hWtveXdJikG4vtpGefk/Q3kp4tuhEkR6aKQ67qiUwVh0zVF7kqBpkqSJGDLbd5rlLr0NueK+kySWdGxNai++nG9hskPRgRNxfdC7IgUwUgV7VGpgpApmqPXE0xMlWsIgdb6yXt2/J4H0kbCuqlb7ZnaDxo/xoR/1Z0Pz06WtKbbK/T+GH7Y21/vdiWkBCZKga5qi8yVQwyVW/kauqRqQIVdlNj27tIukvScZLul3STpLdHxG2FNNQH25a0StKmiDiz6H4GYfu1kj4UEW8ouhekQaaKR67qhUwVj0zVD7kqFpmaeoUd2YqI7ZI+IOlqjV9geEkVgtZwtKR3aXxm4NbG1x8X3RRGG5kC0iJTQHrkCqOmsCNbAAAAAFBnhd7UGAAAAADqisEWAAAAAGTAYAsAAAAAMmCwBQAAAAAZMNgCAAAAgAwYbAEAAABABgy2AAAAACCD/w9q9T2OccGnlQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,6))\n", "for i in range(8):\n", " plt.subplot(2, 4, i+1)\n", " im = plt.imshow(W[:,:,i],cmap='binary')\n", " cbar = plt.colorbar(im,shrink=.5)\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Changes are now more uneven." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Adding regularization\n", "We add now a L1 regularization on $W$ in order to favour sparsity in our solution." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def L2loss(R,r):\n", " rr = tf.reshape(r,(r.shape[0],1))\n", " return tf.norm(R-rr, ord=2)\n", "\n", "def L1loss(W):\n", " return tf.norm(W,ord=1)\n", "\n", "alpha = .5\n", "learning_step = 0.005\n", "W = tf.Variable(tf.random.normal((n_choices,n_choices,n_experts), mean=0.0, stddev=.05, dtype='float32'))\n", "\n", "def step(X):\n", " with tf.GradientTape(persistent=True) as tape:\n", " \n", " XX = X + W\n", " R = tf.reduce_mean(XX,axis=1)\n", " r = tf.reduce_mean(R,axis=1)\n", " \n", " loss = L2loss(R,r) + alpha*L1loss(W)\n", " \n", " W_grad = tape.gradient(loss,W)\n", " W.assign_sub(W_grad*learning_step)\n", " \n", "for _ in range(1000):\n", " step(X)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We plot the individual ranking after the correction for consensus." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD6CAYAAACxrrxPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAZJUlEQVR4nO3de2xc13Xv8e8KRwoMRbYai05EDmVapqxKxM29BUgXQXEd4NYOZRql+0fs0EV6Uygqk1RqhBpBS8MFG5O9CNsAt/2DTmDlAQQGRDYRYJBALCpCGjQoEEui2iCxxg8qkhxxpML0o4rjBKU5Wv2DI2o4HHEOh3Pmsfn7AITmzNkzs7l4tGafffbex9wdERGpf++rdgVERKQ8lNBFRAKhhC4iEggldBGRQCihi4gEQgldRCQQSugSNDPba2avmNk5M+svsP9zZvYzM/uJmf2rme2pRj1FysGqNQ5969at3traWpXPrhdnzpx5w90bV/s6xXaBu/Piiy9yzz33sGHDBl5++WXuuusubrnllsXYmtmt7v5LADPrAf7M3feu9L6Kb3E6duOzUmwTla7Mda2trUxNTVXr4+uCmb1WyusU2wU//vGP+dKXvsTx48cB+PKXvwzAE088sRjb68k8axNQtIWj+BanYzc+K8VWXS4SrHQ6TUtLy+J2MpkknU4vK2dmB8zs58DfA1+oXA1FyksJXYJVqDvRzAqVe9rd7wb+CvjrQu9lZn1mNmVmU7Ozs+WuqkhZKKFLsJLJJJcuXVrcnpmZoampaaWXjAF/WGiHux929w5372hsXHXXsEhFVK0PfS1a+79XtMzF4YcqUJP6sF7j1dnZyfT0NBcuXKC5uZmxsTGOHDmypIyZ7XT36ezmQ8D0sjeqkvX6dyuV4lWnCV0kikQiwcjICF1dXWQyGfbt20d7ezsDAwMAt2WLHTSz+4H3gLeBT1erviJrpYQuQevu7qa7u3vJc4ODgwwNDV0FcPdDVamYSAzUhy4iEggldBGRQCihi4gEQgldRCQQSugiIoFQQhcRCYQSuohIIJTQRUQCoYQuIhIIJXQRkUBo6r+ISBlVc5GwmkjoUQIA4a+UFjqthhcfxVZAXS4iIsFQQhcRCYQSuohIIJTQq2xycpJdu3bR1tbG8PDwsv1m9riZpczsp2b2AzO7swrVFJE6ECmhm9leM3vFzM6ZWX+B/Uo6JchkMhw4cIBjx46RSqUYHR0llUrlF/t3oMPdPwIcZeHO9CIiyxRN6GbWADwNPAjsAR4zsz15xZR0SnDq1Cna2trYsWMHGzdupLe3l/Hx8SVl3P2H7v7r7OYLQLLiFRWRuhClhX4vcM7dz7v7HAt3Rn84t4CSTmnS6TQtLS2L28lkknQ6vdJLPgMci7teIlGou7D2REnozcClnO2Z7HM3o6QTkbsve87MCpY1s08BHcBXbrK/z8ymzGxqdna2nNUUWUbdhbUpSkIvlGGWZyKUdFYrmUxy6dKN78qZmRmampqWlcvelf5JoMfd/6vQe7n7YXfvcPeOxsbGuKosAqi7sFZFSegzQEvOdhK4nF9ISWf1Ojs7mZ6e5sKFC8zNzTE2NkZPT8+SMmb2O8AzLMT19apUVCSPugtrU5Sp/6eBnWZ2F5AGeoE/yi2Qk3T2KulEl0gkGBkZoauri0wmw759+2hvb2dgYICOjo7rxb4CfAD4brY75hfu3nOz9xSphBK7Cz92k/19QB/A9u3by1bH9ahoQnf3eTM7CBwHGoBvuftZMxsEptx9AiWdknV3d9Pd3b3kucHBwcXH7n5/pesUksnJSQ4dOkQmk2H//v309y8ddWtmjwP7gXlgFtjn7q9Voap1pYTuwo+tdOYOHAbo6Ogo2J0r0URanMvdnweez3tuIOexko7UnOsX7k6cOEEymaSzs5Oenh727Fky6vb6hbtfm9nnWbhw98mqVLiO5HYXNjc3MzY2xpEjR5aU0Zl75dXEaotx0ip0qxNSvHIv3AGLF+5yE7q7/zDnJS8An6psLeuTugtrU/AJXdavQhfuTp48udJLdOFuFdRdWHuU0CVYunAn640W55JgaZy/rDdqoUuwdOFOal2579amhC7BWunCHXBbtpgu3EkwlNAlaDe7cDc0NHQVdOFOwqKELrIOhTQ8VW7QRVERkUAooYuIBEIJXUQkEEroIiKBUEIXEQmERrmsgUYKKAYitUQtdBGRQCihi4gEQl0uIrLuhNpVqBa6iEgglNBFRAKhhC4iEggldBGRQOiiqMgahHpxTeqTWugiIoFQQhcRCYQSuohIIJTQRUQCESmhm9leM3vFzM6ZWX+B/feZ2b+Z2byZfaL81QzX5OQku3btoq2tjeHh4WX7FVsRiaroKBczawCeBh4AZoDTZjbh7qmcYr8A/gT4YhyVDEGh0RB+LcPlr3+WOz75tyQ2387A//8Lenp62LNnT24xxTYCjTYRidZCvxc45+7n3X0OGAMezi3g7hfd/afAtRjqGKy5K6+S2LKNDVs+jDVsYNPu+xgfH19SRrGVWqWzy9oTJaE3A5dytmeyz8kazb/zJolbGxe3GzZvJZ1OV7FGItFkMhkOHDjAsWPHSKVSjI6Okkql8otdP7s8UvEKrlNRJhZZgee8lA8zsz6gD2D79u2lvEXwzAqFO9LrFNsCfnP+DG/94DBcu8bwli/Q37/0EpCZ3Qf8I/ARoNfdj1ajnvXm1KlTtLW1sWPHDgB6e3sZHx9f0l3o7hcBzKyks8so3WigrrRcUVroM0BLznYSuFzKh7n7YXfvcPeOxsbG4i8IXGLz7cz/cnZxO/POGzQ1NZX0Xortcn4tw1snvsYdjzxF0/6vqhVZRul0mpaWG2khmUzq7LIGREnop4GdZnaXmW0EeoGJeKu1Pmzcdg/zb1/mvf/8DzzzHu++9CN6enqqXa1g5F+juN6KzKVrFKVxX36SvpazSzObMrOp2dnZ4i+Qmyqa0N19HjgIHAdeAr7j7mfNbNDMegDMrNPMZoBHgGfM7GyclQ6Fva+BDz7wOV7/zgCXv/F5Nv32/6a9vZ2BgQEmJha+MxXb0uVfo1ArsnySySSXLt24tDYzM6OzyxoQaXEud38eeD7vuYGcx6dZ6IqRVbrl7k6a7+5c8tzg4ODiY8W2vHSNojw6OzuZnp7mwoULNDc3MzY2xpEj6rWqNs0UlWDlX6NQK7J8EokEIyMjdHV1sXv3bh599FGdXdYALZ8rwcq9RpHYfLtakWXW3d1Nd3f3kud0dlldSugSrNxrFPg1+r54cLEVCdwGC61I4Dngt4A/MLOn3L09jvpoGJ7ETQldgpZ7jeLJJxcS5eDgIENDQ1dBrUgJi/rQRUQCoYQuIhIIdbnk0ap9tUF/B5HVUwtdRCQQSugiIoFQl4uISBH10gWoFrqISCCU0EVEAqGELiISCCV0EZFAKKGLiARCCV1EJBBK6CIigVBCFxEJhBK6iEggNFNURFZUL7MkRS10EZFgKKGLiARCCV1EJBBK6CIigVBCFxEJhBK6iEgglNBFRAIRKaGb2V4ze8XMzplZf4H97zezf8ruP2lmreWuaKh+c/4M6a9/lvQzf8rVF767bL9iuza58R0eHl62X/EtnWJbe4omdDNrAJ4GHgT2AI+Z2Z68Yp8B3nb3NuAfgL8rd0VD5NcyvHXia9zxyFM07f8q76b+hVQqlV9MsS1RfnxHR0cV3zJRbGtTlBb6vcA5dz/v7nPAGPBwXpmHgW9nHx8Fft/MrHzVDNPclVdJbNnGhi0fxho2sGn3fYyPj+cXU2xLlB/f3t5exbdMFNvaFCWhNwOXcrZnss8VLOPu88BV4PZyVDBk8++8SeLWxsXths1bSafT+cUU2xLlxzeZTCq+ZaLY1iZz95ULmD0CdLn7/uz2HwP3uvuf55Q5my0zk93+ebbMm3nv1Qf0ZTd3Aa+s8NFbgTdW9+vUne2AAa9ltz8IbOLGF+idwOsotqXYCmSAWykc3zvdvVHHbsl07Man2O94p7s3Ftzj7iv+AB8FjudsPwE8kVfmOPDR7ONEtjJW7L2LfO7UWl5fDz/AS4ptbLGd0rEba3x17MYX25J/xyhdLqeBnWZ2l5ltBHqBibwyE8Cns48/AfyzZ2smK3oXxTZOOnbjo2O3BhVdPtfd583sIAvftg3At9z9rJkNsvBNMgF8E3jWzM4Bb7Hwx5VoFNuY6NiNnWJbY4r2oVeLmfW5++Fq1yNO1fodFdtwP7tSdOzGZy2/Y80mdBERWR1N/RcRCUTNJfRiywyEwswumtnPzOwnZjZVwc8NPr6KbXwU23itNb411eWSXWbgVeABFiYwnQYec/dlc4rrnZldBDrcvWJjatdLfBXb+Ci28VprfGuthR5lmQEpneIbH8U2PoptRLWW0KMsMxAKB75vZmeyM+UqYb3EV7GNj2IbrzXFt+g49AortHBP7fQJldfvuftlM7sDOGFmL7v7j2L+zPUSX8U2PoptvNYU31proc8ALTnbSeByleoSK3e/nP33deA5Fk4r47Yu4qvYxkexjdda41trCT3KVO26Z2abzGzz9cfAx4EXK/DRwcdXsY2PYhuvcsS3prpcbjZVu8rVisOHgOeyS0MngCPuPhn3h66T+Cq28VFs47Xm+NbUsEURESldrXW5iIhIiZTQRUQCoYQuQSs2ZdzMPpcz1fpfbfkN0EXqhvrQJVhRpoyb2a3u/svs4x7gz9x9bzXqK7JWVUvoW7du9dbW1qp8dr04c+bMG36zeweuQLFd8Ktf/YorV66wc+dOAK5cuQLAtm3bCsbWzB4D/q+7P7jS+yq+xenYjc9Ksa3asMXW1lampiq2WFtdMrPXipdaTrFdcPToUSYnJ/nGN74BwLPPPsvJkycZGRlZElszOwA8DmwE/k+x91V8i9OxG5+VYqs+dAlWobPP7Bjf/HJPu/vdwF8Bf13ovcysz8ymzGxqdna23FUVKQsldAlWMpnk0qUbazrNzMzQ1NS00kvGgD8stMPdD7t7h7t3NDauuidBpCKU0CVYnZ2dTE9Pc+HCBebm5hgbG6Onp2dJGTPbmbP5EDBd0UqKlFFNTf2PqrX/e0XLXBx+qAI1qQ/rNV6JRIKRkRG6urrIZDLs27eP9vZ2BgYGAG7LFjtoZvcD7wFvA5+uVn3zrde/W6kUrzpN6CJRdXd3093dveS5wcFBhoaGrgK4+6GqVEwkBpG6XCJMznjczFJm9lMz+4GZ3Vn+qoqIyEqKttCzkzOeJmdyhplN5N3P799ZuA/er83s88DfA5+Mo8IiImsVavdMlBZ60fv5ufsP3f3X2c0XWFiAXkREKihKQl/t/fw+AxxbS6VERGT1olwUjXw/PzP7FNABfOwm+/uAPoDt27dHrKKIiEQRpYUe6X5+2aFfTwI97v5fhd5IkzNEROITJaEXvZ+fmf0O8AwLyfz18ldTRESKKZrQ3X0euH4/v5eA77j7WTMbzC43CvAV4APAd7PrSgd3A1cRkVoXaRy6uz/v7ve4+93u/v+yzw24+0T28f3u/iF3/1/Zn56V31FE6t3k5CS7du2ira2N4eHhZfs1P6XytJaLiKxaJpPhwIEDHDt2jFQqxejoKKlUKr/Y9fkpHwGOsjA/RWKkhC4iq3bq1Cna2trYsWMHGzdupLe3l/Hx8SVlND+l8oJfy6XWZ4RNTk5y6NAhMpkM+/fvp79/6coKZvY4sB+YB2aBfe5e0s0DRMolnU7T0nJj8FsymeTkyZMrvUTzUypALfQq0mmr1KuoNw/JPn99fspXbrJfNw8pEyX0KtJpq9SrqDcP0fyUygq+y2W1KtlFo9NWqVe5Nw9pbm5mbGyMI0eOLCmTMz9lr+anVIYSehWVeNqqZRWk6la6eUhHR8f1YrnzUwB+oSHN8VJCr6ISTls/ttJpK3AYoKOjo+BaOyLldLObh1zn7vdXuk7rnfrQqyjiPS+1rIKIRKIWehXptFVEykkJvcp02ioi5aIuFxGRQCihi4gEoia6XKKM/Yb6vGmriEilqIUuIhKImmihS+2o9cXMVkuLn0k51Mv/C7XQJVha/EzWGyV0CZYWP5P1RgldglVo8bN0Or3SS7T4mdQ19aFLTSpHn2UlFj+rl75VWR+U0NdA/5lrmxY/k/VGCV3WpJa/1LRmt6w3SugSrJUWPwNuyxar2OJnmkAncVNCl6DdbPGzoaGhq6DFzyQsGuUiIhIItdBFRKqk3N1waqGLiARCCV1EJBBK6CIigVBCFxEJhBK6iEggNMqlQjSpRETipha6iEgg1EKXINTymjIilaIWuohIICIldDPba2avmNk5M+svsP8+M/s3M5s3s0+Uv5oiIlJM0YRuZg3A08CDwB7gMTPbk1fsF8CfAEcQEZGqiNKHfi9wzt3PA5jZGPAwsHi3XXe/mN13LYY6iohIBFESejNwKWd7BvjdeKojIdOFy/gotgLREnqhmzCWdAuum92XUUTqz+TkJIcOHSKTybB//376+5deXjOz+4B/BD4C9Lr70WrUs9Kq+eUa5aLoDNCSs50ELpfyYe5+2N073L2jsbGxlLcQkRqQyWQ4cOAAx44dI5VKMTo6SiqVyi+ma2sVFqWFfhrYaWZ3AWmgF/ijWGu1jvzm/Bne+sFhuHaND/zPjwNLv7nXaytHatupU6doa2tjx44dAPT29jI+Ps6ePTfGS6z12ppmV69e0YTu7vNmdhA4DjQA33L3s2Y2CEy5+4SZdQLPAb8F/IGZPeXu7bHWPAB+LcNbJ77GHZ/8WxKbb+fKt/+CVCq15D8FN1o5X6xKJSVIa+0WSKfTtLTcOHFPJpOcPHmyLHWT0kWaKeruzwPP5z03kPP4NAtdMbIKc1deJbFlGxu2fBiATbvvK3srRyQO7ssvo2Vvsr1qurZWPpopWkXz77xJ4tYb1xIaNm8lnU5XsUYi0SSTSS5dujH4bWZmhqamppLeS9fWykcJvcaspZVjZlNmNjU7O1vmWoks1dnZyfT0NBcuXGBubo6xsTF6enqqXa11Twm9ihKbb2f+lzeSb+adN9TKkbqQSCQYGRmhq6uL3bt38+ijj9Le3s7AwAATExMAmFmnmc0AjwDPmNnZqlZ6HdBqi1W0cds9zL99mff+8z9IbL6dd1/6ET1f/ctqVysouaOIhrd8QWOly6i7u5vu7u4lzw0ODi4+1rW1ylNCryJ7XwMffOBzvP6dAfBrfOB/PLDYyuno6FgooxFEJcsfRTQ6+jf09PRoFJEESwm9ym65u5PmuzuXPKdWTnnkjyKKY6y0SC1RH7oEK38UUTKZ1CgiCZoSuqwrGkUkIVNCl2DljyLSWGkJnRK6BCt3FJFn3tNYaQmeLopKsPJHEfV98eDiKCLgNtAoIgmLEroELXcU0ZNPLiw2NTg4yNDQ0FXQKCIJi7pcREQCoYQuIhIIJXQRkUAooYuIBEIJXUQkEEroIiKBUEIXEQmEErqISCCU0EVEAqGELiISCE39F5EVtfZ/r2iZi8MPVaAmUoxa6CIigVBCFxEJhBK6iEgglNBFRAKhhC4iEggldBGRQCihi4gEQgldRCQQSugiIoFQQhcRCYQSuohIIJTQRUQCESmhm9leM3vFzM6ZWX+B/e83s3/K7j9pZq3lrmiofnP+DOmvf5b0M3/K1Re+u2y/Yrs2ufEdHh5etl/xLZ1iW3uKJnQzawCeBh4E9gCPmdmevGKfAd529zbgH4C/K3dFQ+TXMrx14mvc8chTNO3/Ku+m/oVUKpVfTLEtUX58R0dHFd8yUWxrU5QW+r3AOXc/7+5zwBjwcF6Zh4FvZx8fBX7fzKx81QzT3JVXSWzZxoYtH8YaNrBp932Mj4/nF1NsS5Qf397eXsW3TBTb2hQloTcDl3K2Z7LPFSzj7vPAVeD2clQwZPPvvEni1sbF7YbNW0mn0/nFFNsS5cc3mUwqvmWi2NYmc/eVC5g9AnS5+/7s9h8D97r7n+eUOZstM5Pd/nm2zJt579UH9GU3dwGvrPDRW4E3Vvfr1J3tgAGvZbc/CGzixhfoncDrKLal2ApkgFspHN873b1Rx27JdOzGp9jveKe7Nxbc4+4r/gAfBY7nbD8BPJFX5jjw0ezjRLYyVuy9i3zu1FpeXw8/wEuKbWyxndKxG2t8dezGF9uSf8coXS6ngZ1mdpeZbQR6gYm8MhPAp7OPPwH8s2drJit6F8U2Tjp246NjtwYVvaeou8+b2UEWvm0bgG+5+1kzG2Thm2QC+CbwrJmdA95i4Y8r0Si2MdGxGzvFtsYU7UOvFjPrc/fD1a5HnKr1Oyq24X52pejYjc9afseaTegiIrI6mvovIhKImkvoxZYZCIWZXTSzn5nZT8xsqoKfG3x8Fdv4KLbxWmt8a6rLJbvMwKvAAyxMYDoNPObuy+YU1zszuwh0uHvFxtSul/gqtvFRbOO11vjWWgs9yjIDUjrFNz6KbXwU24hqLaFHWWYgFA5838zOZGfKVcJ6ia9iGx/FNl5rim/RcegVVmjhntrpEyqv33P3y2Z2B3DCzF529x/F/JnrJb6KbXwU23itKb611kKfAVpytpPA5SrVJVbufjn77+vAcyycVsZtXcRXsY2PYhuvtca31hJ6lKnadc/MNpnZ5uuPgY8DL1bgo4OPr2IbH8U2XuWIb011udxsqnaVqxWHDwHPZZeGTgBH3H0y7g9dJ/FVbOOj2MZrzfGtqWGLIiJSulrrchERkRIpoYuIBEIJXUQkEEroIiKBUEIXEQmEErqISCCU0EVEAqGELiISiP8GAedd5kkNY2cAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "R = tf.reduce_mean(X+W,axis=1)\n", "\n", "for i in range(8):\n", " plt.subplot(2, 4, i+1)\n", " plt.bar(np.arange(6),R[:,i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consensus is harder to reach with a loss function with two terms. Scaling down $\\alpha$ may help reaching a consensus." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,6))\n", "for i in range(8):\n", " plt.subplot(2, 4, i+1)\n", " im = plt.imshow(W[:,:,i],cmap='binary')\n", " cbar = plt.colorbar(im,shrink=.5)\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And indeed we notice some more sparsity on the weights." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. Conclusions\n", "\n", "*GDM* provided an interesting problem where to apply *differentiable programming*. Conversely, *GDM* may take advantage of the versatile and optimized, although black-box, solution provided by *differentiable programming*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References\n", "\n", "[1] https://towardsdatascience.com/deep-learning-from-a-programmers-perspective-aka-differentiable-programming-ec6e8d1b7c60\n", "\n", "[2] Herrera-Viedma, E., Herrera, F. and Chiclana, F., 2002. A consensus model for multiperson decision making with different preference structures. IEEE Transactions on Systems, Man, and Cybernetics-Part A: Systems and Humans, 32(3), pp.394-402." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.10" } }, "nbformat": 4, "nbformat_minor": 2 }