{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# TD2: Générateurs pseudo-aléatoires (RICM4, 2013)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "L'objectif de cette fiche est de présenter les méthodes principales de génération de nombres pseudo-aléatoires, de comprendre leurs limitations, d'apprendre à s'en méfier et de voir comment éventuellement les corriger...\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Générateurs à base de congruence" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "congruent_random <- function(n = 100, a=4, b=2, m=9, x1=1) {\n", " res = c(x1)\n", " for(i in 2:n) {\n", " res[i] = (a * res[i-1] + b) %% m\n", " }\n", " res\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Regardons les premières valeurs" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
    \n", "\t
  1. 1
  2. \n", "\t
  3. 6
  4. \n", "\t
  5. 8
  6. \n", "\t
  7. 7
  8. \n", "\t
  9. 3
  10. \n", "\t
  11. 5
  12. \n", "\t
  13. 4
  14. \n", "\t
  15. 0
  16. \n", "\t
  17. 2
  18. \n", "\t
  19. 1
  20. \n", "
\n" ], "text/latex": [ "\\begin{enumerate*}\n", "\\item 1\n", "\\item 6\n", "\\item 8\n", "\\item 7\n", "\\item 3\n", "\\item 5\n", "\\item 4\n", "\\item 0\n", "\\item 2\n", "\\item 1\n", "\\end{enumerate*}\n" ], "text/markdown": [ "1. 1\n", "2. 6\n", "3. 8\n", "4. 7\n", "5. 3\n", "6. 5\n", "7. 4\n", "8. 0\n", "9. 2\n", "10. 1\n", "\n", "\n" ], "text/plain": [ " [1] 1 6 8 7 3 5 4 0 2 1" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "congruent_random(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Regardons maintenant graphiquement ces valeurs" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAADAFBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w\ncHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OU\nlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWm\npqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4\nuLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnK\nysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc\n3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u\n7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////i\nsF19AAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3dCZhU1Znw8be6oWkb2URAkEUb\ng4i4RBEbJMRPMSC474i7BjSjMS6JUaPRkM3RSUzGMc7EBYMzSdRkcEaNCigTcde4Mm4RDC5g\n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", "text/plain": [ "Plot with title “Histogram of X”" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "graphical_check <- function(X) {\n", " par(mfrow=c(1,2))\n", " hist(X)\n", " plot(X[1:length(X)-1],X[2:length(X)])\n", "}\n", "graphical_check(congruent_random(100))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Évidemment, l'espace d'état est trop petit. Essayons avec d'autres paramètres." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAADAFBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w\ncHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OU\nlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWm\npqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4\nuLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnK\nysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc\n3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u\n7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////i\nsF19AAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2dCXwTRfvHnyS9aEspR4EWWk6x\nVECQqyCXgByVGwSRS174cygICt6+iOKBgjf64gGi4In6oq+AiAKKCqKCgqggAiKnIFAECpR2\n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\nAAAAAElFTkSuQmCC", "text/plain": [ "Plot with title “Histogram of X”" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "graphical_check(congruent_random(n=100,a=11,b=1,m=71))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cela parait mieux mais en s'intéressant à la corrélation et à la covariance entre $X_n$ et $X_{n+1}$, le fait que nos nombres ne sont pas indépendants les uns des autres est plus évident." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "0.0457750907128348" ], "text/latex": [ "0.0457750907128348" ], "text/markdown": [ "0.0457750907128348" ], "text/plain": [ "[1] 0.04577509" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "19.0913087436134" ], "text/latex": [ "19.0913087436134" ], "text/markdown": [ "19.0913087436134" ], "text/plain": [ "[1] 19.09131" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X <- congruent_random(n=1000,a=11,b=1,m=71)\n", "cor(X[1:length(X)-1],X[2:length(X)])\n", "cov(X[1:length(X)-1],X[2:length(X)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Il faut donc être suspicieux avec les générateurs de nombres alétaoires et leur faire subir plusieurs tests." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Générateurs à décalage de registres" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1] 4\n" ] }, { "data": { "text/html": [ "
    \n", "\t
  1. 1
  2. \n", "\t
  3. 0
  4. \n", "\t
  5. 1
  6. \n", "\t
  7. 0
  8. \n", "\t
  9. 0
  10. \n", "\t
  11. 0
  12. \n", "\t
  13. 1
  14. \n", "\t
  15. 0
  16. \n", "\t
  17. 1
  18. \n", "\t
  19. 0
  20. \n", "\t
  21. 0
  22. \n", "\t
  23. 0
  24. \n", "\t
  25. 1
  26. \n", "\t
  27. 0
  28. \n", "\t
  29. 1
  30. \n", "\t
  31. 0
  32. \n", "\t
  33. 0
  34. \n", "\t
  35. 0
  36. \n", "\t
  37. 1
  38. \n", "\t
  39. 0
  40. \n", "\t
  41. 1
  42. \n", "\t
  43. 0
  44. \n", "\t
  45. 0
  46. \n", "\t
  47. 0
  48. \n", "\t
  49. 1
  50. \n", "\t
  51. 0
  52. \n", "\t
  53. 1
  54. \n", "\t
  55. 0
  56. \n", "\t
  57. 0
  58. \n", "\t
  59. 0
  60. \n", "\t
  61. 1
  62. \n", "\t
  63. 0
  64. \n", "\t
  65. 1
  66. \n", "\t
  67. 0
  68. \n", "\t
  69. 0
  70. \n", "\t
  71. 0
  72. \n", "\t
  73. 1
  74. \n", "\t
  75. 0
  76. \n", "\t
  77. 1
  78. \n", "\t
  79. 0
  80. \n", "\t
  81. 0
  82. \n", "\t
  83. 0
  84. \n", "\t
  85. 1
  86. \n", "\t
  87. 0
  88. \n", "\t
  89. 1
  90. \n", "\t
  91. 0
  92. \n", "\t
  93. 0
  94. \n", "\t
  95. 0
  96. \n", "\t
  97. 1
  98. \n", "\t
  99. 0
  100. \n", "\t
  101. 1
  102. \n", "\t
  103. 0
  104. \n", "\t
  105. 0
  106. \n", "\t
  107. 0
  108. \n", "\t
  109. 1
  110. \n", "\t
  111. 0
  112. \n", "\t
  113. 1
  114. \n", "\t
  115. 0
  116. \n", "\t
  117. 0
  118. \n", "\t
  119. 0
  120. \n", "\t
  121. 1
  122. \n", "\t
  123. 0
  124. \n", "\t
  125. 1
  126. \n", "\t
  127. 0
  128. \n", "\t
  129. 0
  130. \n", "\t
  131. 0
  132. \n", "\t
  133. 1
  134. \n", "\t
  135. 0
  136. \n", "\t
  137. 1
  138. \n", "\t
  139. 0
  140. \n", "\t
  141. 0
  142. \n", "\t
  143. 0
  144. \n", "\t
  145. 1
  146. \n", "\t
  147. 0
  148. \n", "\t
  149. 1
  150. \n", "\t
  151. 0
  152. \n", "\t
  153. 0
  154. \n", "\t
  155. 0
  156. \n", "\t
  157. 1
  158. \n", "\t
  159. 0
  160. \n", "\t
  161. 1
  162. \n", "\t
  163. 0
  164. \n", "\t
  165. 0
  166. \n", "\t
  167. 0
  168. \n", "\t
  169. 1
  170. \n", "\t
  171. 0
  172. \n", "\t
  173. 1
  174. \n", "\t
  175. 0
  176. \n", "\t
  177. 0
  178. \n", "\t
  179. 0
  180. \n", "\t
  181. 1
  182. \n", "\t
  183. 0
  184. \n", "\t
  185. 1
  186. \n", "\t
  187. 0
  188. \n", "\t
  189. 0
  190. \n", "\t
  191. 0
  192. \n", "\t
  193. 1
  194. \n", "\t
  195. 0
  196. \n", "\t
  197. 1
  198. \n", "\t
  199. 0
  200. \n", "
\n" ], "text/latex": [ "\\begin{enumerate*}\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\end{enumerate*}\n" ], "text/markdown": [ "1. 1\n", "2. 0\n", "3. 1\n", "4. 0\n", "5. 0\n", "6. 0\n", "7. 1\n", "8. 0\n", "9. 1\n", "10. 0\n", "11. 0\n", "12. 0\n", "13. 1\n", "14. 0\n", "15. 1\n", "16. 0\n", "17. 0\n", "18. 0\n", "19. 1\n", "20. 0\n", "21. 1\n", "22. 0\n", "23. 0\n", "24. 0\n", "25. 1\n", "26. 0\n", "27. 1\n", "28. 0\n", "29. 0\n", "30. 0\n", "31. 1\n", "32. 0\n", "33. 1\n", "34. 0\n", "35. 0\n", "36. 0\n", "37. 1\n", "38. 0\n", "39. 1\n", "40. 0\n", "41. 0\n", "42. 0\n", "43. 1\n", "44. 0\n", "45. 1\n", "46. 0\n", "47. 0\n", "48. 0\n", "49. 1\n", "50. 0\n", "51. 1\n", "52. 0\n", "53. 0\n", "54. 0\n", "55. 1\n", "56. 0\n", "57. 1\n", "58. 0\n", "59. 0\n", "60. 0\n", "61. 1\n", "62. 0\n", "63. 1\n", "64. 0\n", "65. 0\n", "66. 0\n", "67. 1\n", "68. 0\n", "69. 1\n", "70. 0\n", "71. 0\n", "72. 0\n", "73. 1\n", "74. 0\n", "75. 1\n", "76. 0\n", "77. 0\n", "78. 0\n", "79. 1\n", "80. 0\n", "81. 1\n", "82. 0\n", "83. 0\n", "84. 0\n", "85. 1\n", "86. 0\n", "87. 1\n", "88. 0\n", "89. 0\n", "90. 0\n", "91. 1\n", "92. 0\n", "93. 1\n", "94. 0\n", "95. 0\n", "96. 0\n", "97. 1\n", "98. 0\n", "99. 1\n", "100. 0\n", "\n", "\n" ], "text/plain": [ " [1] 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1\n", " [38] 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0\n", " [75] 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[1] 4\n" ] }, { "data": { "text/html": [ "
    \n", "\t
  1. 1
  2. \n", "\t
  3. 0
  4. \n", "\t
  5. 0
  6. \n", "\t
  7. 1
  8. \n", "\t
  9. 1
  10. \n", "\t
  11. 1
  12. \n", "\t
  13. 1
  14. \n", "\t
  15. 0
  16. \n", "\t
  17. 0
  18. \n", "\t
  19. 1
  20. \n", "\t
  21. 1
  22. \n", "\t
  23. 1
  24. \n", "\t
  25. 1
  26. \n", "\t
  27. 0
  28. \n", "\t
  29. 0
  30. \n", "\t
  31. 1
  32. \n", "\t
  33. 1
  34. \n", "\t
  35. 1
  36. \n", "\t
  37. 1
  38. \n", "\t
  39. 0
  40. \n", "\t
  41. 0
  42. \n", "\t
  43. 1
  44. \n", "\t
  45. 1
  46. \n", "\t
  47. 1
  48. \n", "\t
  49. 1
  50. \n", "\t
  51. 0
  52. \n", "\t
  53. 0
  54. \n", "\t
  55. 1
  56. \n", "\t
  57. 1
  58. \n", "\t
  59. 1
  60. \n", "\t
  61. 1
  62. \n", "\t
  63. 0
  64. \n", "\t
  65. 0
  66. \n", "\t
  67. 1
  68. \n", "\t
  69. 1
  70. \n", "\t
  71. 1
  72. \n", "\t
  73. 1
  74. \n", "\t
  75. 0
  76. \n", "\t
  77. 0
  78. \n", "\t
  79. 1
  80. \n", "\t
  81. 1
  82. \n", "\t
  83. 1
  84. \n", "\t
  85. 1
  86. \n", "\t
  87. 0
  88. \n", "\t
  89. 0
  90. \n", "\t
  91. 1
  92. \n", "\t
  93. 1
  94. \n", "\t
  95. 1
  96. \n", "\t
  97. 1
  98. \n", "\t
  99. 0
  100. \n", "\t
  101. 0
  102. \n", "\t
  103. 1
  104. \n", "\t
  105. 1
  106. \n", "\t
  107. 1
  108. \n", "\t
  109. 1
  110. \n", "\t
  111. 0
  112. \n", "\t
  113. 0
  114. \n", "\t
  115. 1
  116. \n", "\t
  117. 1
  118. \n", "\t
  119. 1
  120. \n", "\t
  121. 1
  122. \n", "\t
  123. 0
  124. \n", "\t
  125. 0
  126. \n", "\t
  127. 1
  128. \n", "\t
  129. 1
  130. \n", "\t
  131. 1
  132. \n", "\t
  133. 1
  134. \n", "\t
  135. 0
  136. \n", "\t
  137. 0
  138. \n", "\t
  139. 1
  140. \n", "\t
  141. 1
  142. \n", "\t
  143. 1
  144. \n", "\t
  145. 1
  146. \n", "\t
  147. 0
  148. \n", "\t
  149. 0
  150. \n", "\t
  151. 1
  152. \n", "\t
  153. 1
  154. \n", "\t
  155. 1
  156. \n", "\t
  157. 1
  158. \n", "\t
  159. 0
  160. \n", "\t
  161. 0
  162. \n", "\t
  163. 1
  164. \n", "\t
  165. 1
  166. \n", "\t
  167. 1
  168. \n", "\t
  169. 1
  170. \n", "\t
  171. 0
  172. \n", "\t
  173. 0
  174. \n", "\t
  175. 1
  176. \n", "\t
  177. 1
  178. \n", "\t
  179. 1
  180. \n", "\t
  181. 1
  182. \n", "\t
  183. 0
  184. \n", "\t
  185. 0
  186. \n", "\t
  187. 1
  188. \n", "\t
  189. 1
  190. \n", "\t
  191. 1
  192. \n", "\t
  193. 1
  194. \n", "\t
  195. 0
  196. \n", "\t
  197. 0
  198. \n", "\t
  199. 1
  200. \n", "
\n" ], "text/latex": [ "\\begin{enumerate*}\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\end{enumerate*}\n" ], "text/markdown": [ "1. 1\n", "2. 0\n", "3. 0\n", "4. 1\n", "5. 1\n", "6. 1\n", "7. 1\n", "8. 0\n", "9. 0\n", "10. 1\n", "11. 1\n", "12. 1\n", "13. 1\n", "14. 0\n", "15. 0\n", "16. 1\n", "17. 1\n", "18. 1\n", "19. 1\n", "20. 0\n", "21. 0\n", "22. 1\n", "23. 1\n", "24. 1\n", "25. 1\n", "26. 0\n", "27. 0\n", "28. 1\n", "29. 1\n", "30. 1\n", "31. 1\n", "32. 0\n", "33. 0\n", "34. 1\n", "35. 1\n", "36. 1\n", "37. 1\n", "38. 0\n", "39. 0\n", "40. 1\n", "41. 1\n", "42. 1\n", "43. 1\n", "44. 0\n", "45. 0\n", "46. 1\n", "47. 1\n", "48. 1\n", "49. 1\n", "50. 0\n", "51. 0\n", "52. 1\n", "53. 1\n", "54. 1\n", "55. 1\n", "56. 0\n", "57. 0\n", "58. 1\n", "59. 1\n", "60. 1\n", "61. 1\n", "62. 0\n", "63. 0\n", "64. 1\n", "65. 1\n", "66. 1\n", "67. 1\n", "68. 0\n", "69. 0\n", "70. 1\n", "71. 1\n", "72. 1\n", "73. 1\n", "74. 0\n", "75. 0\n", "76. 1\n", "77. 1\n", "78. 1\n", "79. 1\n", "80. 0\n", "81. 0\n", "82. 1\n", "83. 1\n", "84. 1\n", "85. 1\n", "86. 0\n", "87. 0\n", "88. 1\n", "89. 1\n", "90. 1\n", "91. 1\n", "92. 0\n", "93. 0\n", "94. 1\n", "95. 1\n", "96. 1\n", "97. 1\n", "98. 0\n", "99. 0\n", "100. 1\n", "\n", "\n" ], "text/plain": [ " [1] 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1\n", " [38] 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0\n", " [75] 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X=xor_random <- function(n = 100, filter=c(1,0,1,0), seed=c(1,0,1,0)) {\n", " res = seed\n", " m = length(filter)\n", " print(m)\n", " for(i in (length(seed)):(n-1)) { # Yes, you need to put parenthesis around n-1 :(\n", " res[i+1] = sum(filter*(res[(i-m+1):i]))%%2 # Yes, you need to put parenthesis around i-m+1 :(\n", " }\n", " res\n", "}\n", "xor_random()\n", "xor_random(seed=c(1,0,0,1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ouh là, tout ceci n'a rien d'aléatoire. Il y a deux séquences entrelacées et la longueur du cycle est 8. Essayons avec d'autres paramètres." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1] 4\n" ] }, { "data": { "text/html": [ "
    \n", "\t
  1. 1
  2. \n", "\t
  3. 1
  4. \n", "\t
  5. 0
  6. \n", "\t
  7. 1
  8. \n", "\t
  9. 0
  10. \n", "\t
  11. 1
  12. \n", "\t
  13. 1
  14. \n", "\t
  15. 1
  16. \n", "\t
  17. 1
  18. \n", "\t
  19. 0
  20. \n", "\t
  21. 0
  22. \n", "\t
  23. 0
  24. \n", "\t
  25. 1
  26. \n", "\t
  27. 0
  28. \n", "\t
  29. 0
  30. \n", "\t
  31. 1
  32. \n", "\t
  33. 1
  34. \n", "\t
  35. 0
  36. \n", "\t
  37. 1
  38. \n", "\t
  39. 0
  40. \n", "\t
  41. 1
  42. \n", "\t
  43. 1
  44. \n", "\t
  45. 1
  46. \n", "\t
  47. 1
  48. \n", "\t
  49. 0
  50. \n", "\t
  51. 0
  52. \n", "\t
  53. 0
  54. \n", "\t
  55. 1
  56. \n", "\t
  57. 0
  58. \n", "\t
  59. 0
  60. \n", "\t
  61. 1
  62. \n", "\t
  63. 1
  64. \n", "\t
  65. 0
  66. \n", "\t
  67. 1
  68. \n", "\t
  69. 0
  70. \n", "\t
  71. 1
  72. \n", "\t
  73. 1
  74. \n", "\t
  75. 1
  76. \n", "\t
  77. 1
  78. \n", "\t
  79. 0
  80. \n", "\t
  81. 0
  82. \n", "\t
  83. 0
  84. \n", "\t
  85. 1
  86. \n", "\t
  87. 0
  88. \n", "\t
  89. 0
  90. \n", "\t
  91. 1
  92. \n", "\t
  93. 1
  94. \n", "\t
  95. 0
  96. \n", "\t
  97. 1
  98. \n", "\t
  99. 0
  100. \n", "\t
  101. 1
  102. \n", "\t
  103. 1
  104. \n", "\t
  105. 1
  106. \n", "\t
  107. 1
  108. \n", "\t
  109. 0
  110. \n", "\t
  111. 0
  112. \n", "\t
  113. 0
  114. \n", "\t
  115. 1
  116. \n", "\t
  117. 0
  118. \n", "\t
  119. 0
  120. \n", "\t
  121. 1
  122. \n", "\t
  123. 1
  124. \n", "\t
  125. 0
  126. \n", "\t
  127. 1
  128. \n", "\t
  129. 0
  130. \n", "\t
  131. 1
  132. \n", "\t
  133. 1
  134. \n", "\t
  135. 1
  136. \n", "\t
  137. 1
  138. \n", "\t
  139. 0
  140. \n", "\t
  141. 0
  142. \n", "\t
  143. 0
  144. \n", "\t
  145. 1
  146. \n", "\t
  147. 0
  148. \n", "\t
  149. 0
  150. \n", "\t
  151. 1
  152. \n", "\t
  153. 1
  154. \n", "\t
  155. 0
  156. \n", "\t
  157. 1
  158. \n", "\t
  159. 0
  160. \n", "\t
  161. 1
  162. \n", "\t
  163. 1
  164. \n", "\t
  165. 1
  166. \n", "\t
  167. 1
  168. \n", "\t
  169. 0
  170. \n", "\t
  171. 0
  172. \n", "\t
  173. 0
  174. \n", "\t
  175. 1
  176. \n", "\t
  177. 0
  178. \n", "\t
  179. 0
  180. \n", "\t
  181. 1
  182. \n", "\t
  183. 1
  184. \n", "\t
  185. 0
  186. \n", "\t
  187. 1
  188. \n", "\t
  189. 0
  190. \n", "\t
  191. 1
  192. \n", "\t
  193. 1
  194. \n", "\t
  195. 1
  196. \n", "\t
  197. 1
  198. \n", "\t
  199. 0
  200. \n", "
\n" ], "text/latex": [ "\\begin{enumerate*}\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 0\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 1\n", "\\item 0\n", "\\end{enumerate*}\n" ], "text/markdown": [ "1. 1\n", "2. 1\n", "3. 0\n", "4. 1\n", "5. 0\n", "6. 1\n", "7. 1\n", "8. 1\n", "9. 1\n", "10. 0\n", "11. 0\n", "12. 0\n", "13. 1\n", "14. 0\n", "15. 0\n", "16. 1\n", "17. 1\n", "18. 0\n", "19. 1\n", "20. 0\n", "21. 1\n", "22. 1\n", "23. 1\n", "24. 1\n", "25. 0\n", "26. 0\n", "27. 0\n", "28. 1\n", "29. 0\n", "30. 0\n", "31. 1\n", "32. 1\n", "33. 0\n", "34. 1\n", "35. 0\n", "36. 1\n", "37. 1\n", "38. 1\n", "39. 1\n", "40. 0\n", "41. 0\n", "42. 0\n", "43. 1\n", "44. 0\n", "45. 0\n", "46. 1\n", "47. 1\n", "48. 0\n", "49. 1\n", "50. 0\n", "51. 1\n", "52. 1\n", "53. 1\n", "54. 1\n", "55. 0\n", "56. 0\n", "57. 0\n", "58. 1\n", "59. 0\n", "60. 0\n", "61. 1\n", "62. 1\n", "63. 0\n", "64. 1\n", "65. 0\n", "66. 1\n", "67. 1\n", "68. 1\n", "69. 1\n", "70. 0\n", "71. 0\n", "72. 0\n", "73. 1\n", "74. 0\n", "75. 0\n", "76. 1\n", "77. 1\n", "78. 0\n", "79. 1\n", "80. 0\n", "81. 1\n", "82. 1\n", "83. 1\n", "84. 1\n", "85. 0\n", "86. 0\n", "87. 0\n", "88. 1\n", "89. 0\n", "90. 0\n", "91. 1\n", "92. 1\n", "93. 0\n", "94. 1\n", "95. 0\n", "96. 1\n", "97. 1\n", "98. 1\n", "99. 1\n", "100. 0\n", "\n", "\n" ], "text/plain": [ " [1] 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1\n", " [38] 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0\n", " [75] 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xor_random(filter=c(1,1,0,0),seed=c(1,1,0,1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cela semble mieux, la longueur du cycle est de 16. Est-ce satisfaisant pour autant ? À vous de voir... À vous de concevoir de nouveaux algorithmes de génération et d'imaginer des tests d'aléa.." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![Well, maybe those numbers are just intrinsically better!](http://imgs.xkcd.com/comics/ayn_random.png)" ] } ], "metadata": { "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "3.4.4" } }, "nbformat": 4, "nbformat_minor": 2 }