From 026b01456bb6b1a0f66491967719c40fe7351ac9 Mon Sep 17 00:00:00 2001 From: remilepriol Date: Fri, 6 Jan 2017 19:13:42 +0100 Subject: [PATCH] Changed the structure of loopy belief. Added damping. Consider energy of mean parameters instead of sum for convergence. --- .gitignore | 3 +- IsingModel/Ising2.py | 74 +++++---- Test_Ising1.ipynb | 2 +- Test_Ising2.ipynb | 372 +++++++++++++++++++++++++++++++++++++++---- 4 files changed, 385 insertions(+), 66 deletions(-) diff --git a/.gitignore b/.gitignore index 004f97f..8d52a0f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -*variational-intro.pdf -*WaiJor08_FTML*.pdf +*.pdf *Icon* *.dropbox *.idea* diff --git a/IsingModel/Ising2.py b/IsingModel/Ising2.py index e8cfd17..d51cfcf 100644 --- a/IsingModel/Ising2.py +++ b/IsingModel/Ising2.py @@ -137,32 +137,37 @@ def meanfields(self, initial_grid, max_iter=100): """ # grid = self.observations + (1 - np.absolute(self.observations)) * initial_grid - mean1 = gridmean(grid) - sum_means_list = [mean1 + 1, mean1] + enrg1 = self.energy(grid) epsilon = 1e-5 + means_energy = [enrg1 + 2*epsilon, enrg1] countiter = 0 - while abs(sum_means_list[-2] - sum_means_list[-1]) > epsilon and countiter < max_iter: + while abs(means_energy[-2] - means_energy[-1]) > epsilon and countiter < max_iter: countiter += 1 # update the means similarly to gibbs sampling grid = 2 * logistic(self.linear_factors + self.__sum_neighbors(grid)) - 1 grid = self.observations + (1 - np.absolute(self.observations)) * grid - sum_means_list.append(gridmean(grid)) + means_energy.append(self.energy(grid)) self.mean_parameters = grid - return sum_means_list[1:] + return means_energy[1:] @staticmethod def __repeat_symmetric(grid): - tmp = np.expand_dims(grid / 2, axis=-1) + tmp = np.expand_dims(grid, axis=-1) return np.concatenate((tmp, - tmp), axis=-1) - def loopybelief(self, max_iter=25): + def __messages2means(self,messages): + self.mean_parameters = np.product(messages, axis=0) + self.mean_parameters = self.mean_parameters[:, :, 0] / np.sum(self.mean_parameters, axis=-1) + self.mean_parameters = 2 * self.mean_parameters - 1 + + def loopybelief(self, max_iter=25,damping=0.5): """ update the mean_parameters field with the probability given by the sum product algorithm :param max_iter: - :return: + :return: means_energy: the sequence of mean parameters energy """ - messages = np.zeros([5, self.height, self.width, 2]) - # INGOING log-messages for each node + messages = np.ones([5, self.height, self.width, 2]) + # INGOING messages for each node # each message has two dimensional : it has a value for 1 and -1 at index 0 and 1 respectively. # each node emits 4 messages, one per neighbour: # 0 : bottom to top @@ -171,13 +176,10 @@ def loopybelief(self, max_iter=25): # 3 : right to left # 4 : log-potentials in each point # potentials are stored in an additional channel - messages[4] = self.__repeat_symmetric(self.linear_factors) - # if +1 is observed, set potential for -1 to -infinity - messages[4, :, :, 1] = (1 - (self.observations == 1)) * messages[4, :, :, 1] + \ - float('-inf') * (self.observations == 1) - # if -1 is observed, set potential for +1 to -infinity - messages[4, :, :, 0] = (1 - (self.observations == -1)) * messages[4, :, :, 0] + \ - float('-inf') * (self.observations == -1) + # if +1 is observed, set potential for -1 to 0 + messages[4, :, :, 1] = (1 - (self.observations == 1)) * self.linear_factors / 2 + # if -1 is observed, set potential for +1 to 0 + messages[4, :, :, 0] = (1 - (self.observations == -1)) * (-self.linear_factors / 2) upper = messages[:, :-1, :] lower = messages[:, 1:, :] @@ -186,25 +188,35 @@ def loopybelief(self, max_iter=25): correlations = [self.vertical_correlations, self.horizontal_correlations, self.vertical_correlations, self.horizontal_correlations] - + means_energy = [] # we stop when we reach max_iter iterations. # Murphy et al. found that in average, max_iter = 15 is sufficient for _ in range(max_iter): - for k, (newmessages, oldmessages) in \ - zip(range(4), [(upper, lower), (righter, lefter), (lower, upper), (lefter, righter)]): + old_messages = messages.copy() + old_upper = old_messages[:, :-1, :] + old_lower = old_messages[:, 1:, :] + old_righter = old_messages[:, :, 1:] + old_lefter = old_messages[:, :, :-1] + for k, (newmessages, oldmessages) in zip(range(4), + [(upper, old_lower), (righter, old_lefter), (lower, old_upper), (lefter, old_righter)]): # sum of messages coming to the source node, except the one coming from the destination node - tmp = oldmessages[(k - 1)] + oldmessages[k] + oldmessages[(k + 1) % 4] + oldmessages[4] - newmessages[k] = tmp - corr = self.__repeat_symmetric(correlations[k]) - # x_i=1 in newmessages[k, :, :, 0] - tmp = log_sum_exp(newmessages[k] + corr) + newmessages[k] = oldmessages[(k - 1)] * oldmessages[k] * oldmessages[(k + 1) % 4] * oldmessages[4] + corr = self.__repeat_symmetric(correlations[k] / 2) + # x_i=+1 in newmessages[k, :, :, 0] + tmp = np.sum(newmessages[k] * np.exp(corr), axis=-1) # x_i=-1 in newmessages[k, :, :, 1] - newmessages[k, :, :, 1] = log_sum_exp(newmessages[k] - corr) + newmessages[k, :, :, 1] = np.sum(newmessages[k] * np.exp(- corr), axis=-1) newmessages[k, :, :, 0] = tmp - # normalization of log-messages to 1 - # does it even make any sense? + # normalization of messages to 1 newmessages[k] /= np.expand_dims(np.sum(newmessages[k], axis=-1), axis=-1) + # damping + messages[:4] = damping*messages[:4] + (1-damping)*old_messages[:4] + upper = messages[:, :-1, :] + lower = messages[:, 1:, :] + righter = messages[:, :, 1:] + lefter = messages[:, :, :-1] + self.__messages2means(messages) + means_energy.append(self.energy(self.mean_parameters)) + self.__messages2means(messages) + return means_energy - self.mean_parameters = np.exp(np.sum(messages, axis=0)) - self.mean_parameters = self.mean_parameters[:, :, 0] / np.sum(self.mean_parameters, axis=-1) - self.mean_parameters = 2 * self.mean_parameters - 1 diff --git a/Test_Ising1.ipynb b/Test_Ising1.ipynb index 8be524b..026bbe4 100644 --- a/Test_Ising1.ipynb +++ b/Test_Ising1.ipynb @@ -79,7 +79,7 @@ "source": [ "for a in [.1,.3,.5,.7,.9,2]:\n", " model = IsingSimple(n=100,a=a,b=0)\n", - " for percent in [0.1,0.25,.5,.75,.]\n", + " for percent in [0.1,0.3,.5,.7,.9]\n", "\n" ] }, diff --git a/Test_Ising2.ipynb b/Test_Ising2.ipynb index fb56192..cb758c8 100644 --- a/Test_Ising2.ipynb +++ b/Test_Ising2.ipynb @@ -82,7 +82,7 @@ "model.constant_init(0,0,100)\n", "sample = model.random_grid(0.5)\n", "sample,elist = model.gibbs_sampling(sample)\n", - "plt.imshow(sample, interpolation=\"nearest\", cmap=plt.get_cmap('Greys'), vmin=-1, vmax=1)" + "plt.imshow(sample, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)" ] }, { @@ -142,11 +142,11 @@ "model.constant_init(-3,1,3)\n", "mlist1 = model.meanfields(model.gibbs_sampling(model.random_grid(0.6))[0])\n", "plt.subplot(121)\n", - "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('Greys'), vmin=-1, vmax=1)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", "\n", "mlist2 = model.meanfields(model.random_grid(0))\n", "plt.subplot(122)\n", - "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('Greys'), vmin=-1, vmax=1)" + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)" ] }, { @@ -227,7 +227,7 @@ " else:\n", " os.makedirs(dirname)\n", " for t in range(video.shape[0]):\n", - " plt.imshow(video[t], interpolation=\"nearest\", cmap=plt.get_cmap('Greys'), vmin=-1, vmax=1)\n", + " plt.imshow(video[t], interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", " plt.savefig(dirname + \"/frame\" + str(t).zfill(4)+\".png\")\n", " plt.close()" ] @@ -270,33 +270,258 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { - "name": "stdout", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABGgAAAF7CAYAAACO8L2iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xu0ZFldH/DfbxhEBcUIshSDTI8iatQYJaiJDEzPjIii\nIOLSIM5g4gOIi/hABewwTRzBx/Kx1KigAjMoJLyiCAjOTI/TBJCnkWgUle5BEAR88BpBcWbnj1OX\nOrf6Vt1zq07VPqfq81nrrj5dde45u07V3VV33/3dvyylBAAAAAD1nFe7AQAAAAC7zgANAAAAQGUG\naAAAAAAqM0ADAAAAUJkBGgAAAIDKDNAAAAAAVGaABgAAAKAyAzQAAAAAlRmgAQAAAKjMAA0sITMf\nkZm3ZuZnLPG9z8zMs+toF8CYZeZtMvMnMvMvM/OWzHzh5PZbM/OJSxzv7pPvvbzDvr32zZl5t8z8\nUGZ+eV/H3LTMPH/yXDyydluA8dGnr19m3ndyTS6qcO77Z+YHMvNOmz73NjNAw9pl5hWTjmPv60OZ\n+ebM/PnMvMsRj/VpmXllZn7huto7c77HZ+aDDrirTL6Wscr3Auwz08f+uzn7vG1y/4s23b4j+k8R\n8diIeG5EXB4RPzO5fRP9Zt/neGJE/H4p5dU9HnOjSin/HBE/HREnMvNjarcHdoE+vTe71KdX+b2i\nlPLyiPiLiHh8jfNvq/NrN4CdUSLiv0bETRHxsRHxFRHxqIh4QGZ+finlwx2Pc9eIuDIizkbEm9bQ\nzllPiIjnRcRvzdx+TUQ8p5TyTxtoA0AXH4qIh0XEq9o3ZuZ9I+LTI6JrP1vTxRHx9lLKY2du/7iI\n+OcK7VlKZt45ml9GvrV2W3rwjIj4sWheW8+s2xTYKfr0gdiyPr1vT42In8zMK0spN9duzDYwg4ZN\nelkp5dmllKeXUv5jRPxsRByLiINmqMyT62na0ZSGwRlgSF4aEd+YmbPv7Q+LiNdHxF9vvklHdpeI\neO/sjaWUfyql3FqhPcv61oj4SES8eJMnzcyP6/uYpZT3RcTvRsQj+j42sJA+fTg69+nr6IcH7gXR\n/PH9G2s3ZFsYoKGmU9EMuByLiMjMY5n5vMz828y8OTNfnZlfvbfz5C8Gr41mNs4zJ1M7b2nnUDPz\nSzPzZZn53skxfm92emhmnpx872dO8ql/P9n/6Zn5sa39bo2Ij4+IvfVmbs3Mp0/uO2cNmsz8usx8\ncWb+VWZ+ODP/IjNPHPDGeo7M/ObMfH1mvj8z35eZb8rMxyx5XYHdUyLiORFxp4i4bO/GzLxtRDw0\nIp4dBwxwZ+N7MvOPJvHTv87MX87MT5rZr1P/Nulz35SZn5uZN0z64bdn5g8savzeugIRcb+I+PxW\n/37R5P5z1ivIzLtO+u2/nrTpjzLz27pcrMx8cOsxvykzHzxnv2X75gdFxGtKKf/QOtZs3Lf9dWrm\nvA+fnPcfJu+Jz8nMfzmzz961/uLMPJ2ZN0fEj7buf/TkMX548rz9QmbeceYYn5WZL8jMd06uxdsm\n5/qEmcdzbUR8xezrAlgbffrA+/TJ8eb2w5n5oL6vcWZ+emb+ZmZ+MDPflZk/HRG3i4NfC9/Yeh95\nT2Y+KzPvOrPPM7NZQ+Zuk7Z+YHLuR0/u/4LMvH5yvpsy8z/MnqeU8p5oUg1H+YM7CxigoabPmvz7\nN9msRfPqaN6EfiGaaNHtIuJFOV0D5k+iyX9mNNPpHh7NiPbpiIjMPB4RN0bEHSLiZDR5yDtGxKnM\nvFfrvHs5zedGxO0j4nER8T8j4opo4lN7Hh4R/zQ5/sMnX09tHWM27/mIiPhARPxURDwmmr9u/LeI\neMqii5CZl0XzRvu3EfGDEfFDEXFDRByYOwaY46aI+P2IaH+A+uqI+MSI+B9zvudpEfHjEfGKaPqt\np0fEt0TEyzLzNq39HhHd+rcSEZ8cEb8TEX8QEd8XTd/9Y5l5/wVtf080feybI+JtkzZ86+R7zzF5\nz3hNRByPiJ+btOnPI+LXDvuwnZlfGRHPj2Z6/eMi4jejifHca2a/pfrmzDw/Iv5tRLxx5q4bY/pe\nsvd1YnLfu1rf/8MRcXU01+J7o1mz4ZKIuDEzP7F1vBIRd47mr+xvjIj/MmlfZObJaN5L3x7Nc/D8\niPiuiHj53vM6+UXvdyPi3tFcw0dH8x53LCJmB2LeEM1nRu9LsDk3hT59yH16xIJ+OJrfK3q7xtn8\nEflUNL8r/VxEXBXNkhE/ETO/k2TmI6L53eYjk2vytIh4SES84oD3kfMm535rRPxANMtI/HxmXjG5\n/XXRXK/3R8TVmXn3A67DG8L7Q39KKb58rfUrmg7qlmhyqHeKJjf7TdF03h+IiE+L5gPoLRHx5a3v\nu31EvCUi3tK67Usi4taIuPyA87w5Il4yc9vtJsd4Weu2KyfHeNrMvi+IiHfP3PaBiHj6gsf0Ge1z\nHbDfL02OcdvWbc+IiDOt//9MRPx97efJly9f4/xq9UdfHM0v2e/d64+i+YB23WT7bES8qPV9XzHp\nC79p5niXTW7/5tZtXfu3GyZteVjrtttGxDsi4rkdHssNEfGmA26/NSKe2Pr/r0Yz+PBJM/s9OyL+\nrvX47z77nhHNB+C3R8QdWrddMtlv5b45Ii6cHOvRh+x3u2g+sL8tIu4yue0zovlA/UMz+35eNH8w\neNwB1/rbZ/a9czRrU7x05vZHT/a/YvL/fz1p59d3eEyfOtn3sbVf7758bfuXPn3ffoPu0+f1w+u4\nxtEM/twSEQ9p3faxEfFnk9svmtx2fjTxt/8TER/T2verJ4/jytZtz5h87w+2brtjRNwczYDXQ1u3\nf/bs89a673GT49y59s/PNnyZQcOmZERcH82gzNui6XDfH80Hw3dGxAMi4rWltTJ6aRaaelpEXJCZ\nn7fw4JlfFBH3iIjnZOad9r4i4hMm550tPVdiOhtmzysi4k6ZeYdlHmAp5R9b7bnD5Pz/O5qY1Ocs\n+Nb3RsTtD/lLBEAXz42mz3ngpC97YET8xpx9HxpN/3P9TL/5BxHxwWgG1SPiyP3bB0spz25970ei\niadeuOqDa3lIRPx2RNxmpu2/G82Hyy8+6Jsy81OjGZh4Zinlg602Xh8R/29m92X75r1yo39/yH6/\nFBH/KpoP2++e3PYN0bxfPm/mcb07mr8mXzxzjH+McxfuvTSaD/c/O3P7r0Tzi8HXTP7/vsm/X5WH\nr5mw91jufMh+QL/06cPv0w/qh9dxjR8QEe8spbywtd+Ho/ldqe1e0az984ultV5mKeWlEfGnMX0P\naPu11n7vi+aP3jeXUp7fuv3PormGBz3v3iN6pIoTm1Ki+SvAn0czIvuuUsqbW/ffPZppnLP+pHX/\nbEfbdo/Jv9fMuf/WzLzjpNPZ85cz++x1Lv8imjeyI5kMIv1oNG+As9MH73jgNzV+MZqFtV6ame+I\n5s3ouaUpXQfQWSnlbzLzumgWkbx9NFOXnz9n93tEE2V59wH3lWg+4EXEkfu3tx9wvL+PiC/o8BAO\nlZmfEk27vzOa2M6sfW2fsTc1+y8OuO/NEfFvWv9ftW+eu6h9Zn5XNBGD7yilvK5112dF85wd1L4S\nzSyatr8qTSnstr3H+Gf7vrmUj2Tmmb37Syk3ZeZPRTOd/uGZ+YqIeFFE/Hop5f1zHststBdYI336\nR9s05D79oH54Hdf47jH/ccbMfiVm3gMm/jQi/v3MbR8upfztzG3vm9Om90Xze9Is7xE9MkDDJr2u\nlHJQfrMPe7PBvj8i/nDOPrODLrfM2e/IlaKyWXjxdDQjyyci4kw0U8y/JJrypHNnq5VS3jOZAXT/\naEbHHxAR35aZV5dSOi2OBtDy7GhmS3xaRPxOKeUDc/Y7L5q1Tx4WB/d774lYqn/rrW+dY+98vx7N\nWi0HedOqJ1mhb977oHvQh9jIzHtHM7vlaaWUX5u5+7xoppB/1eTfWbPvYx9a/CgWK6X8QGY+M5rF\nHb8ymnUNHpeZX1ZKeUdr173H8jernA9Yij59wH16HNAPD/AaLzLv3Edpk/eIHhmgYSjeGhH3POD2\nz23dHzF/ZPYtk38/UEo5NWefZXQdCb5fNJ3Tg0opr9y7MTM/s9NJmpH3l0y+IjN/KSK+MzN/pJRy\n5kgtBnbd/4omwvml0az3Nc9bosnpv6o9FfsA94sV+rc12Fu/7DZL9Pd77yX3OOC+c96Dluyb/zKa\nD+zHZu/IzDtH89fvN0bEdx/wvW+J5sPvTaWUg/5S2sXeY7xnNIuM7p37tpM2XdveuZTyxxHxxxHx\n5Mz8soh4VUQ8MppF+ffsPZYDF/gE1kqfPl/VPn2B+0X/1/it0cRiZ83Gpd4azfvIPSPi92buu2dM\nr1mfjkXE3xwwE4clWIOGoXhpRNw7M79074bMvH000x3PllL24k03T/49qMLEWyLisZPv22fyoXgZ\nNx9wroPcEk1n+NGfqcz8mGhiXQtl5icfcPP/nfx7uw7nBvioyfpdj4ymmt1vL9j1udH8oeaJs3dk\n5m1yWpJ56f5tHUopt0azqPs3ZOY5H1YX9fellL2FE6/IVinpSXWPfWudLds3T34BeH2cW0HkvGgW\n+Dw/moUXz5kSHxEvjMkijgcde06bZl0XzULDs5VPvj2aafYvnhzrE2aqukQ0AzW3xrmP716T218d\nwEbp04fZpx9iHdf4pRFx18z8htYxPz4ivmNmv9dHE3N75GRgfm/fB0Tzh+8Xr9CGeb4kvD/0xgwa\nNuWwKXo/Fk0ZwZdl5s9Fs2L7I6LJUT6ktd9bopku+MjM/GA0AyivmWTpvz2azuuPM/MZEfFX0VSM\nujiazOSD4ujeEBGXZub3RrOa+tlSymsP2O9V0WRFr5m0P6IpL9hlBs6vTt40TkWT97wgmr+s/kEp\nxV8rgS729bGllGcd9g2llNOZ+dRoIi1fFE0e/yPRVGp4aDS/4L8wVuvf1uVx0fyF8jWZ+SvRrFH2\nydF8SDweixcqfHw0H1BfmZlPj2YByO+OiD+KiPYi8av0zb8VEVdl5h1aC1c+Kpr3o1+KiOOZ+56y\nd5VSriulnMnME9HMZjkWTbnYD0SzKOODo/kr+k8vOvFkzYqnRMQTM/Nl0awr8zmT8782pguMHo+I\nX8jM50WzVsH5EXF5NOvEvWDmsJdGxCtLKYctfAz0Q58+/D59kXVc41+Jpr3Pysx7RcQ7oyldfnN7\np1LKP2fmD0VTYv10Zj4nmkp8j4kmajW7gPxKJmsIfWFE/Hyfx91lZtCwKQs7pEkFiy+P5s3kuyPi\nydFkNR9YSnlRa79/juYD5C3RfMh9dkwqNJVSbpwc43UR8Z+jydJfEU0H9jNLtvv7ohmk+ZHJuR45\np/1/F82q6O+Y7Pt9EfHyiPjBeQ+5tf2saKZOPioi/ns0ne1zoimHB9BFlw99ZXa/Usqjopmp+CnR\nLGb45Gg+JF8TEa+c7LNK/3bUNs7bb1/bJ+8Z947mA+jXR/PB8DHRzHicbdfsY355NAtFnhfN431w\nNH8QeMPM963SNz8rmgGPr2vddudJWx4ZzfVtfz2h1b4fj6aa0y3R/CX8J6Op3LI32DL3sbWO8aRo\n3kvvFs2AzkMj4pcj4v6llL11Bf5wcswHRsRPRTNr5/0R8VXtP0Rk5idGsz7NMzo8bqAf+vTh9+kH\ntmfSpt6vcSnlQ9EMVr08mv79h6NZ5+acY5ZSro4mDnfbaP4I/h3RDLzf54BF4I/y/J7zmovm/erD\nEfG8OcfhiLIUiy0DAPQpM381Ij67lHJR7basIjO/JyIeGxGfeci6FgBba1v69L5l5hsj4lQp5bG1\n27ItDNAAAPQsM+8WTfnTS0opo8zmZ+b50ZR1fUop5am12wNQyzb06X3LzPtHM3PmwlKKCk49MUAD\nAAAAUJk1aAAAAAAqM0ADAAAAUJkBGgAAAIDKzq/dgIiIjJMWwgEWy5N1z1/Wc/4SJ3MtBx4BfT9w\nKH3/1slsleltX9/Z53refV1uP+h4DMPYn7+xt5+qSolD+34zaAAAAAAqG8QMGgAAYAcsMwPhqLNp\nGK6uz1+fz22frx+vP9bMDBoAAACAygzQAAAAAFQm4gQAAGzGqhGXebdfe83+77/s8iUat8OWiZit\nep51LrLb9TxHPX/7dbbo9XfpmcPPv2rEbyy6/Mz6ef0oM2gAAAAAKjNAAwAAAFCZARoAAACAyqxB\nAwAAbEafa3D0uYbFNq8BMk+fawB1taky213WnVnGvNdZe82ZRedf5vFfd+HBt8873xCs6/WzA8yg\nAQAAAKjMAA0AAABAZSJOAABwkFPHptvHz9ZrxzZZNeKyrljTMhGftr4jOptQo8zzpspsdznWqo+r\nz4hY1+vfpS0HtWfTVo147TAzaAAAAAAqM0ADAAAAUJmIE0AX66oGAMBwXXXRdFvEqR/LRDw2EWta\nZ8RkqFGO9nXdVERrU1WcjtqWrvqsQrZMFafZalHzvr82saalmUEDAAAAUJkBGgAAAIDKRJwAAOAg\nNxw7fB+OpmvcYdOxpk1VcRpSxGPRdV1X22pUcVrVul4/q0ak2j8jQzPU1/wImEEDAAAAUJkBGgAA\nAIDKRJwAAOAwXSqpcLiucY1VY01tfUZMuu6zahWfbTWkKk5drSuitMzj7zP6tym1n7+RMYMGAAAA\noDIDNAAAAACVGaABAAAAqCxLKbXbEBkn6zcCGLYtza+WElm7DbXo+4FD6fu3TmZsT9/fZ5nlXTHG\nMtu7zmu5N136fjNoAAAAACozQAMAAABQmTLbAAAAR7Uo1jHvvrFEQdYVa+l6rDGWk94mR33+RdR6\nYwYNAAAAQGUGaAAAAAAqE3ECAGCYLj473b7hWL12wGEWRTzGENdZ1P4+407tazHvGkXUv07znrMx\nPJd9WNfzz6HMoAEAAACozAANAAAAQGVZSqndhsg4Wb8RwHhs0TTKUiJrt6EWfT9wqFOtWNMlV9Rr\nR892uu/P2J6+f1HEY959Q4rILNP+XYy17OJjnmc2CtdFl9fP0CJua9Kl7zeDBgAAAKAyAzQAAAAA\nlaniBADAMB0/e/g+UMu86Mai+2pHZLpElxbdV7v9m9Kl2tSiGM5RI2KbqqK1Kau2f0hRwA0zgwYA\nAACgMgM0AAAAAJUZoAEAAACozBo0AAAM38Wt9WhuODZ/P6hhyGW2l1kDZMjrm2zCvOdm3u19ryHT\n5xo2q6rd/h3r+82gAQAAAKjMAA0AAABAZVlKqd2GyDhZvxHAOI182m0pkbXbUIu+HziSU62p7Zdc\nUa8dPdjpvj9D378JQ4rItM2LeG3q/H3aVMSnRpnt2u3f0ohdl77fDBoAAACAygzQAAAAAFSmihMA\nAMN3vFXJY8eqesChhhaRmWderGnIEZfZa7unRsRnUxG1IbV/SK+FDTCDBgAAAKAyAzQAAAAAlani\nBGyPEU573OlKHvp+YFkjr+i0032/Kk6bMaRYU9syVZxqtHlerGmebaviNE/tKk7XXz3d3tK+3wwa\nAAAAgMoM0AAAAABUJuIEbA8Rp1HR9wO9aMckrruwXjuOYKf7/nbEaV7cJWJYsY51GUsVo3VZ5vlf\nl64Rna77bLoKUvtaRpx7PdehdhWnS89Mt7eo7zeDBgAAAKAyAzQAAAAAlRmgAQAAAKjMGjTAbhho\nfnun1yHQ9wN9m12HYBPrMCxhp/v+eWW2x1JmeFV9rsGxTRatobJorZp1GUOZ7a7XZRM/P7u4Bs8S\nrEEDAAAAMAIGaAAAAAAqE3ECdsNApwTv9DR3fT+wbgMtwb3Tff+6ymwviljUtomIx6ptWdXYI1q1\ny2wvsolYU98/P5uIeI3hdTVDxAkAAABgBAzQAAAAAFQm4gTsngFNg9zpae76fmDdTh2bbj/lPtPt\nynGnne772xGnl/zG9I6PuWX/ju34Rp8RodpqVHGqEZdq39f+ebv0zMHHGtJzFLGZKk5dta/fMtWJ\nav/8bCLiN+SIY4uIEwAAAMAIGKABAAAAqOz82g1gSatOQ4RdNtRpz3CYLhVpLj67//8nTk+3j8/c\nB9uu/Zq/dc7M8gFVd9oJXd+D29Vqxh5xWCbicf3V8+87qk3HpQ6777Djzn7/JgytilOXWNgiQ4oI\n1ajiNOLP+mbQAAAAAFRmgAYAAACgMlWcxqrPqVqiT9CoMAVypyt56Pu7WbV6Q1t7mnQ7PgC7pnJ1\np53u++dVcfqab6nQmgrmRS9m++RV+/s+rRoxWTWuUyOictRY06pViGaf//Z1qlFFaRPWWcWpi4F+\n7jeDBgAAAKAyAzQAAAAAlRmgAQAAAKjMGjRDtqlcnDVo4HBr+nnc6XUI9P0Hm113YF1rYrRLuCq/\nDY3Zn7erLppu33hBb6fZ6b6/vQYNw9VnmeYa69Gsa32VPstEt9edGdKaQzX0Xab8qGZfI/e9abp9\n4wW9ncYaNAAAAAAjYIAGAAAAoLLzazeAAVjXVDHYJrVLEbLd2lO+N1Tmd190Q8QJGosiFzdesKlW\nwOatGjFZpkxy17hTl89dy7R/Gas+frGmqe9/1XR7mddPnxa9fjbMDBoAAACAygzQAAAAAFSmitPQ\n1I5OiDjB4Xr8Od3pSh673ve3p3avqVJMZ/p+OFw7jrBiFHGn+/51VXHqO6Kz69ZVxWnViFBXntup\nebGqdV7/o3rvj+3//yc97vC2bOqzy4Y/95tBAwAAAFCZARoAAACAylRxqmXXp9rBmJk2y7J6jEgA\nG3bi9MG3+1le3jpjLH1GdHZBjSpOfV7/doxn9vt3sXLSUWNNm6qCNU870rTonMtUAVvV9VdPty+5\nYn3nmTCDBgAAAKAyAzQAAAAAlaniVMsYpk2q6gFrV+Lk7lby0PcPh/4eNkrfv/efk9M7Vo24DK2K\n0NiNvYoTU5uIqK3TUeNOEeuLPK14/VRxAgAAABgBAzQAAAAAlRmgAQAAAKhMmW32sw4BAADr0ud6\nFpsq87wL66GsuobMouMpc755tdcQWtVdbl6+LRH9luBuH2vV6xcz+x3ADBoAAACAygzQAAAAAFQm\n4gQA63TqWO0WHOzis7VbAOy6VWMRNco8b1PcadXHv+p5tulaDs2mX/99R9Teffvl27LM92ys/4hD\nmUEDAAAAUJkBGgAAAIDKRJw2aahT91RuAlifqy6q3YKDnThduwUAqxlyxGGorr96ut3n419k7Nds\n7IYU8VnGkNqvihMAAADA9jNAAwAAAFCZiBMA9Gm2atMNA63idFwVJ2DkhhRxGItLrphu146IsXlj\nqeK071it0ke1I0qqOAEAAABsPwM0AAAAAJWJOK2TKXwAu2eoVZsiIi4WawK2yKIqQrUjDkNVO+Kx\nKbXPPwZjef5LTref+tuHt2XRfbUjUqo4AQAAAAyfARoAAACAygzQAAAAAFRmDZpdtSizC8DyhlpW\nOyLixOnaLQDYPGW2p8ZYZrmLTZX5HvvzP89Ynv/v+trp9rXXzD9f7TWolNkGAAAAGC8DNAAAAACV\niTgBwKquu7B2C7o5rsw2sEUWRRS67LdqxKEdsbjs8vnnH5KVywR3OFYNay3zPOdYQ3r8fRtSmfl5\n57n0zHS7/bMYsf9zmTLbAAAAAByFARoAAACAyrKUDksJr7sRcbJ+I1YxxiltqjjBIJQ4mbXbUMvo\n+/72dPYhR5wWTQEGqtjpvj+71DHpWZ8Rh3afOuS+v4uuj7+LMf4+tAwVoTZj1YjRvJ/N9s9vhSpO\npcShfb8ZNAAAAACVGaABAAAAqEwVp20grgSwGe0pszWmtt/3pun2idPT7faUXQD2W7UKyxirNXXR\nNVazK5WL5mk//6u+LpZ5/e2iPiNG8z67qeIEAAAAwEEM0AAAAABUNowqTjVWcx87sSbYCip5cCTt\n6dRiTTBa+n5GZRdjTZvguh7dqhGjLtWdFn3/MhGrkq3NK1VxAgAAABg6AzQAAAAAlRmgAQAAAKhM\nmW0AGLJ2Ltq6MwBsmvVR1sN1Pbpl1oDpsh7N7No0q5bZbsujLbtlBg0AAABAZQZoAAAAACoTcRoa\n5bMBdsPFZ6fbJ05Pt4+fPXdfAACmlimz3TUi1eWcXW6fPU8HZtAAAAAAVGaABgAAAKAyEadaRJkA\nds+110y3VWQCYAyWiYLAJi1Txal9e/vzWUTEZZev1p655z/8W82gAQAAAKjMAA0AAABAZVlKh3k2\n625Edpnss2VEnICIKHEya7ehlp3p+9tRptkptMBO0vczeH1WvoE9u/j6ufVJH90seeWhfb8ZNAAA\nAACVGaABAAAAqEwVp3USYwLYPbMxJtWaABgbsSb6sutxufOunG6r4gQAAAAwfAZoAAAAACozQAMA\nAABQmTVoAGBV7XVmrDkDwDbZ5vVBWI8+151Z5ljz7muvE3jZ5d3Ov2Fm0AAAAABUZoAGAAAAoDIR\np74prQ2wGy4+O91+/CvqtQMAGJZdLy296VjT7O/gI77mZtAAAAAAVGaABgAAAKCyLKXUbkNkRv1G\nrEKsCVhSiZNZuw21jL7vb1cCULkJOAJ9PwzcUWMxy0RsRha9qabPKk6Vr3kpcWjfbwYNAAAAQGUG\naAAAAAAqU8UJALpqV24SawJgl21TRGfVKkBDi9hs03OjihMAAAAAm2SABgAAAKAyVZyWpXIT0AOV\nPEbm+qun28fPzt8PYAF9P6O1TMRkjEYWi9mmiE9ny1RxalfgvOzy/tt0CFWcAAAAAEbAAA0AAABA\nZQZoAAAAACqzBs2yrEED9MA6BCOj7wd6oO9nVJYpGb2t654so0bJbdd/kKxBAwAAADACBmgAAAAA\nKju/dgMAAAAYqC6xnF0s87zIUWNNq5Ypd/23hhk0AAAAAJUZoAEAAACoTMQJAACAg/VZxWldcZtV\nI0LrPP8mroUqWlvDDBoAAACAygzQAAAAAFQm4gQAAMDBlqlC1Na+77oLDz9WV8tErPo0pIjXrE0/\n5hoRsy2NcZlBAwAAAFCZARoAAACAykScAAAAONgysaZ5Lj3T7VhdIiu1IzZdzz/2KE6fVbw20Za+\nz7lhZtAAAAAAVGaABgAAAKAyAzQAAAAAlVmDBgAAgIOtuu5MW9cy20ddw6TGmiPXXjP//ENdd2bV\n9YSWWQOyfAIiAAAOqElEQVSmz3LqXdrS9zmXKTPfvu/K32vdcb9DT20GDQAAAEBlBmgAAAAAKhNx\nAgAA4GDzojxdYzHtWNMyZbaHGhe67PL59w2pnX2WSe9y3MPuW4dVy2wv8/pb5vF3aJYZNAAAAACV\nGaABAAAAqCxLKbXbEJlRvxFHteqUMICIKHEya7ehFn0/sKv0/azduiIm7bhTO+KzqYgIq9nU55hV\nn7M+21m7ilPrvi59vxk0AAAAAJUZoAEAAACoTBUnAACAMdtUFaR2rGledadF51wxIiLutKI+qzjN\nO+4yuj7/67KpiF6HgKcZNAAAAACVGaABAAAAqEzECQAAYMxqVEGaF3eaPacqTsO06Lou85z12Zb2\nea67cLp96Zlux2t/z6rn7zOiFzP7HcAMGgAAAIDKDNAAAAAAVGaABgAAAKAya9AAAAAMyaprfWx6\n3Zb2ejQR80twK7M9DvOu87qu/zrLXNc+vzLbAAAAAONigAYAAACgMhEnAACAmrYt4jOvBLcy2xxk\nnWWua59fmW0AAACAcTFAAwAAAFCZiBMAAEBNq0YshuyocafZ+4ZqSM9F+7pG7L/mQ2rnPH1XUap9\nflWcAAAAAMbLAA0AAABAZVlKh3k2625EdpnsMzCz06AAllDiZNZuQy36fmBX6fs5x7ZVcdpW66oi\n1LexR+Rqt39NVZy69P1m0AAAAABUZoAGAAAAoDJVnACgq1PHptvHz9ZrBwDbpWsVmHa1nnalHtZn\nmbjNk6+fbj/hkv7bNGu2itMYY01t89q5rvYvc/1UcQIAAADYTgZoAAAAACozQAMAAABQmTLbfVB2\ndTOOmjn0vDACSq2OzMWtdWdOXV2vHdvsxgv2//+qi6bb11148Pdcema6feL0/vvue1MPjYJ+6fth\n4Poss5ytl3zZ2R/9cZm31pMy2wAAAADbzwANAAAAQGXKbDNcq5ZRW1TuDGAZN7TKbCu5vR7tSFPE\n/FhT131EnAA2b6hlwleMqOx7v1n0u8W8+8ZS5nrXtV+b7dfsMmW227G2Dgk3M2gAAAAAKjNAAwAA\nAFCZiFMfFk2PA2A7taM4Ik6racfFukSaFpn9flE0gPXrGvdZtY9fxlErMnX9nj7bwnAdNe40K49W\nuM4MGgAAAIDKDNAAAAAAVCbixLCsc6qfKBrQp3ZFJ1YzW7lpXccWcQLYPV1iTctUcbr0zKotY2y6\nVh5b4fdOM2gAAAAAKjNAAwAAAFCZiBMAsHnt6krrjIuJogGsX9cqSO0qOJuyripOy0Skup5/7Gpf\nv01c86XOf/hhzaABAAAAqMwADQAAAEBlBmgAAAAAKrMGDfVtW+YSgMOts7Q2QG3ttVbapXm3ed2R\ntnmPrWuZ4j6NYQ2URecfgyFfvz7Xo1n1/HH4ecygAQAAAKjMAA0AAABAZSJOAMBmXHfhdFv5a2Cb\ndYk17UrcqbYxRmzG8NoY0vVb1LYu7epqmeevZGu/w09hBg0AAABAZQZoAAAAACoTcaKOoU7VA+jq\n4rO1WzAO7VjTk+9Trx0Am9Su4iTWVNeQIkp9nr+22tdvVfMqrXXV9bk478rpdumw+9FbAgAAAECf\nDNAAAAAAVCbi1Ic+p1ptsyFNyQNY1YnTtVswTO1IU0TEj3/FdFvlJmBXzItM9Pl5eOxVgDblpp+d\nbg8potTn+Wurff26an9GWSbW1NXcdp6Mw5hBAwAAAFCZARoAAACAykScWJ8hTbsD6NtxVZw+6lQr\nutSONEWcG3kCYHnbVAVoUy74nul2+1q0358WxWXm3df1e7a1itMiQ6qCtWq1pmXMbefh32oGDQAA\nAEBlBmgAAAAAKjNAAwAAAFCZNWjo11hykQD05yn3mW4Pbc2ZS8/UbgHAavpcw2PXtd+jNvX+sAtl\nthepUaa8xrozbe323Pqk1h1XHvqtZtAAAAAAVGaABgAAAKAyESe216LSdwCspl1au3as6b43TbdP\nnN5/n4gTMHarRkR2XTvu8rUPm25/6KrNt2VXymzPs66IV/s5jqgTa5rnvFasSZltAAAAgOEzQAMA\nAABQWZbSYZ7NuhuRXSb7DNiuR2mGNNVu158LRqfEyazdhlr0/SN3/Irp9g3H5u+3Ce2pzSJNjIC+\nn15sU/Slb/Oq+NR+797FKk58VClxaN9vBg0AAABAZQZoAAAAACpTxQkAuhKfmaoda2rzvAC7SMRl\nalEVn66Vk9Zl1Spcy8SaVo3+jv21ddSI2DqroN36pNZ/rpy72x4zaAAAAAAqM0ADAAAAUJmI07Jq\nrwAOwGa0pwafOF2vHewn1gSMhYo86zGvUlPE+GJNXas4zTMb8Vr1PXJsr81lImJ9Xv9F7dl3zsO/\n1QwaAAAAgMoM0AAAAABUZoAGAAAAoDJr0Myytsz4eM6AZVx8drrdXlvm+Nlz96Vx3YV1z289IGAs\nhlTmd5tcf/V0+5IrpturrkGyqq5rmKzr+V+0Bs8yxvD6W/QY5923ruvf9fUXhx/XDBoAAACAygzQ\nAAAAAFSWpXSo9bTuRmSXglNLEH1ZnxrT3jyfbKESJ7N2G2rpte+fF1eKEFlaVTvWdNVF0+0bL1jP\n+S6eeb7Ez9hC+v6B6LOUcOeIw4rGED1Zxmzff8Ox6XafZZL7jDt1jchsosz60MpMr8u6fh/ss5T2\ngvtKiUP7fjNoAAAAACozQAMAAABQ2TAiTnGyfiM4lxgTrN1OT3PX9w/TbCWIdVVuUkWLHbbTfX87\n4rTOiMq8z7F9VnHp2v51GVL0ZBmbev63KeLT1TZVEVtXFa4+H2PH11+Xvt8MGgAAAIDKDNAAAAAA\nVHZ+7Qawo0SZAIbjVKtaxroiTRER114z3b70zPrOAwxX7YjKqlV01hW32BW1n/8xRny62OaI17oi\nbn1adNx9bTn8UGbQAAAAAFRmgAYAAACgMhEn9qs9hQ2Azbvqos2cR6wJGFJEZYyxpk1HN/pQO6K0\nzPnHZpsjXu149BgjWkdkBg0AAABAZQZoAAAAACozQAMAAABQmTVoAGAXtctp33Bs/n4AfZq3bsuQ\nywSPYd2ZIa8hUmMNmV1Yd6Ztm9fguezy6XaX9WgWGcHPjxk0AAAAAJUZoAEAAACoTMSJYU9pA6A/\np1pRpiffZzPnVFobWMaQygSPIdY0ljLDQyqzvU12JeLVjjstMuKfHzNoAAAAACozQAMAAABQWZZS\narchMk7Wb8SuqTGlrcb0UBi4Eiezdhtq0fdX0J4a3K7i1KfZSNOJ09Pt+960nnPCyOj7u+x4cro9\npLjGuj7PrjPiA9tohBG5UuLQvt8MGgAAAIDKDNAAAAAAVKaKE6sTXQIYhz5jTddeM91WqQnoqrRm\n+Gcr7TTGKjTrjEjM2++ot8O2WvXnb9HvsPPum3d7j1WgzKABAAAAqMwADQAAAEBlIk4AsM1OHevv\nWO0ok1gTsIzzruy231CjPF2jS0OKYjEcXhf9WbWK06qWiVjF4ec3gwYAAACgMgM0AAAAAJUZoAEA\nAACozBo0u6TPnKPS2gDjcNVFq33/xWen249/xWrHAhiqRWtIzNN1DYqxu/aa6fZllx9++6rnWOd5\nahhDyfgxWmoNmB4ttQbO4Yc1gwYAAACgMgM0AAAAAJWJONGdWBPA+NywYpntJ7RiTcfPzt8PYGz6\nLJO9zRGVdqxoXbGc2ejSvPOMJe501FjTNkfk1kWZbQAAAADWwQANAAAAQGUiTgCwTa67sN/jXXqm\n3+MBDIWISTftWNG64kZdIyJDel7aj3/Re+W8WM0Yl4+Y95zX+PlZJmLU9XV11IjUoserihMAAADA\nuBigAQAAAKgsS+kwz2bdjYiT9RuxjfqeWjbGaXgwcCVOZu021KLv71E71nTVRfvvu/GC1Y6t74fe\n7XTfn10m+bNzFr3XjCHutM73yiE9zrY+q6D1rc8qWj0+llLi0L7fDBoAAACAygzQAAAAAFSmitM2\nGOq0NwDWp109oe/KTQCwbl0jMrXjMvNsKtY0pMe/TESohk1UcVrTYzSDBgAAAKAyAzQAAAAAlRmg\nAQAAAKjMGjQAMEbWnQFgzIa8hkkXi9q/yrFmjzekazHUtXEWWabMdluX57Zrme44/Fhm0AAAAABU\nZoAGAAAAoDIRJwAAYDOWKdM7ligFy9vF53WbIl5jsWosbeUy3YefwgwaAAAAgMoM0AAAAABUJuIE\nAABsxsoRgQXfM1RjbDNHs2oVplVfF2OMSNXWNe60TBUoVZwAAAAAxssADQAAAEBlIk4wT9epgcus\nAA7AcJw6Nt2+6qL9993Quu/is9PtE6en28dbtwOL7UoVp22KaHF0m3hu26+l6y6cf1+b11w3R401\nqeIEAAAAsD0M0AAAAABUJuIEq071E4UCGJ/LLp9uz04Nn6cdd2pvt116Zv//21Go+97U7TywzXal\nitMY2zwk114z3W7317t+LbtGBNvG8FpsP98R+5/zea+FPq3a/6jiBAAAALA9DNAAAAAAVGaABgAA\nAKAya9DApnTNiQKwfl3XnVn1uLe9ZbptDRoYbpntRefv4iW/sf//X/Mt0+2X3mOZFu22LuvODHU9\nlb4ts+7MUb+/9vWbXVum3bZ5Pz99tn+Z/keZbQAAAIDtZIAGAAAAoDIRJ6hB3AlgN/yOaAPsM6Qy\n27c+af6x2vedd+Xhx2pHmiKGFR8ZozHEctZp3mtzXWW22+eL6Paa71PXiNG62q/MNgAAAAB7DNAA\nAAAAVJaldFhKGAAAAIC1MYMGAAAAoDIDNAAAAACVGaABAAAAqMwADQAAAEBlBmgAAAAAKjNAAwAA\nAFCZARoAAACAygzQAAAAAFRmgAYAAACgMgM0AAAAAJUZoAEAAACozAANAAAAQGUGaAAAAAAqM0AD\nAAAAUJkBGgAAAIDKDNAAAAAAVGaABgAAAKAyAzQAAAAAlRmgAQAAAKjMAA0AAABAZQZoAAAAACoz\nQAMAAABQmQEaAAAAgMoM0AAAAABUZoAGAAAAoDIDNAAAAACVGaABAAAAqMwADQAAAEBlBmgAAAAA\nKvv/eexB/JJiPdAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = IsingGrid(100, 100)\n", + "model.constant_init(0,10,10)\n", + "grid = model.random_grid(0.3)\n", + "model.linear_factors = model.gibbs_sampling(model.random_grid(.55))[0]\n", + "plt.figure(figsize=(14,12))\n", + "plt.subplot(131)\n", + "plt.title('Potentials')\n", + "plt.axis('off')\n", + "plt.imshow(model.linear_factors, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.meanfields(np.zeros((model.height,model.width)))\n", + "plt.subplot(132)\n", + "plt.title('Mean fields (zeros)')\n", + "plt.axis('off')\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.meanfields(grid)\n", + "plt.subplot(133)\n", + "plt.title('Mean fields (random)')\n", + "plt.axis('off')\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "plt.savefig('images/meanfield_qui_chie_a10.png')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "observation1 = np.zeros((model.height, model.width))\n", + "observation2 = np.zeros((model.height, model.width))\n", + "observation3 = np.zeros((model.height, model.width))\n", + "\n", + "observation1[model.height//2-10:model.height//2+10,model.width//2-10:model.width//2+10] = 1\n", + "observation1[0,1:-1] = -1\n", + "observation1[-1,1:-1] = -1\n", + "observation1[1:-1,0] = -1\n", + "observation1[1:-1,-1] = -1\n", + "observation2[:2,1:-1] = 1\n", + "observation2[-2:,1:-1] = 1\n", + "observation2[1:-1,:2] = -1\n", + "observation2[1:-1,-2:] = -1\n", + "for i in range(min(model.height,model.width)):\n", + " observation3[i,i] = 1\n", + "observation3[0,-1] = -1\n", + "observation3[-1,0] = -1" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", "output_type": "stream", "text": [ - "3\n" + "/Users/remilepriol/Dropbox/MVA/PGM/Project/IsingModel/Ising2.py:211: RuntimeWarning: invalid value encountered in true_divide\n", + " newmessages[k] /= np.expand_dims(np.sum(newmessages[k], axis=-1), axis=-1)\n" ] }, { "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQMAAAUUCAYAAABrlAR5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XmYZXdZJ/Dvm5CgQABBcJkZUZRRcRl3FDUEFWZUFNkR\nEXQc0bigzqCAQLpDZFRAUXQGUMEliJhR3FDER5MGBEXR0QSjsiYsihC2YYuS7t/8cU53Tp2uul3V\nXVX33vp9Ps9znvS959xbv6rq577p9/7e763WWgAAAACAg++sZS8AAAAAANgfmoEAAAAA0AnNQAAA\nAADohGYgAAAAAHRCMxAAAAAAOqEZCAAAAACd0AwEAAAAgE5oBgIAAABAJzQDAQAAAKATmoGsjao6\nXFXHquo2y17Lfjv+vS97HQDsHnVNXQM4KNQ0NY31ohnIUlXVnavquVX1lqq6vqreOt6+8yaXt/E4\nkKrqI6vqUFWdv8nplmQpBaaqHlhVl1bVa8YCf/ky1gGwDtS1G61iXauq21TVD1bVS6rq7VX17qr6\ns6p64H6vBWDVqWk3WsWaliRV9bSq+quqemdVfaCqrh7XefNlrIf1oRnI0lTVfZP8dZK7J3lOkguT\n/EKSC5L8dVXde3mrW4qbJTmU4fufu2Q8vwwXJvn6JG9K8q4lrQFg5alrJ1nFuvYl49d+5/jfH07y\ngSTPr6pDS1gPwEpS006yijUtST4/yUuTXJTkkUkuT/KYJC9a0npYEzdZ9gLoU1XdMcmvJHldkvNb\na++anPvpJH+a5NKq+uzW2jXLWeXmqqqSnNta+9fdfuqtTrTWjiX5t13+etv10NbaW5Okqq5a0hoA\nVpq6tvlTb3ViiXXt1Unu1Fp78+S+Z1TVHyd5dFU9ubX2oSWsC2BlqGmbP/VWJ5b5b7XW2kk7Favq\nDUmeUlVf1Fr7iyUsizVgZyDL8kNJPjLJI6bFJUnG29+R5BbjdXO3q6rLquq9VXVdVf1UVd10ekFV\n3aOqXjaO/7yvqv6hqp40u+bcqrq4ql47bnt/U1X9eFWdO7vuWFU9vaoeUlWvTnJ9kq8bt2I/e764\nqjqvqj5UVU8eb59TVU+sqldV1Xuq6v1V9dKqumDymDskeXuGLebH8zaOVdVF4/mTciiq6uyqekJV\nvW5c/xur6kmbrP+aqvrdqvrSqnrluLbXV9U3b/KzPcnxRiAAC6lra1DXWmvXzhqBx/12kpsmueOp\n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\nAAAAAEUIAwEAAACgCGEgAAAAABQhDAQAAACAIoSBAAAAAFCEMBAAAAAAihAGAgAAAEARwkAAAAAA\nKEIYCAAAAABFCAMBAAAAoAhhIAAAAAAUIQwEAAAAgCKEgQAAAABQhDAQAAAAAIoQBgIAAABAEcJA\nAAAAAChCGAgAAAAARQgDAQAAAKAIYSAAAAAAFCEMBAAAAIAihIEAAAAAUIQwEAAAAACKEAYCAAAA\nQBHCQAAAAAAoQhgIAAAAAEUIAwEAAACgCGEgAAAAABQhDAQAAACAIoSBAAAAAFCEMBAAAAAAihAG\nAgAAAEARwkAAAAAAKEIYCAAAAABFCAMBAAAAoAhhIAAAAAAUIQwEAAAAgCKEgQAAAABQhDAQAAAA\nAIoQBgIAAABAEcJAAAAAAChCGAgAAAAARQgDAQAAAKAIYSAAAAAAFCEMBAAAAIAihIEAAAAAUIQw\nEAAAAACKEAYCAAAAQBHCQAAAAAAoQhgIAAAAAEUIAwEAAACgCGEgAAAAABQhDAQAAACAIoSBAAAA\nAFCEMBAAAAAAihAGAgAAAEARwkAAAAAAKEIYCAAAAABFCAMBAAAAoAhhIAAAAAAUIQwEAAAAgCKE\ngQAAAABQhDAQAAAAAIoQBgIAAABAEcJAAAAAAChCGAgAAAAARQgDAQAAAKAIYSAAAAAAFCEMBAAA\nAIAihIEAAAAAUIQwEAAAAACKEAYCAAAAQBHCQAAAAAAoQhgIAAAAAEUIAwEAAACgCGEgAAAAABQh\nDAQAAACAIoSBAAAAAFCEMBAAAAAAihAGAgAAAEARwkAAAAAAKEIYCAAAAABFCAMBAAAAoAhhIAAA\nAAAUIQwEAAAAgCKEgQAAAABQhDAQAAAAAIoQBgIAAABAEcJAAAAAAChCGAgAAAAARQgDAQAAAKAI\nYSAAAAAAFCEMBAAAAIAihIEAAAAAUIQwEAAAAACKEAYCAAAAQBHCQAAAAAAoQhgIAAAAAEUIAwEA\nAACgCGEgAAAAABQhDAQAAACAIoSBAAAAAFCEMBAAAAAAihAGAgAAAEARwkAAAAAAKEIYCAAAAABF\nCAMBAAAAoAhhIAAAAAAUIQwEAAAAgCKEgQAAAABQhDAQAAAAAIoQBgIAAABAEcJAAAAAAChCGAgA\nAAAARQgDAQAAAKAIYSAAAAAAFCEMBAAAAIAihIEAAAAAUIQwEAAAAACKEAYCAAAAQBHCQAAAAAAo\nQhgIAAAAAEUIAwEAAACgCGEgAAAAABQhDAQAAACAIoSBAAAAAFCEMBAAAAAAihAGAgAAAEARwkAA\nAAAAKEIYCAAAAABFCAMBAAAAoAhhIAAAAAAUIQwEAAAAgCKEgQAAAABQhDAQAAAAAIoQBgIAAABA\nEcJAAAAAAChCGAgAAAAARQgDAQAAAKAIYSAAAAAAFCEMBAAAAIAihIEAAAAAUIQwEAAAAACKEAYC\nAAAAQBHCQAAAAAAoQhgIAAAAAEUIAwEAAACgCGEgAAAAABQhDAQAAACAIoSBAAAAAFCEMBAAAAAA\nihAGAgAAAEARwkAAAAAAKEIYCAAAAABFCAMBAAAAoAhhIAAAAAAUIQwEAAAAgCKEgQAAAABQhDAQ\nAAAAAIoQBgIAAABAEcJAAAAAAChCGAgAAAAARQgDAQAAAKAIYSAAAAAAFCEMBAAAAIAihIEAAAAA\nUIQwEAAAAACKEAYCAAAAQBHCQAAAAAAoQhgIAAAAAEUIAwEAAACgCGEgAAAAABQhDAQAAACAIoSB\nAAAAAFCEMBAAAAAAihAGAgAAAEARwkAAAAAAKEIYCAAAAABFCAMBAAAAoAhhIAAAAAAUIQwEAAAA\ngCKEgQAAAABQhDAQAAAAAIoQBgIAAABAEcJAAAAAAChCGAgAAAAARQgDAQAAAKAIYSAAAAAAFCEM\nBAAAAIAihIEAAAAAUIQwEAAAAACKEAYCAAAAQBHCQAAAAAAoQhgIAAAAAEUIAwEAAACgCGEgAAAA\nABQhDAQAAACAIoSBAAAAAFCEMBAAAAAAihAGAgAAAEARwkAAAAAAKEIYCAAAAABFCAMBAAAAoAhh\nIAAAAAAUIQwEAAAAgCKEgQAAAABQhDAQAAAAAIoQBgIAAABAEcJAAAAAAChCGAgAAAAARQgDAQAA\nAKAIYSAAAAAAFCEMBAAAAIAihIEAAAAAUIQwEAAAAACKEAYCAAAAQBHCQAAAAAAoQhgIAAAAAEUI\nAwEAAACgCGEgAAAAABQhDAQAAACAIoSBAAAAAFCEMBAAAAAAihAGAgAAAEARwkAAAAAAKEIYCAAA\nAABFCAMBAAAAoAhhIAAAAAAUIQwEAAAAgCKEgQAAAABQhDAQAAAAAIoQBgIAAABAEcJAAAAAAChC\nGAgAAAAARQgDAQAAAKAIYSAAAAAAFCEMBAAAAIAihIEAAAAAUIQwEAAAAACKEAYCAAAAQBHCQAAA\nAAAoQhgIAAAAAEUIAwEAAACgCGEgAAAAABQhDAQAAACAIoSBAAAAAFCEMBAAAAAAihAGAgAAAEAR\nwkAAAAAAKEIYCAAAAABFCAMBAAAAoAhhIAAAAAAUIQwEAAAAgCKEgQAAAABQhDAQAAAAAIoQBgIA\nAABAEcJAAAAAAChCGAgAAAAARQgDAQAAAKAIYSAAAAAAFCEMBAAAAIAihIEAAAAAUIQwEAAAAACK\nEAYCAAAAQBHCQAAAAAAoQhgIAAAAAEUIAwEAAACgCGEgAAAAABQhDAQAAACAIoSBAAAAAFCEMBAA\nAAAAihAGAgAAAEARwkAAAAAAKEIYCAAAAABFCAMBAAAAoAhhIAAAAAAUIQwEAAAAgCKEgQAAAABQ\nhDAQAAAAAIoQBgIAAABAEcJAAAAAAChCGAgAAAAARQgDAQAAAKAIYSAAAAAAFCEMBAAAAIAihIEA\nAAAAUIQwEAAAAACKEAYCAAAAQBHCQAAAAAAoQhgIAAAAAEUIAwEAAACgCGEgAAAAABQhDAQAAACA\nIoSBAAAAAFCEMBAAAAAAihAGAgAAAEARwkAAAAAAKEIYCAAAAABFCAMBAAAAoAhhIAAAAAAUIQwE\nAAAAgCKEgQAAAABQhDAQAAAAAIoQBgIAAABAEcJAAAAAAChCGAgAAAAARQgDAQAAAKAIYSAAAAAA\nFCEMBAAAAIAihIEAAAAAUIQwEAAAAACKEAYCAAAAQBHCQAAAAAAoQhgIAAAAAEUIAwEAAACgCGEg\nAAD8/3bsQAAAAABAkL/1IBdGAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATMhAAAAAAJmQgAAAAAEzIQAAAAACYkIEAAAAAMCEDAQAAAGBC\nBgIAAADAhAwEAAAAgAkZCAAAAAATAdu20M1k6XK8AAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, - "execution_count": 16, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" + } + ], + "source": [ + "model = IsingGrid(100, 100)\n", + "model.constant_init(0,3,3)\n", + "grid = np.zeros((model.height, model.width))\n", + "#model.linear_factors = model.gibbs_sampling(model.random_grid(0.5))[0]/100\n", + "\n", + "max_iter_mf = 500\n", + "max_iter_lb = 200\n", + "\n", + "plt.figure(figsize=(16,16))\n", + "\n", + "plt.subplot(331)\n", + "plt.imshow(observation1, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.title('Observation 1')\n", + "plt.axis('off')\n", + "plt.subplot(332)\n", + "plt.imshow(observation2, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.title('Observation 2')\n", + "plt.axis('off')\n", + "plt.subplot(333)\n", + "plt.imshow(observation3, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.title('Observation 3')\n", + "plt.axis('off')\n", + "\n", + "model.observe(observation1)\n", + "plt.subplot(334)\n", + "mlist1 = model.meanfields(grid, max_iter=max_iter_mf)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.title('Mean field, obs1')\n", + "plt.axis('off')\n", + "plt.subplot(337)\n", + "mess_list1 = model.loopybelief(max_iter=max_iter_lb)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.title('Loopy belief, obs1')\n", + "plt.axis('off')\n", + "\n", + "model.observe(observation2)\n", + "plt.subplot(335)\n", + "mlist2 = model.meanfields(grid, max_iter=max_iter_mf)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.title('Mean field, obs2')\n", + "plt.axis('off')\n", + "plt.subplot(338)\n", + "mess_list2 = model.loopybelief(max_iter=max_iter_lb)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.title('Loopy belief, obs2')\n", + "plt.axis('off')\n", + "\n", + "\n", + "model.observe(observation3)\n", + "plt.subplot(336)\n", + "mlist3 = model.meanfields(grid, max_iter=max_iter_mf)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.title('Mean field, obs3')\n", + "plt.axis('off')\n", + "plt.subplot(339)\n", + "mess_list3 = model.loopybelief(max_iter=max_iter_lb)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.title('Loopy belief, obs3')\n", + "plt.axis('off')\n", + "\n", + "plt.savefig('images/compare_mf_lb_3.png')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'observation2' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean_parameters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minterpolation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"nearest\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_cmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'winter'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmin\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobserve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobservation2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 19\u001b[0m \u001b[0mmlist1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmeanfields\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_iter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m500\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m334\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'observation2' is not defined" + ] }, { "data": { - "image/png": "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\n6ggtA4Ad9Q0DG6Os8LoxwtzGKDs7xBjhPq3Kx9aGALYILxoj1GmX150da6uwqFYhaWOHY7Z6n8Yo\ntT5FiFrf/lpfz5fqjgwAAEAfNjIAAMDiXIbQsuckyWOPPZbr16/n2rVrc4/nUjI35zMv5zMvm5mb\nGz322GOnf3zOnOO4hAbNx/HxcdVztW3WGqPNVsaYwyFtzDnfS7l+du3ziSeemO0aHHsed21/zLmZ\nes4b9nfh7+FyCUq7vTbJr8w6CAB+uuu6/zD3IC4LaxPA7C5cly7DRuZPJ/mxJF9I8v9mHQzA/nlO\nkj+f5CNd1/3RzGO5NKxNALPpvS7NvpEBAAAYSrI/AACwODYyAADA4tjIAAAAi2MjAwAALI6NDAAA\nsDiXZiNTSvmHpZRHSinXSym/XUr5K3OPaUqllLeUUj5VSvlKKeXxUsqvllL+4jnHvaOU8mgp5clS\nykdLKS+cY7xzKaW8uZTyVCnlXWuP7+W8lFK+p5TyQCnlyyfn/nAp5WDtmL2am1LKs0op95ZSPn9y\nzp8rpbztnOP2al4YzrpkXerL2vQt1qXzWZvGcSk2MqWUVyX5F0n+cZK/nOThJB8ppXzXrAOb1o8k\n+ZdJXpbkR5N8Z5L/Ukq56fSAUsrdSe5I8oYkL03y1azm6dnTD3d6J/+IeENW18fZx/dyXkoptyT5\neJKvZfV9Fz+Q5OeT/PGZY/Zxbt6c5GeSvDHJ9ye5K8ldpZQ7Tg/Y03lhAOtSEutSL9amb7EubWVt\nGkPXdbP/JPntJO858/eS5ItJ7pp7bDPOyXcleSrJXz3z2KNJ7jzz95uTXE/yU3OPd4L5+FNJfj/J\n30zyX5O8a9/nJcl9Sf77Bcfs3dwk+VCSf7322H9K8u/2eV78DPuxLp07J9alZ86JtenG+bAubT5v\na9MIP7PfkSmlfGeSwyQfO32sW717v5Hk5XON6xK4JUmX5P8kSSnlBUluzY3z9JUkn8x+zNMvJflQ\n13W/efbBPZ+XVyS5Wkr5wEnYx3Ep5fWnT+7x3Hwiye2llO9LklLKi5P8cJIPn/x9X+eFnqxLG1mX\nnsnadCPr0mbWphF8x9wDyOp/eP5EksfXHn88yYumH878SiklybuT/I+u6z5z8vCtWS0g583TrRMO\nb3KllFcneUmSK+c8vbfzkuR7k/xcVuEv/zSr29C/WEr5Wtd1D2R/5+a+rP4X6/dKKd/MKoT2rV3X\nvf/k+X2dF/qzLq2xLj2Ttelc1qXNrE0juAwbGZ7pl5P8YFY79b1WSvmzWS2eP9p13TfmHs8l86wk\nn+q67u0nf3+4lPJDSX42yQPzDWt2r0ry2iSvTvKZrP6h8Z5SyqMnCykwnHXpDGvTRtalzaxNI5g9\ntCzJl5N8M8nz1x5/fpLHph/OvEop/yrJ307y17uu+9KZpx7LKkZ73+bpMMl3JzkupXyjlPKNJH8t\nyZtKKV/P6n8q9nFekuRLST679thnk9x28ud9vWbemeS+ruv+Y9d1n+667leS/EKSt5w8v6/zQn/W\npTOsS+eyNp3PurSZtWkEs29kTv4n4yjJ7aePndzCvj2reMK9cbJY/J0kf6Prumtnn+u67pGsLuSz\n83RzVtVkvp3n6TeS/KWs/ufixSc/V5P8+yQv7rru89nPeUlWlWHWw1xelOQPk72+Zp6b1T9Cz3oq\nJ7/v9nhe6Mm69C3WpY2sTeezLm1mbRrD3NUGVvmT+akkTyZ5XVYl6d6X5I+SfPfcY5twDn45q/KE\nP5LV7vv05zlnjrnrZF5ekdUv0F9L8gdJnj33+Ceeq/XKMHs5L1nFZX8tq//N+QtZ3bL+v0levc9z\nk+TfJrmW1f8g/7kkP5nkfyf5Z/s8L36G/ViXrEsV87X3a5N1aevcWJvGmNe5B3DmzXtjki9kVWbu\nfya5MveYJj7/p7Laqa//vG7tuHuyKs/3ZJKPJHnh3GOfYa5+8+xisc/zcvIL8XdPzvvTSf7+Ocfs\n1dwk+ZNJ3pXkkaxq8P9Bkn+S5Dv2eV78DP+xLlmXBs6XtamzLm2ZF2vTCD/lZNIAAAAWY/YcGQAA\ngKFsZAAAgMWxkQEAABbHRgYAAFgcGxkAAGBxbGQAAIDFsZEBAAAWx0YGAABYHBsZAABgcWxkAACA\nxbGRAQAAFuf/AwOSNU01iHLpAAAAAElFTkSuQmCC\n", + "image/png": "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\n5oTbAVhyO3eN/6C8/6nkzivms5/Nm13OJLIGYCMWK2vkDMBWs4mcmfQ9tb6YZGcGT9c9e3h6NIM3\nWTy7tfbNJAeSfHc3VXVykvOTPDThbQGwfOQMALMkZwAWyETP1GqtHUryxOq1qjqU5NuttSeHS7cm\nuaGq9ibZl2R3kmeT3LPp3QKw0OQMALMkZwAWy8RvFH8YbeRMazdX1YlJ7khySpIvJXl/a+2VKdwW\nAMtHzgAwS3IGoFObLrVaaxceZu3GJDdu9roBQM4AMEtyBqBfk76nFgAAAADMnVILAAAAgO4otQAA\nAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4o\ntQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAA\ngO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlIL\nAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADo\njlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAA\nAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4o\ntQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAA\ngO4otQAAAADozsSlVlWdVlV3VdVzVfViVT1WVe9ac8xNVbV/ePn9VXXG9LYMwCKTMwDMmqwBWAwT\nlVpVdUqSB5N8J8lFSX4kyS8n+ftVx1yb5Koklyc5L8mhJPdV1QlT2jMAC0rOADBrsgZgcRw/4fHX\nJXmmtfaRVWt/s+aYq5Psbq19Pkmq6rIkB5N8KMndG90oAEtBzgAwa7IGYEFM+vLDDyZ5tKrurqqD\nVfW1qvpuGFTV6Ul2JNmzstZaez7Jw0kumMaGAVhocgaAWZM1AAti0lLrh5P8UpK/SvIvkvxOkk9X\n1c8PL9+RpGXwV4zVDg4vA4D1yBkAZk3WACyISV9+eFySR1prnxief6yqfizJR5Pctamd3Htbsu2k\n0bWdFyY7d23qagEW2uN7kscfGF17+YX57GU6ZpcziawB2AhZc/TkDMDkNpEzk5Za30ry5Jq1J5P8\ny+F/H0hSSbZn9C8b25N8fd1rvvjK5LQzJ9wOwJLbuWv8B+X9TyV3XjGf/Wze7HImkTUAGyFrVvid\nBmAWNpEzk7788MEkZ61ZOyvDN1ZsrT2dQQh8dzdVdXKS85M8NOFtAbB85AwAsyZrABbEpM/U+s0k\nD1bV9Rl86sf5ST6S5N+uOubWJDdU1d4k+5LsTvJskns2vVsAFp2cAWDWZA3Agpio1GqtPVpVP5Pk\nk0k+keTpJFe31j676pibq+rEJHckOSXJl5K8v7X2yvS2DcAikjMAzJqsAVgckz5TK621LyT5whGO\nuTHJjRvbEgDLTM4AMGuyBmAxTPqeWgAAAAAwd0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACg\nO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIA\nAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj\n1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAA\nALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0ot\nAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACg\nO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIA\nAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALqj1AIAAACgO0otAAAAALoz\nUalVVcdV1e6q+mZVvVhVe6vqhsMcd1NV7R8ec39VnTG9LQOwqOQMALMmawAWx6TP1LouyRVJPpbk\nHUmuSXJNVV21ckBVXZvkqiSXJzkvyaEk91XVCVPZMQCLTM4AMGuyBmBBHD/h8Rckuae1du/w/DNV\ndWkG3+hXXJ1kd2vt80lSVZclOZjkQ0nu3uR+AVhscgaAWZM1AAti0mdqPZRkV1W9PUmq6uwk70ny\nheH505PsSLJn5R+01p5P8nAG4QEA65EzAMyarAFYEJM+U+uTSU5O8pdV9VoGpdivtNY+O7x8R5KW\nwV8xVjs4vAwA1iNnAJg1WQOwICYttT6c5NIklyR5Isk7k3yqqva31u7a1E7uvS3ZdtLo2s4Lk527\nNnW1AAvt8T3J4w+Mrr38wnz2Mh2zy5lE1gBshKw5enIGYHKbyJlJS62bk/zH1tofDc9/o6remuT6\nJHclOZCkkmzP6F82tif5+rrXfPGVyWlnTrgdgCW3c9f4D8r7n0ruvGI++9m82eVMImsANkLWrPA7\nDcAsbCJnJn1PrROTvLZm7fWV62mtPZ1BCHx3N1V1cpLzM3jtOgCsR84AMGuyBmBBTPpMrc8luaGq\nnk3yjSTvSvLxJP951TG3Do/Zm2Rfkt1Jnk1yz6Z3C8CikzMAzJqsAVgQk5ZaV2XwDf22JD+YZH+S\n3xmuJUlaazdX1YlJ7khySpIvJXl/a+2VqewYgEUmZwCYNVkDsCAmKrVaa4eS/Lvhab3jbkxy44Z3\nBcBSkjMAzJqsAVgck76nFgAAAADMnVILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAA\ngO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlIL\nAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADo\njlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAA\nAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4o\ntQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAA\ngO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlILAAAAgO4otQAAAADojlIL\nAAAAgO4otQAAAADojlILAAAAgO5srVLr8T3z3sHWYh7jzGSUeYwzE9az95F572Dr8TUzyjxGmcc4\nM+FIPEZGmcco8xhnJqPMYyJbrNR6YN472FrMY5yZjDKPcWbCevb++bx3sPX4mhllHqPMY5yZcCQe\n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\n", "text/plain": [ - "" + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = IsingGrid(100, 100)\n", + "model.constant_init(0,3,3)\n", + "grid = np.zeros((model.height, model.width))\n", + "#model.linear_factors = model.gibbs_sampling(model.random_grid(0.5))[0]/100\n", + "plt.figure(figsize=(15,15))\n", + "\n", + "plt.subplot(331)\n", + "plt.imshow(model.linear_factors, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "mlist = model.meanfields(grid)\n", + "plt.subplot(332)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.loopybelief(max_iter=100)\n", + "plt.subplot(333)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation2)\n", + "mlist1 = model.meanfields(grid, max_iter=500)\n", + "plt.subplot(334)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation1)\n", + "mlist2 = model.meanfields(grid, max_iter=500)\n", + "plt.subplot(335)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation3)\n", + "mlist3 = model.meanfields(grid, max_iter=500)\n", + "plt.subplot(336)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation2)\n", + "model.loopybelief(max_iter=100)\n", + "plt.subplot(337)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation1)\n", + "model.loopybelief(max_iter=100)\n", + "plt.subplot(338)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation3)\n", + "model.loopybelief(max_iter=100)\n", + "plt.subplot(339)\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "#plt.savefig('images/')" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nn89DTQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" ] }, "metadata": {}, @@ -306,30 +531,113 @@ "source": [ "model = IsingGrid(100, 100)\n", "model.constant_init(0,1,1)\n", - "model.linear_factors = 10*model.gibbs_sampling(model.random_grid(0.5))[0]\n", - "plt.figure(figsize=(10,10))\n", - "plt.subplot(221)\n", - "plt.imshow(model.linear_factors, interpolation=\"nearest\", cmap=plt.get_cmap('Greys'), vmin=-1, vmax=1)\n", - "model.loopybelief()\n", - "plt.subplot(222)\n", - "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('Greys'), vmin=-1, vmax=1)\n", - "grid = np.zeros([model.height,model.width])\n", - "plt.subplot(223)\n", - "plt.imshow(grid, interpolation=\"nearest\", cmap=plt.get_cmap('Greys'), vmin=-1, vmax=1)\n", - "mlist = model.meanfields(grid,1000)\n", - "print(len(mlist))\n", - "plt.subplot(224)\n", - "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('Greys'), vmin=-1, vmax=1)" + "grid = np.zeros((model.height, model.width))\n", + "#model.linear_factors = model.gibbs_sampling(model.random_grid(0.5))[0]/100\n", + "\n", + "\n", + " \n", + "plt.figure(figsize=(15,10))\n", + "\n", + "plt.subplot(231)\n", + "plt.title('Initial grid')\n", + "plt.imshow(model.linear_factors, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "mlist = model.meanfields(grid)\n", + "plt.subplot(232)\n", + "plt.title('No observation')\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation1)\n", + "mlist1 = model.meanfields(grid, max_iter=500)\n", + "plt.subplot(233)\n", + "plt.title('Observation 1')\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation2)\n", + "mlist2 = model.meanfields(grid, max_iter=500)\n", + "plt.subplot(234)\n", + "plt.title('Observation 2')\n", + "\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation3)\n", + "mlist3 = model.meanfields(grid, max_iter=500)\n", + "plt.subplot(235)\n", + "plt.title('Observation 3')\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "model.observe(observation4)\n", + "mlist3 = model.meanfields(grid, max_iter=500)\n", + "plt.subplot(236)\n", + "plt.title('Observation 4')\n", + "plt.imshow(model.mean_parameters, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "\n", + "plt.savefig('images/meanfields.png')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": { - "collapsed": true + "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\niIhITv1/Qc84/IsX52UAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "pd.Series(mess_list).rolling(window=4).mean().plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5sAAAOcCAYAAADAbqWoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X+I5Xd97/HXO9lK1do094/dYHO1LZ1Ji1BLoD+lZLlJ\nueKC8S9RpJjKvf/stEotxST/dPNHoblQinC3f8htJVfkFmspsczShLCshYLUorY2JpkBIUbtbpCg\nYC9ctHzuH3NcdyczO2fmvM+cMzOPB5TOmTm78+HLhrfP8zmf860xRgAAAKDTbYteAAAAAMeP2AQA\nAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKDdTLFZVW+vqueraqOqPtK1KADgYMxmAJZFHfQ+m1V1\nW5KNJPcn+WaSzyd5zxjj+b7lAQDTMpsBWCaz7Gz+cpLNMcaLY4zvJfnLJA/2LAsAOACzGYClcWqG\nP/uTSV664fHXszXkblJVB9s6BYBdjDFq0WtYUmYzAAux02yeJTandvHixayvr+fcuXOH8euOLddw\ndq7h7FzDHq7jwa2trS16CRyCixcvLnoJU/Hf8uxcw9m5hj1cx4PbbTbPEpvfSPKmGx7fPfneq6yv\nr2djYyNJsrKyktXV1Rl+LQAnycbGRjY3Nxe9jKNi6tkMAAc17WyeJTY/n+Rnq+rNSf4tyXuSvHen\nJ/7gFQKvFACwX6urqze9SHnp0qUFrmbpTT2bAeCgpp3NB47NMcZ/VNXvJHk6Wx809OdjjOd2e/7K\nyspBfxUTruHsXMPZuYY9XEfmYb+zmdn5b3l2ruHsXMMermO/mc5sjjH+Lsk90zzXW2dn5xrOzjWc\nnWvYw3VkXvYzm5md/5Zn5xrOzjXs4Tr2m+XWJwAAALAjsQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7\nsQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkA\nAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7\nsQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkAAEA7sQkA\nAEC7U4teAABw+C5evLjoJQBwzNnZBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3Y\nBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAA\noJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3Y\nBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAAoJ3YBAAA\noJ3YBAAAoJ3YBAAAoN2esVlVd1fV5ap6tqq+XFUfnHz/zqp6uqpeqKqnquqO+S8XADCbATgKptnZ\n/H6SD48x3pLk15KsVdXPJXk4yTNjjHuSXE7yyPyWCQDcwGwGYOntGZtjjKtjjC9Nvv5ukueS3J3k\nwSRPTJ72RJJ3zWuRAMAPmc0AHAX7OrNZVT+V5BeTfC7JmTHGtWRr6CU53b04AODWzGYAltXUsVlV\nP5bk00k+NHkVdWx7yvbHAMAcmc0ALLNT0zypqk5la5h9Yozx5OTb16rqzBjjWlXdleTl3f78+vr6\n9a9XVlayuro6w5IBOEk2Njayubm56GUsHbMZgEWZdjZPFZtJ/iLJV8YYH73he59J8lCSx5O8P8mT\nO/y5JMm5c+em/DUAcLPV1dWbQujSpUsLXM1SMZsBWIhpZ/OesVlVb0vyviRfrqovZustOY9ma5B9\nqqo+kOTFJO+efdkAwF7MZgCOgj1jc4zxD0lu3+XHD/QuBwDYi9kMwFGwr0+jBQAAgGmITQAAANqJ\nTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAA\nANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJ\nTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAA\nANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJ\nTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAA\nANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJ\nTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAAANqJTQAA\nANqJTQAAANqJTQAAANqJTQAAANqJTQAAANpNHZtVdVtVfaGqPjN5fGdVPV1VL1TVU1V1x/yWCQBs\nZzYDsMz2s7P5oSRfueHxw0meGWPck+Rykkc6FwYA7MlsBmBpnZrmSVV1d5J3JPmjJB+efPvBJPdN\nvn4iyZVsDTlYSmtra4tewpF38eLFRS8BmDCbAVh20+5s/mmSP0gybvjemTHGtSQZY1xNcrp5bQDA\n7sxmAJbanjubVXUuybUxxpeq6uwtnjp2+8H6+vr1r1dWVrK6urqfNQJwgm1sbGRzc3PRy1gqZjMA\nizTtbJ7mbbRvS/LOqnpHktcmeUNVfSLJ1ao6M8a4VlV3JXl5t7/g3LlzUy4bAG62urp6UwhdunRp\ngatZGmYzAAsz7Wze8220Y4xHxxhvGmP8TJL3JLk8xvitJH+b5KHJ096f5MkZ1wwATMFsBuAomOU+\nm3+c5Der6oUk908eAwCLYzYDsDSm+jTaHxhjfDbJZydfv5LkgXksCgCYjtkMwLKaZWcTAAAAdiQ2\nAQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAA\naCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2\nAQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAA\naCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2\nAQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAA\naCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2\nAQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAA\naCc2AQAAaCc2AQAAaCc2AQAAaCc2AQAAaDdVbFbVHVX1V1X1XFU9W1W/UlV3VtXTVfVCVT1VVXfM\ne7EAwBazGYBlN+3O5keTXBpj/HyStyZ5PsnDSZ4ZY9yT5HKSR+azRABgB2YzAEvt1F5PqKofT/Ib\nY4yHkmSM8f0k36mqB5PcN3naE0muZGvIwVK6ePHiopcA0MJsBuAomGZn86eTfKuqPl5VX6iqj1XV\n65KcGWNcS5IxxtUkp+e5UADgOrMZgKU3TWyeSnJvkotjjHuT/Hu2XiUd2563/TEAMB9mMwBLb8+3\n0Sb5epKXxhj/NHn819kaaNeq6swY41pV3ZXk5d3+gvX19etfr6ysZHV1dYYlA3CSbGxsZHNzc9HL\nWDZmMwALM+1s3jM2JwPrpapaHWNsJLk/ybOT/3soyeNJ3p/kyd3+jnPnzk25bAC42erq6k0hdOnS\npQWuZjmYzQAs0rSzeZqdzST5YJJPVtWPJPlqkt9OcnuST1XVB5K8mOTdsywYANgXsxmApTZVbI4x\n/jnJL+3wowd6lwMATMNsBmDZTXufTQAAAJia2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd\n2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQA\nAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd\n2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQA\nAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd\n2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQA\nAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd\n2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKCd2AQAAKDdVLFZ\nVb9XVf9aVf9SVZ+sqtdU1Z1V9XRVvVBVT1XVHfNeLACwxWwGYNntGZtV9cYkv5vk3jHGLyQ5leS9\nSR5O8swY454kl5M8Ms+FAgBbzGYAjoJp30Z7e5LXV9WpJK9N8o0kDyZ5YvLzJ5K8q395AMAuzGYA\nltqesTnG+GaSP0nytWwNsu+MMZ5JcmaMcW3ynKtJTs9zoQDAFrMZgKNgmrfR/kS2Xil9c5I3ZutV\n1PclGdueuv0xADAHZjMAR8GpKZ7zQJKvjjFeSZKq+pskv57kWlWdGWNcq6q7kry821+wvr5+/euV\nlZWsrq7OtmoAToyNjY1sbm4uehnLxmwGYGGmnc3TxObXkvxqVf1okv+X5P4kn0/y3SQPJXk8yfuT\nPLnbX3Du3Lkpfg0AvNrq6upNIXTp0qUFrmZpmM0ALMy0s3nP2Bxj/GNVfTrJF5N8b/L/P5bkDUk+\nVVUfSPJiknfPvmwAYC9mMwBHwTQ7mxljPJbksW3ffiVbb+MBAA6Z2QzAspv21icAAAAwNbEJAABA\nO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJ\nAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABA\nO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJ\nAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABA\nO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJ\nAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABA\nO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJAABAO7EJ\nAABAO7EJAABAO7EJAABAu0OLzY2NjcP6VceWazg713B2rmEP15Fl4N/h7FzD2bmGs3MNe7iO/Q4t\nNjc3Nw/rVx1bruHsXMPZuYY9XEeWgX+Hs3MNZ+cazs417OE69vM2WgAAANqJTQAAANrVGGO+v6Bq\nvr8AgBNnjFGLXsNRZjYD0G2n2Tz32AQAAODk8TZaAAAA2olNAAAA2s09Nqvq7VX1fFVtVNVH5v37\njouquruqLlfVs1X15ar64OT7d1bV01X1QlU9VVV3LHqty6yqbquqL1TVZyaPXb99qqo7quqvquq5\nyb/HX3Ed96eqfq+q/rWq/qWqPllVr3ENWSSzef/M5T5m8+zM5tmZzYdjrrFZVbcl+Z9J/muStyR5\nb1X93Dx/5zHy/SQfHmO8JcmvJVmbXLuHkzwzxrgnyeUkjyxwjUfBh5J85YbHrt/+fTTJpTHGzyd5\na5Ln4zpOraremOR3k9w7xviFJKeSvDeuIQtiNh+YudzHbJ6d2TwDs/nwzHtn85eTbI4xXhxjfC/J\nXyZ5cM6/81gYY1wdY3xp8vV3kzyX5O5sXb8nJk97Ism7FrPC5VdVdyd5R5L/dcO3Xb99qKofT/Ib\nY4yPJ8kY4/tjjO/Eddyv25O8vqpOJXltkm/ENWRxzOYDMJd7mM2zM5vbmM2HYN6x+ZNJXrrh8dcn\n32Mfquqnkvxiks8lOTPGuJZsDb4kpxe3sqX3p0n+IMmNH7ns+u3PTyf5VlV9fPKWp49V1eviOk5t\njPHNJH+S5GvZGmTfGWM8E9eQxTGbZ2Quz8Rsnp3ZPCOz+fD4gKAlV1U/luTTST40eSV1+71q3Ltm\nB1V1Lsm1yavQt7ofn+t3a6eS3Jvk4hjj3iT/nq23mPh3OKWq+olsvVL65iRvzNarqO+LawhHkrl8\ncGZzG7N5Rmbz4Zl3bH4jyZtueHz35HtMYbKt/+kknxhjPDn59rWqOjP5+V1JXl7U+pbc25K8s6q+\nmuT/JPkvVfWJJFddv335epKXxhj/NHn819kacP4dTu+BJF8dY7wyxviPJH+T5NfjGrI4ZvMBmcsz\nM5t7mM2zM5sPybxj8/NJfraq3lxVr0nyniSfmfPvPE7+IslXxhgfveF7n0ny0OTr9yd5cvsfIhlj\nPDrGeNMY42ey9e/u8hjjt5L8bVy/qU3eSvJSVa1OvnV/kmfj3+F+fC3Jr1bVj1ZVZesafiWuIYtj\nNh+cuTwDs7mH2dzCbD4kNcZ8d4er6u3Z+sSs25L8+Rjjj+f6C4+Jqnpbkr9P8uVsbeGPJI8m+cck\nn0ryn5O8mOTdY4xvL2qdR0FV3Zfk98cY76yq/xTXb1+q6q3Z+iCHH0ny1SS/na1D9a7jlKrqD7P1\nP6y+l+SLSf5bkjfENWRBzOb9M5d7mc2zMZtnZzYfjrnHJgAAACePDwgCAACgndgEAACgndgEAACg\nndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgE\nAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACg\nndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgE\nAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACg\nndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgE\nAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACgndgEAACg\nndgEAACgndgEAACgndgEAACgndgEAACgndgEAACg3UyxWVVvr6rnq2qjqj7StSgA4GDMZgCWRY0x\nDvYHq25LspHk/iTfTPL5JO8ZYzzftzwAYFpmMwDLZJadzV9OsjnGeHGM8b0kf5nkwZ5lAQAHYDYD\nsDROzfBnfzLJSzc8/nq2htxNqupgW6cAsIsxRi16DUvKbAZgIXaazbPE5tQuXryY9fX1nDt3Lmtr\na4fxKwE4Ri5evHj9a3OkxxgjFy5cyIULF/Jnf/Zni17OkfWD/33DwbmGs3MNe7iOB7fbbJ4lNr+R\n5E03PL578r1XWV9fz8bGxgy/CoCTbH19fdFLOCqmns0XLlzIlStXcuHChXz729/O6urqoSwQgKNv\nY2Mjm5ubez5vltj8fJKfrao3J/m3JO9J8t6dnri+vn791dPtqrwTCoCb3erD68yNW5p6Np8+fTqv\nf/3rc/r06Tz22GM3/ezGnWQA2G51dfWmFykvXbq04/MOHJtjjP+oqt9J8nS2Pmjoz8cYz+32/LNn\nzx70VwEAU9jvbF5ZWTm0tR1XruHsXMPZuYY9XMd+M53ZHGP8XZJ7pnmu2ASA+dvPbPbW2dm5hrNz\nDWfnGvZwHfvNcusTAAAA2NGhfBrtrTgXAgCLtX0Wnz9//qbHPq0WgIOwswkAAEA7sQkAAEA7sQkA\nAEC7hZ/ZBACWy/Yzmmtrazc99nkLAEzDziYAAADtxCYAAADtxCYAAADtnNkEAG7JfTgBOAg7mwAA\nALQTmwAAALQTmwAAALRzZhMA2Bf34QRgGnY2AQAAaCc2AQAAaCc2AQAAaOfMJgAwE/fhBGAndjYB\n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\najicGvahjqd3pn04NzK3mc3V1dV5XQoAmIBsHk4Nh1PD4dSwD3Xsz2O0AAAAdKfZBAAAoLu57LM5\n0wsAsOvYZ3MY2QxAbxtl88ybTQAAAHYfj9ECAADQnWYTAACA7mbebFbVtVX1dFWtVNV3Zn29naKq\n9lTVQ1X1RFU9XlVfH59/R1X9oar+XlW/r6rzFz3Wrayqzqqqv1TVA+Nj9ZtSVZ1fVb+pqqfG38eP\nq+N0quobVfW3qnqsqn5ZVeeoIYskm6cnl/uRzcPJ5uFk83zMtNmsqrOS/CTJZ5JcmuSGqvrQLK+5\ng7yS5JuttUuTfCLJ8rh2303yYGvtg0keSvK9BY5xO7glyZNrjtVverclOdxa+3CSy5I8HXWcWFVd\nlORrSS5vrX0kydlJbogasiCyedPkcj+yeTjZPIBsnp9Zz2x+LMlqa+2Z1trJJL9O8rkZX3NHaK29\n0Fr76/jzy0meSrIno/rdNf6xu5J8fjEj3Pqqak+Szyb52ZrT6jeFqnpbkk+21u5MktbaK621l6KO\n03pDkrdU1dlJ3pTk+aghiyObN0Eu9yGbh5PN3cjmOZh1s/nuJMfWHD83PscUquq9ST6a5E9JLmit\nHU9GwZfkXYsb2Zb34yTfTrL2lcvqN533JflnVd05fuTpjqp6c9RxYq21fyT5UZJnMwqyl1prD0YN\nWRzZPJBcHkQ2DyebB5LN8+MFQVtcVb01yb1JbhnfSV2/V429azZQVfuTHB/fhT7dfnzqd3pnJ7k8\nyU9ba5cn+XdGj5j4Hk6oqt6e0Z3SS5JclNFd1C9GDWFbksubJ5u7kc0Dyeb5mXWz+XySi9cc7xmf\nYwLjaf17k9zdWrt/fPp4VV0w/vsLk7y4qPFtcVclua6qjib5VZJPV9XdSV5Qv6k8l+RYa+3P4+Pf\nZhRwvoeTuybJ0dbaidbaf5Pcl+TKqCGLI5s3SS4PJpv7kM3DyeY5mXWz+UiSD1TVJVV1TpIvJHlg\nxtfcSX6R5MnW2m1rzj2Q5Kbx5xuT3L/+H5G01m5trV3cWnt/Rt+7h1prX0ryu6jfxMaPkhyrqqXx\nqauTPBHfw2k8m+SKqjq3qiqjGj4ZNWRxZPPmyeUBZHMfsrkL2Twn1dpsZ4er6tqM3ph1VpKft9Z+\nMNML7hBVdVWSPyZ5PKMp/Jbk1iQPJ7knyXuSPJPk+tbavxY1zu2gqj6V5Futteuq6p1Rv6lU1WUZ\nvcjhjUmOJvlyRovq1XFCVfX9jP5jdTLJo0m+muS8qCELIpunJ5f7ks3DyObhZPN8zLzZBAAAYPfx\ngiAAAAC602wCAADQnWYTAACA7jSbAAAAdKfZBAAAoDvNJgAAAN1pNgEAAOhOswkAAEB3/wOjUcTv\ntv7W/wAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(16,16))\n", + "plt.subplot(221)\n", + "plt.imshow(observation1, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.subplot(222)\n", + "plt.imshow(observation2, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.subplot(223)\n", + "plt.imshow(observation3, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.subplot(224)\n", + "plt.imshow(observation4, interpolation=\"nearest\", cmap=plt.get_cmap('winter'), vmin=-1, vmax=1)\n", + "plt.savefig('images/observations.png')" + ] }, { "cell_type": "code", @@ -344,9 +652,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [conda root]", + "display_name": "Python [default]", "language": "python", - "name": "conda-root-py" + "name": "python3" }, "language_info": { "codemirror_mode": {