{"id":5400,"date":"2025-03-28T18:46:38","date_gmt":"2025-03-28T18:46:38","guid":{"rendered":"https:\/\/www.urudata.com\/?p=5400"},"modified":"2026-01-08T16:57:35","modified_gmt":"2026-01-08T16:57:35","slug":"aprendizaje-por-refuerzo","status":"publish","type":"post","link":"https:\/\/urudata.com\/en\/aprendizaje-por-refuerzo\/","title":{"rendered":"Reinforcement Learning"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"introducci\u00f3n\">Introducci\u00f3n<\/h2>\n\n\n\n<p>Hace pocas semanas, la ACM anunci\u00f3 el premio Alan Turing 2024 (el equivalente al Nobel en el \u00e1mbito de las ciencias de la computaci\u00f3n) para&nbsp;<strong>Andrew Barto<\/strong>&nbsp;y&nbsp;<strong>Richard Sutton<\/strong>, por sus contribuciones al campo del aprendizaje por refuerzo (RL).<br>Recuerdo el a\u00f1o 2020, cuando empec\u00e9 a dar mis primeros pasos en RL, y compr\u00e9 mi copia del libro Reinforcement Learning de Sutton y Barto, que tengo en este momento en mi mesa de luz. Sigo pensando que es uno de los mejores libros de tecnolog\u00eda que he le\u00eddo por su abordaje, completitud y profundidad en un tema complejo y apasionante.<br>En este art\u00edculo, buscar\u00e9 introducir la teor\u00eda detr\u00e1s de RL y c\u00f3mo podemos producir agentes que interact\u00faen con su entorno y aprendan, errando, explorando y mejorando, intento a intento, hasta dominar la tarea objetivo y maximizar su recompensa.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" width=\"764\" height=\"430\" src=\"https:\/\/i0.wp.com\/emq.qck.mybluehost.me\/wp-content\/uploads\/2025\/03\/sb-1.jpg?resize=764%2C430&#038;ssl=1\" alt=\"\" class=\"wp-image-5390\" style=\"width:725px;height:auto\" srcset=\"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2025\/03\/sb-1.jpg?w=764&amp;ssl=1 764w, https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2025\/03\/sb-1.jpg?resize=300%2C169&amp;ssl=1 300w\" sizes=\"(max-width: 764px) 100vw, 764px\" \/><\/figure>\n\n\n\n<!DOCTYPE html>\n<html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\" lang=\"\" xml:lang=\"\">\n<head>\n  <meta charset=\"utf-8\" \/>\n  <meta name=\"generator\" content=\"pandoc\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\" \/>\n  <title>Aprendizaje por Refuerzo<\/title>\n  <style>\n    html {\n      color: #1a1a1a;\n      background-color: #fdfdfd;\n    }\n    \/* body {\n      margin: 0 auto;\n      max-width: 36em;\n      padding-left: 50px;\n      padding-right: 50px;\n      padding-top: 50px;\n      padding-bottom: 50px;\n      hyphens: auto;\n      overflow-wrap: break-word;\n      text-rendering: optimizeLegibility;\n      font-kerning: normal;\n    } *\/\n    \/* @media (max-width: 600px) {\n      body {\n        font-size: 0.9em;\n        padding: 12px;\n      }\n      h1 {\n        font-size: 1.8em;\n      }\n    } *\/\n    \/* @media print {\n      html {\n        background-color: white;\n      }\n      body {\n        background-color: transparent;\n        color: black;\n        font-size: 12pt;\n      }\n      p, h2, h3 {\n        orphans: 3;\n        widows: 3;\n      }\n      h2, h3, h4 {\n        page-break-after: avoid;\n      }\n    } *\/\n    p {\n      margin: 1em 0;\n    }\n    a {\n      color: #1a1a1a;\n    }\n    a:visited {\n      color: #1a1a1a;\n    }\n    \/* img {\n      max-width: 100%;\n    } *\/\n    svg {\n      height: auto;\n      max-width: 100%;\n    }\n    h1, h2, h3, h4, h5, h6 {\n      margin-top: 1.4em;\n    }\n    h5, h6 {\n      font-size: 1em;\n      font-style: italic;\n    }\n    h6 {\n      font-weight: normal;\n    }\n    ol, ul {\n      padding-left: 1.7em;\n      margin-top: 1em;\n    }\n    li > ol, li > ul {\n      margin-top: 0;\n    }\n    blockquote {\n      margin: 1em 0 1em 1.7em;\n      padding-left: 1em;\n      border-left: 2px solid #e6e6e6;\n      color: #606060;\n    }\n    code {\n      font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;\n      font-size: 85%;\n      margin: 0;\n      hyphens: manual;\n    }\n    pre {\n      margin: 1em 0;\n      overflow: auto;\n    }\n    pre code {\n      padding: 0;\n      overflow: visible;\n      overflow-wrap: normal;\n    }\n    .sourceCode {\n     background-color: transparent;\n     overflow: visible;\n    }\n    hr {\n      border: none;\n      border-top: 1px solid #1a1a1a;\n      height: 1px;\n      margin: 1em 0;\n    }\n    table {\n      margin: 1em 0;\n      border-collapse: collapse;\n      width: 100%;\n      overflow-x: auto;\n      display: block;\n      font-variant-numeric: lining-nums tabular-nums;\n    }\n    table caption {\n      margin-bottom: 0.75em;\n    }\n    tbody {\n      margin-top: 0.5em;\n      border-top: 1px solid #1a1a1a;\n      border-bottom: 1px solid #1a1a1a;\n    }\n    th {\n      border-top: 1px solid #1a1a1a;\n      padding: 0.25em 0.5em 0.25em 0.5em;\n    }\n    td {\n      padding: 0.125em 0.5em 0.25em 0.5em;\n    }\n    header {\n      margin-bottom: 4em;\n      text-align: center;\n    }\n    #TOC li {\n      list-style: none;\n    }\n    #TOC ul {\n      padding-left: 1.3em;\n    }\n    #TOC > ul {\n      padding-left: 0;\n    }\n    #TOC a:not(:hover) {\n      text-decoration: none;\n    }\n    code{white-space: pre-wrap;}\n    span.smallcaps{font-variant: small-caps;}\n    div.columns{display: flex; gap: min(4vw, 1.5em);}\n    div.column{flex: auto; overflow-x: auto;}\n    div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}\n    \/* The extra [class] is a hack that increases specificity enough to\n       override a similar rule in reveal.js *\/\n    ul.task-list[class]{list-style: none;}\n    ul.task-list li input[type=\"checkbox\"] {\n      font-size: inherit;\n      width: 0.8em;\n      margin: 0 0.8em 0.2em -1.6em;\n      vertical-align: middle;\n    }\n  <\/style>\n  <script\n  src=\"https:\/\/cdn.jsdelivr.net\/npm\/mathjax@3\/es5\/tex-chtml-full.js\"\n  type=\"text\/javascript\"><\/script>\n<\/head>\n<body>\n<!-- <header id=\"title-block-header\">\n<h1 class=\"title\">Aprendizaje por Refuerzo<\/h1>\n<\/header> -->\n<!-- <h2 id=\"introducci\u00f3n\">Introducci\u00f3n<\/h2>\n<p>Hace pocas semanas, la ACM anunci\u00f3 el premio Alan Turing 2024 (el\nequivalente al Nobel en el \u00e1mbito de las ciencias de la computaci\u00f3n)\npara <strong>Andrew Barto<\/strong> y <strong>Richard Sutton<\/strong>,\npor sus contribuciones al campo del aprendizaje por refuerzo (RL).<br \/>\nRecuerdo el a\u00f1o 2020, cuando empec\u00e9 a dar mis primeros pasos en RL, y\ncompr\u00e9 mi copia del libro Reinforcement Learning de Sutton y Barto, que\ntengo en este momento en mi mesa de luz. Sigo pensando que es uno de los\nmejores libros de tecnolog\u00eda que he le\u00eddo por su abordaje, completitud y\nprofundidad en un tema complejo y apasionante.<br \/>\nEn este art\u00edculo, buscar\u00e9 introducir la teor\u00eda detr\u00e1s de RL y c\u00f3mo\npodemos producir agentes que interact\u00faen con su entorno y aprendan,\nerrando, explorando y mejorando, intento a intento, hasta dominar la\ntarea objetivo y maximizar su recompensa.<\/p> -->\n\n<figure>\n<!-- <img decoding=\"async\" src=\"sb.jpg\" alt=\"\u201cSutton y Barto\u201d\" \/> -->\n<figcaption aria-hidden=\"true\">\u201cSutton y Barto\u201d<\/figcaption>\n<\/figure>\n<!-- <\/br> -->\n<h2 id=\"qu\u00e9-es-rl\">\u00bfQu\u00e9 es RL?<\/h2>\n<p>Dentro del campo de Machine Learning, se suelen dividir las tareas de\naprendizaje en tres tipos:<\/p>\n<ul>\n<li>Aprendizaje supervisado: Contamos con un conjunto de caracter\u00edsticas\n<span class=\"math inline\">\\(x\\)<\/span> y un objetivo <span\nclass=\"math inline\">\\(y\\)<\/span> y buscamos encontrar <span\nclass=\"math inline\">\\(f: y=f(x)\\)<\/span>. Por ejemplo, encontrar una\nfunci\u00f3n de clasificaci\u00f3n que identifique si una radiograf\u00eda de antebrazo\ncontiene o no una fractura.<\/li>\n<li>Aprendizaje no supervisado: No contamos con etiquetas <span\nclass=\"math inline\">\\(y\\)<\/span>, simplemente tenemos un conjunto de\ncaracter\u00edsticas <span class=\"math inline\">\\(x\\)<\/span> en nuestro set de\ndatos y buscamos explicarlo. Por ejemplo, encontrar clusters de clientes\ncon patrones de consumo similares.<\/li>\n<li>Aprendizaje por refuerzo: En este escenario, tenemos un agente\nautom\u00e1tico que interact\u00faa con su entorno por medio de acciones y recibe\nse\u00f1ales en base a su estado actual y la acci\u00f3n seleccionada. Estas\nse\u00f1ales son recompensas, que el agente busca maximizar. Por ejemplo,\ncontrolar la direcci\u00f3n, aceleraci\u00f3n y freno de un veh\u00edculo aut\u00f3nomo en\nuna autopista.<\/li>\n<\/ul>\n<p>En este art\u00edculo nos centraremos en el \u00faltimo tipo de aprendizaje,\nque modelaremos matem\u00e1ticamente para producir algoritmos que sean\ncapaces de aprender en base a las se\u00f1ales de refuerzo recibidas. RL\npresenta muchos desaf\u00edos particulares que tendremos que abordar, como la\ndemora de las se\u00f1ales de recompensa (en un partido de ajedrez reci\u00e9n en\nel \u00faltimo movimiento s\u00e9 si gan\u00e9, perd\u00ed o empat\u00e9), los ambientes\ncontinuos (un agente de trading autom\u00e1tico no opera por episodios que\nempiezan y terminan, sino que est\u00e1 continuamente interactuando), el\nbalance exploraci\u00f3n\/explotaci\u00f3n (si no exploro puedo estar eligiendo\nacciones sub\u00f3ptimas por no haber descubierto las mejores, pero si\nexploro demasiado sacrifico mi recompensa total) y el famoso \u201ccurse of\ndimensionality\u201d (a medida que crece el espacio dimensional, se necesita\nun crecimiento exponencial de los datos de entrenamiento para lograr\ncobertura).<\/p>\n<!-- <\/br> -->\n<h2 id=\"procesos-de-decisi\u00f3n-de-markov\">Procesos de decisi\u00f3n de\nMarkov<\/h2>\n<p>Comenzaremos por modelar las interacciones de nuestro agente con su\nentorno por medio de un proceso de decisi\u00f3n de Markov (MDP). Estos son\nprocesos estoc\u00e1sticos que cumplen con la propiedad Markoviana, es decir,\n<span class=\"math inline\">\\(P(s_{n} | s_{n-1}, a) = P(s_{n} |\ns_{n-1}\\ldots s_{0}, a)\\)<\/span>. En palabras, la probabilidad de estar\nen un estado, tomar una acci\u00f3n y llegar a un nuevo estado, depende\n\u00fanicamente del estado actual, y no de la historia de estados anteriores\nque visit\u00e9.<br \/>\nA priori la propiedad Markoviana puede parecer muy restrictiva, pero no\nlo es, es una simplificaci\u00f3n en el modelado matem\u00e1tico que puede\nreflejar los estados con los que trabajamos en nuestro entorno. En\nalgunos casos esto es evidente, por ejemplo, en el ajedrez la mejor\npr\u00f3xima jugada depende \u00fanicamente de la disposici\u00f3n actual del tablero,\nno importa el conjunto de estados anteriores por los que se pas\u00f3 para\nllegar a la configuraci\u00f3n actual. En otros casos esto es menos claro,\ncomo en un agente de trading, donde s\u00ed importa la evoluci\u00f3n de los\nvalores de los activos en el tiempo. Sin embargo, siempre podemos\ncodificar esta informaci\u00f3n en el estado, incluyendo por ejemplo\nindicadores t\u00e9cnicos, caracter\u00edsticas aprendidas en base a la historia,\n\u00a1o incluso en el caso m\u00e1s extremo una lista de los \u00faltimos cierres!<\/p>\n<p>Definiremos un MDP finito como un conjunto de estados posibles <span\nclass=\"math inline\">\\(S = {s_{1}\\ldots S_{n}}\\)<\/span>, acciones <span\nclass=\"math inline\">\\(A={a_{1}\\ldots a_{m}}\\)<\/span>, recompensas <span\nclass=\"math inline\">\\(R={r_{1}\\ldots r_{k}}\\)<\/span> y una funci\u00f3n de\nprobabilidad <span class=\"math inline\">\\(P(s&#39;, r | s, a)\\)<\/span>\nque describe la probabilidad de encontrarnos en el estado <span\nclass=\"math inline\">\\(s\\)<\/span>, tomar la acci\u00f3n <span\nclass=\"math inline\">\\(a\\)<\/span> y llegar al estado <span\nclass=\"math inline\">\\(s&#39;\\)<\/span> con recompensa <span\nclass=\"math inline\">\\(r\\)<\/span>. Por ley de probabilidad total, debemos\ntener, para todo <span class=\"math inline\">\\((s,a)\\)<\/span>, <span\nclass=\"math inline\">\\(\\sum\\limits_{s&#39;}\\sum\\limits_{r}P(s&#39;, r|s,\na) = 1\\)<\/span>.<\/p>\n<p>Al interactuar con su entorno, nuestro agente generar\u00e1 una secuencia\nde estados, acciones y recompensas de la siguiente forma: <span\nclass=\"math inline\">\\(s_{1}, a_{1}, r_{2}, s_{2}, a_{2}, r_{3}, s_{3},\na_{3}, r_{4}, \\ldots\\)<\/span>. Pero, \u00bfcu\u00e1l es nuestro objetivo?\n\u00bfMaximizar las recompensas inmediatas <span class=\"math inline\">\\(r_{2},\nr_{3}, r_{4}\\)<\/span>? Claramente no, deber\u00edamos buscar maximizar la\nganancia total futura del agente, que definiremos de la siguiente forma\nen el tiempo <span class=\"math inline\">\\(t\\)<\/span>: <span\nclass=\"math inline\">\\(G_{t} = r_{t+1} + r_{t+2}+\\ldots =\n\\sum\\limits_{i=t+1}^{\\infty}r_{i}\\)<\/span>.<\/p>\n<p>Esta definici\u00f3n de ganancia, sin embargo, genera un problema: al no\nfavorecer las ganancias obtenidas en el corto plazo sobre las de largo\nplazo, cuando nuestro agente trabaja en entornos continuos y no\nepis\u00f3dicos, podr\u00e1 continuar obteniendo recompensas infinitamente que a\ntiempos infinitos generar\u00e1n ganancias infinitas. Es decir, es lo mismo\npara nuestro trader ganar un <span class=\"math inline\">\\(0.1\\%\\)<\/span>\nanual que un <span class=\"math inline\">\\(10\\%\\)<\/span>, ya que tiene\ntiempo infinito para explotarlo. Una soluci\u00f3n muy astuta a este problema\nes introducir un factor geom\u00e9trico de descuento a nuestra ganancia, para\ntransformar una serie de suma infinita en un objetivo de explotaci\u00f3n\nfinito y maximizable. Recordemos la serie geom\u00e9trica: <span\nclass=\"math inline\">\\(\\sum\\limits_{i=0}^{\\infty}\\gamma^{i} =\n\\frac{1}{1-\\gamma}\\)<\/span> si <span\nclass=\"math inline\">\\(0\\leq\\gamma&lt;1\\)<\/span>. Llevando este factor de\ndescuento a nuestra definici\u00f3n de ganancia, tendremos <span\nclass=\"math inline\">\\(G_{t} = r_{t+1} + \\gamma r_{t+2} + \\gamma^2\nr_{t+3}+\\ldots =\n\\sum\\limits_{i=t+1}^{\\infty}\\gamma^{i-t-1}r_{i}\\)<\/span>.<\/p>\n<p>Otra identidad importante que usaremos m\u00e1s adelante y se desprende de\nla ecuaci\u00f3n anterior, es que <span class=\"math inline\">\\(G_{t} =\nr_{t+1}+\\gamma(r_{t+2} + \\gamma r_{t+3} + \\ldots) = r_{t+1} + \\gamma\nG_{t+1}\\)<\/span>.<\/p>\n<!-- <\/br> -->\n<h2 id=\"pol\u00edticas-y-funciones-de-valor\">Pol\u00edticas y funciones de\nvalor<\/h2>\n<p>En la secci\u00f3n anterior definimos un modelo matem\u00e1tico para nuestras\ninteracciones con el entorno, pero a\u00fan no definimos nuestro objetivo de\naprendizaje (ya estamos llegando). \u00bfQu\u00e9 es lo que necesitamos conseguir?\n\u00bfC\u00f3mo podemos distinguir un estado mejor de uno peor? \u00bfQu\u00e9 configuraci\u00f3n\nde tablero de ajedrez es mejor si presento dos configuraciones?\nClaramente la que me de mayor probabilidad de ganar. Esto es lo que\nformalizaremos ahora.<\/p>\n<p>Definiremos una pol\u00edtica como la probabilidad de tomar una acci\u00f3n si\nme encuentro en un estado. Es decir, <span\nclass=\"math inline\">\\(\\pi(a|s) = p(a|s)\\)<\/span>. Como vemos, definimos\nla pol\u00edtica de forma estoc\u00e1stica. Dado un estado, no siempre tengo que\ntomar la misma acci\u00f3n de forma determinista, seguramente me convenga\nhacerlo de forma probabil\u00edstica para maximizar mi ganancia total. Esto\nse vuelve evidente en teor\u00eda de juegos (quiz\u00e1s para un art\u00edculo futuro).\nPor el momento es f\u00e1cil pensarlo como un agente que siempre juega piedra\nvs uno que juega piedra, papel o tijera con un tercio de probabilidad en\ncada uno, \u00bfcu\u00e1l es el mejor agente en ese caso?<\/p>\n<p>Ahora que definimos nuestro objetivo de aprendizaje (una pol\u00edtica, ya\nveremos cu\u00e1l), podemos definir el valor de los estados y acciones que\npodamos tomar, dada esa pol\u00edtica. Es evidente que el valor de un estado\nno es absoluto, sino que depende de la pol\u00edtica que siga el agente, que\nle permitir\u00e1 capturar ese valor. Es decir, definimos el valor de un\nestado <span class=\"math inline\">\\(s\\)<\/span> como la ganancia total\nesperada que generar\u00e9 por estar en el estado <span\nclass=\"math inline\">\\(s\\)<\/span> y seguir la pol\u00edtica <span\nclass=\"math inline\">\\(\\pi\\)<\/span>.<\/p>\n<p><span class=\"math inline\">\\(V_{\\pi}(s) =\nE_{\\pi}[G_{t}|s]=\\sum\\limits_{a}p(a|s)\\sum\\limits_{s&#39;}\\sum\\limits_{r}P(s&#39;,r|s,a)(r\n+ \\gamma V_{\\pi}(s&#39;))\\)<\/span><\/p>\n<p>Es decir, considerar todas las acciones que puedo tomar desde <span\nclass=\"math inline\">\\(s\\)<\/span> con sus probabilidades para calcular la\nesperanza de ganancia percibida por tomarlas. Esta ganancia considera\ntodos los estados de destino y sus recompensas seg\u00fan la mec\u00e1nica del\nMDP, combinando la recompensa inmediata con el valor descontado del\nestado al que llego. Esta es una definici\u00f3n donde, de forma similar a\ncomo hicimos anteriormente con la ganancia, calculamos el valor actual\nen base al valor siguiente. Este tipo de definici\u00f3n es de programaci\u00f3n\ndin\u00e1mica y nos provee un conjunto de ecuaciones lineales (uno para cada\nestado) que pueden resolverse para encontrar V.<\/p>\n<p>De la misma manera que definimos el valor de un estado, podemos\ndefinir el valor de una acci\u00f3n dado un estado, com\u00fanmente conocido como\nel valor Q en RL. Esta definici\u00f3n se desprende de la ecuaci\u00f3n anterior,\nsimplemente reagrupando t\u00e9rminos.<\/p>\n<p><span class=\"math inline\">\\(Q_{\\pi}(s,a) = E_{\\pi}[G_{t}|s,a] =\n\\sum\\limits_{s&#39;}\\sum\\limits_{r}P(s&#39;, r|s, a)(r +\n\\gamma\\sum\\limits_{a&#39;}p(a&#39;|s&#39;)Q(s&#39;,a&#39;))\\)<\/span><\/p>\n<!-- <\/br> -->\n<h2 id=\"optimalidad\">Optimalidad<\/h2>\n<p>Las ecuaciones anteriores son conocidas como ecuaciones de Bellman, y\npermiten resolver un MDP. Esto puede realizarse tanto como sistema de\necuaciones lineales, como de forma num\u00e9rica, aproximando los valores con\nbuenos tiempos y garant\u00edas de convergencia.<\/p>\n<p>Por \u00faltimo, podemos definir la pol\u00edtica \u00f3ptima como la pol\u00edtica que\nmaximiza <span class=\"math inline\">\\(V(s)\\)<\/span> o <span\nclass=\"math inline\">\\(Q(s,a)\\)<\/span> para todos los estados y acciones.\nEsta pol\u00edtica se representa como <span\nclass=\"math inline\">\\(\\pi^{*}\\)<\/span> y sus valores asociados son <span\nclass=\"math inline\">\\(V^{*}(s)\\)<\/span> y <span\nclass=\"math inline\">\\(Q^{*}(s,a)\\)<\/span>. Es decir, <span\nclass=\"math inline\">\\(V^{*}(s)=\\max\\limits_{\\pi}V_{\\pi}(s)\\)<\/span>,\n<span\nclass=\"math inline\">\\(Q^{*}(s,a)=\\max\\limits_{\\pi}Q_{\\pi}(s,a)\\)<\/span>.<\/p>\n<p>Con estas definiciones, podemos definir las ecuaciones de optimalidad\nde Bellman como los valores generados por las mejores acciones, de la\nsiguiente manera.<\/p>\n<p><span class=\"math inline\">\\(V^{*}(s) =\n\\max\\limits_{a}\\sum\\limits_{s&#39;}\\sum\\limits_{r}P(s&#39;, r|s,a)(r +\n\\gamma V^{*}(s&#39;))\\)<\/span><\/p>\n<p><span class=\"math inline\">\\(Q^{*}(s,a) =\n\\sum\\limits_{s&#39;}\\sum\\limits_{r}P(s&#39;,r|s,a)(r +\n\\gamma\\max\\limits_{a&#39;}Q^{*}(s&#39;, a&#39;))\\)<\/span><\/p>\n<p>Las ecuaciones anteriores ya no corresponden a un sistema de\necuaciones lineales (incorporamos la funci\u00f3n no lineal max). Sin\nembargo, quienes hayan trabajado en problemas de optimizaci\u00f3n saben que\npueden ser resueltas con t\u00e9cnicas de programaci\u00f3n lineal. Otro enfoque\nmucho m\u00e1s frecuente, es usar t\u00e9cnicas iterativas para resolver las\necuaciones optimales de Bellman, dado que los tiempos de los algoritmos\nde programaci\u00f3n lineal se degradan con la cantidad de restricciones\n(estados posibles en nuestro caso). Las t\u00e9cnicas iterativas buscan\nresolver las ecuaciones de Bellman aplic\u00e1ndolas sucesivamente para\naproximar y mejorar pol\u00edticas hasta llegar al \u00f3ptimo, o aproximar\ndirectamente la funci\u00f3n de valor para luego determina la pol\u00edtica\n\u00f3ptima. Estas t\u00e9cnicas cuentan con garant\u00edas de convergencia, son muy\nsimples de implementar (ya hicimos el trabajo duro de derivar la\necuaci\u00f3n, ahora es solo aplicarla) y suelen converger en buenos\ntiempos.<\/p>\n<p>Entonces, \u00bfya terminamos? Para nada. Resolver las ecuaciones de\nBellman asume un requisito muy exigente, que rara vez ocurre en los\nproblemas de RL que se presentan en la pr\u00e1ctica: conocer la din\u00e1mica del\nMDP, es decir, la distribuci\u00f3n de probabilidad P. Hasta ahora todo lo\nque hemos visto son t\u00e9cnicas de planificaci\u00f3n que conocen las din\u00e1micas\ndel entorno y optimizan las acciones a tomar. Pero no hemos entrado en\nel mundo del aprendizaje. Un agente realmente aprende cuando no conoce\nlas din\u00e1micas del entorno y debe explorarlo. De esta forma, a partir de\nla interacci\u00f3n, genera la experiencia necesaria para poder encontrar la\npol\u00edtica \u00f3ptima.<\/p>\n<p>En las siguientes secciones pasaremos de problemas de planificaci\u00f3n a\naprendizaje, y derivaremos uno de los algoritmos m\u00e1s importantes de\nRL.<\/p>\n<!-- <\/br> -->\n<h2 id=\"explorando-un-ambiente-desconocido\">Explorando un ambiente\ndesconocido<\/h2>\n<p>Cuando nos enfrentamos a un problema de RL, habitualmente no\nconocemos las din\u00e1micas del entorno con el que interactuamos. Por lo\ntanto, es necesario explorar para aprender este comportamiento al mismo\ntiempo que buscamos la pol\u00edtica \u00f3ptima. Pero, \u00bfc\u00f3mo lo hacemos? \u00bfhasta\nqu\u00e9 punto debemos elegir acciones exploratorias y hasta d\u00f3nde debemos\nexplotar el conocimiento que ya generamos? \u00bfc\u00f3mo afecta un exceso de\nexploraci\u00f3n nuestra convergencia, y la posibilidad de capturar los\nverdaderos valores de cada estado?<\/p>\n<p>Estas preguntas se resolver\u00edan con algoritmos GLIE (greedy in the\nlimit with infinite exploration), es decir, t\u00e9cnicas de exploraci\u00f3n que\nexploren todos los pares estado-acci\u00f3n infinitamente, pero converjan a\nlas acciones \u00f3ptimas en el l\u00edmite. El algoritmo GLIE m\u00e1s utilizado en\naprendizaje por refuerzo es <span\nclass=\"math inline\">\\(\\epsilon\\)<\/span>-greedy, que plantea, con\nprobabilidad peque\u00f1a <span class=\"math inline\">\\(\\epsilon\\)<\/span>,\ntomar una acci\u00f3n aleatoria, y con probabilidad <span\nclass=\"math inline\">\\(1-\\epsilon\\)<\/span>, elegir la acci\u00f3n \u00f3ptima. Si\nhacemos decaer <span class=\"math inline\">\\(\\epsilon\\)<\/span> a medida\nque avanza la cantidad de episodios, logramos los objetivos mencionados\nanteriormente. Es muy habitual utilizar esta t\u00e9cnica en algoritmos de\nRL, decayendo <span class=\"math inline\">\\(\\epsilon\\)<\/span> lentamente\nhasta llegar a un valor m\u00ednimo de exploraci\u00f3n y mantenerlo, dado que en\nla pr\u00e1ctica no contamos con un n\u00famero infinito de episodios para\nexplorar.<\/p>\n<!-- <\/br> -->\n<h2 id=\"aprendizaje-por-diferencias-temporales\">Aprendizaje por\ndiferencias temporales<\/h2>\n<p>Ahora que definimos c\u00f3mo explorar, y qu\u00e9 objetivo vamos a perseguir,\npasaremos a formular el aprendizaje generado a partir de nuestras\ninteracciones con el entorno de forma iterativa (al igual que hicimos en\nlos algoritmos de planificaci\u00f3n con las ecuaciones de Bellman). Para\nello, construiremos una tabla de valores <span\nclass=\"math inline\">\\(Q(s,a)\\)<\/span> para los pares estado-acci\u00f3n,\ninicializada de forma arbitraria (a excepci\u00f3n de los estados\nterminales), y la actualizaremos en base a las observaciones que\nrealizamos de nuestras interacciones con el entorno de la siguiente\nforma:<\/p>\n<p><span class=\"math inline\">\\(Q(s_{t},a_{t}) \\leftarrow\n(1-\\alpha)Q(s_{t},a_{t}) + \\alpha G_{t} = Q(s_{t}, a_{t}) + \\alpha[G_{t}\n&#8211; Q(s_{t}, a_{t})]\\)<\/span><\/p>\n<p>En este caso, <span class=\"math inline\">\\(\\alpha\\)<\/span>, nuestro\nratio de aprendizaje, promedia las ganancias obtenidas en los pares\nestado-acci\u00f3n observados con las observaciones anteriores. Esta ecuaci\u00f3n\nsimplemente muestra c\u00f3mo recorrer los estados e ir reflejando las\nganancias obtenidas en un promedio computado paso a paso. Es importante\nhacerlo de esta forma porque se trata de un ambiente estoc\u00e1stico, la\nmisma acci\u00f3n tomada en un estado puede traer resultados muy diferentes\nen dos momentos separados. Seg\u00fan la teor\u00eda de aproximaci\u00f3n estoc\u00e1stica,\n<span class=\"math inline\">\\(\\alpha\\)<\/span> debe proveer ciertas\ngarant\u00edas para garantizar la convergencia que no exploraremos ahora,\npero en la pr\u00e1ctica suele bastar con definir un <span\nclass=\"math inline\">\\(\\alpha\\)<\/span> peque\u00f1o y una programaci\u00f3n de\nca\u00edda del valor a medida que avanza su entrenamiento para obtener buenos\nresultados.<\/p>\n<p>El t\u00e9rmino que complejiza la ecuaci\u00f3n anterior es <span\nclass=\"math inline\">\\(G_{t}\\)<\/span>, porque requiere que en cada paso\nrealice la actualizaci\u00f3n de la tabla de valores en base a la ganancia\nfutura que voy a obtener en el episodio (\u00a1o al infinito para problemas\ncontinuos!). Esto demorar\u00eda mucho el aprendizaje, que debe esperar a\nfinalizar episodios completos para comenzar a realizar las\nacutalizaciones de valores. Para resolver este problema, Sutton propuso\nen un famoso paper del a\u00f1o 1988 los m\u00e9todos de aprendizaje por\ndiferencias temporales (TD-learning). B\u00e1sicamente el aprendizaje por\ndiferencias temporales actualiza las nuevas estimaciones en base a las\naproximaciones del siguiente paso (o los <span\nclass=\"math inline\">\\(n\\)<\/span> siguientes pasos), lo que se conoce en\nRL como bootstrapping. A nivel de la ecuaci\u00f3n, la modificaci\u00f3n es\nsencilla, y Sutton demostr\u00f3 que, si bien es una estimaci\u00f3n que tiene un\nsesgo sobre el objetivo que se busca predecir, en el infinito converge\nal valor correcto.<\/p>\n<p><span class=\"math inline\">\\(Q(s_{t},a_{t}) \\leftarrow Q(s_{t}, a_{t})\n+ \\alpha[r_{t+1} + \\gamma\\max\\limits_{a} Q(s_{t+1}, a) &#8211; Q(s_{t},\na_{t})]\\)<\/span><\/p>\n<p>Y ah\u00ed lo tenemos, esa es la ecuaci\u00f3n de aprendizaje por diferencias\ntemporales que usa la inforamci\u00f3n obtenida del Q siguiente para estimar\nel valor del Q actual. Luego de derivada, parece simple, y es la piedra\nfundamental de los algoritmos m\u00e1s complejos de RL que se han\ndesarrollado posteriormente, como el DQN que pudo vencer a Lee Sedol en\nuna partida de Go con AlphaGo.<\/p>\n<!-- <\/br> -->\n<h2 id=\"q-learning\">Q-learning<\/h2>\n<p>Por \u00faltimo, nos falta \u00fanicamente mostrar el algoritmo Q-learning, que\nes quiz\u00e1s el m\u00e1s famoso de RL y ser\u00e1 muy simple de implementar en base a\ntodo lo que hemos definido hasta ahora. Este algoritmo de aprendizaje\nfue propuesto por Watkins en 1989 y permite resolver problemas de\naprendizaje por refuerzo donde trabajamos con conjuntos finitos de\nestados y acciones. A continuaci\u00f3n listamos el pseudoc\u00f3digo de\nQ-learning con exploraci\u00f3n <span\nclass=\"math inline\">\\(\\epsilon\\)<\/span>-greedy.<\/p>\n<blockquote>\n<p>Inicializar Q(s,a) arbitrariamente excepto estados terminales, donde\nser\u00e1 0.<br \/>\n\u00a0\u00a0\u00a0\u00a0Para cada episodio:<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Comenzar en estado de inicio <span class=\"math inline\">\\(s =\ns_{0}\\)<\/span><br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Hasta completar el episodio:<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Elegir la acci\u00f3n a usando <span\nclass=\"math inline\">\\(\\epsilon\\)<\/span>-greedy sobre Q<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Tomar acci\u00f3n a, observar r y s\u2019<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"math inline\">\\(Q(s,a) = Q(s,a) + \\alpha(r +\n\\gamma\\max\\limits_{a}Q(s&#39;, a) &#8211; Q(s,a))\\)<\/span><br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0s = s\u2019<\/p>\n<\/blockquote>\n<p>En no m\u00e1s de diez l\u00edneas de c\u00f3digo, tenemos la implementaci\u00f3n de un\nalgoritmo gen\u00e9rico y muy elegante, que nos permite aprender cualquier\nMDP, siempre que sea finito, sin requerir conocer las din\u00e1micas internas\ndel proceso de decisi\u00f3n.<\/p>\n<p>En la pr\u00e1ctica, los problemas de RL suelen manejar estados con\nvalores continuos (ej: precios) o cardinalidad muy elevada por la\ncantidad de dimensiones. Esto suele hacer inviable aplicar Q-learning\ntal cual lo definimos a estos problemas, en su lugar aplicando otras\nt\u00e9cnicas como aproximadores de funciones (ej: redes neuronales que\naproximan la funci\u00f3n Q) o t\u00e9cnicas de optimizaci\u00f3n directamente sobre\nlas pol\u00edticas, sin usar las funciones de valor. Es interesante observar\nel primer caso, donde modificaciones en la implementaci\u00f3n del algoritmo\npermiten generalizar a problemas de conjuntos de estados continuos,\nobteniendo resultados excelentes. Pero eso ser\u00e1 material para un post\nfuturo, donde podremos implementar DQN sobre un problema continuo. De\nmomento, recomiendo ver el documental de Alpha Go, que est\u00e1 basado en\ntodo lo que vimos en este post, y para profundizar en RL, los videos de\nDavid Silver en Youtube, pero sobre todo, el libro Reinforcement\nLearning de Sutton y Barto, que no tiene desperdicio y fue lo que me\ninspir\u00f3 a escribir este art\u00edculo.<\/p>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Hace pocas semanas, la ACM anunci\u00f3 el premio Alan Turing 2024 (el equivalente al Nobel en el \u00e1mbito de las ciencias de la computaci\u00f3n) para&nbsp;Andrew Barto&nbsp;y&nbsp;Richard Sutton, por sus contribuciones al campo del aprendizaje por refuerzo (RL).Recuerdo el a\u00f1o 2020, cuando empec\u00e9 a dar mis primeros pasos en RL, y compr\u00e9 mi copia del [&hellip;]<\/p>\n","protected":false},"author":18,"featured_media":5395,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"nf_dc_page":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[21],"tags":[],"class_list":["post-5400","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-urudata"],"acf":{"bajada":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Urudata &gt; Aprendizaje por Refuerzo<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/urudata.com\/en\/aprendizaje-por-refuerzo\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Urudata &gt; Aprendizaje por Refuerzo\" \/>\n<meta property=\"og:description\" content=\"Introducci\u00f3n Hace pocas semanas, la ACM anunci\u00f3 el premio Alan Turing 2024 (el equivalente al Nobel en el \u00e1mbito de las ciencias de la computaci\u00f3n) para&nbsp;Andrew Barto&nbsp;y&nbsp;Richard Sutton, por sus contribuciones al campo del aprendizaje por refuerzo (RL).Recuerdo el a\u00f1o 2020, cuando empec\u00e9 a dar mis primeros pasos en RL, y compr\u00e9 mi copia del [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/urudata.com\/en\/aprendizaje-por-refuerzo\/\" \/>\n<meta property=\"og:site_name\" content=\"Urudata\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/urudatasa\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-28T18:46:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-08T16:57:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2025\/03\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1030\" \/>\n\t<meta property=\"og:image:height\" content=\"580\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ignacio Cattivelli\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ignacio Cattivelli\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/\"},\"author\":{\"name\":\"Ignacio Cattivelli\",\"@id\":\"https:\\\/\\\/urudata.com\\\/#\\\/schema\\\/person\\\/486f019b38ae703f4a1b1702698b157c\"},\"headline\":\"Aprendizaje por Refuerzo\",\"datePublished\":\"2025-03-28T18:46:38+00:00\",\"dateModified\":\"2026-01-08T16:57:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/\"},\"wordCount\":3104,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/urudata.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/urudata.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1\",\"articleSection\":[\"Urudata\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/\",\"url\":\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/\",\"name\":\"Urudata > Aprendizaje por Refuerzo\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/urudata.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/urudata.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1\",\"datePublished\":\"2025-03-28T18:46:38+00:00\",\"dateModified\":\"2026-01-08T16:57:35+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/urudata.com\\\/aprendizaje-por-refuerzo\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/urudata.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/urudata.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1\",\"width\":1030,\"height\":580,\"caption\":\"portada de articulo\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/urudata.com\\\/#website\",\"url\":\"https:\\\/\\\/urudata.com\\\/\",\"name\":\"Urudata\",\"description\":\"Integramos soluciones innovadoras\",\"publisher\":{\"@id\":\"https:\\\/\\\/urudata.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/urudata.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/urudata.com\\\/#organization\",\"name\":\"Urudata\",\"url\":\"https:\\\/\\\/urudata.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/urudata.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/urudata.com\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/logoUrudata.png?fit=512%2C123&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/urudata.com\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/logoUrudata.png?fit=512%2C123&ssl=1\",\"width\":512,\"height\":123,\"caption\":\"Urudata\"},\"image\":{\"@id\":\"https:\\\/\\\/urudata.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/urudatasa\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/urudata.com\\\/#\\\/schema\\\/person\\\/486f019b38ae703f4a1b1702698b157c\",\"name\":\"Ignacio Cattivelli\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/77439521a4038776621f4f3aeb22018cfb48584baf065b59337a36af9ca0ee1a?s=96&d=simple_local_avatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/77439521a4038776621f4f3aeb22018cfb48584baf065b59337a36af9ca0ee1a?s=96&d=simple_local_avatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/77439521a4038776621f4f3aeb22018cfb48584baf065b59337a36af9ca0ee1a?s=96&d=simple_local_avatar&r=g\",\"caption\":\"Ignacio Cattivelli\"},\"description\":\"Director de Ingenieria\",\"url\":\"https:\\\/\\\/urudata.com\\\/en\\\/author\\\/ignaciocattivelli\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Urudata > Aprendizaje por Refuerzo","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/urudata.com\/en\/aprendizaje-por-refuerzo\/","og_locale":"en_US","og_type":"article","og_title":"Urudata > Aprendizaje por Refuerzo","og_description":"Introducci\u00f3n Hace pocas semanas, la ACM anunci\u00f3 el premio Alan Turing 2024 (el equivalente al Nobel en el \u00e1mbito de las ciencias de la computaci\u00f3n) para&nbsp;Andrew Barto&nbsp;y&nbsp;Richard Sutton, por sus contribuciones al campo del aprendizaje por refuerzo (RL).Recuerdo el a\u00f1o 2020, cuando empec\u00e9 a dar mis primeros pasos en RL, y compr\u00e9 mi copia del [&hellip;]","og_url":"https:\/\/urudata.com\/en\/aprendizaje-por-refuerzo\/","og_site_name":"Urudata","article_publisher":"https:\/\/www.facebook.com\/urudatasa","article_published_time":"2025-03-28T18:46:38+00:00","article_modified_time":"2026-01-08T16:57:35+00:00","og_image":[{"width":1030,"height":580,"url":"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2025\/03\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1","type":"image\/jpeg"}],"author":"Ignacio Cattivelli","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ignacio Cattivelli","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/urudata.com\/aprendizaje-por-refuerzo\/#article","isPartOf":{"@id":"https:\/\/urudata.com\/aprendizaje-por-refuerzo\/"},"author":{"name":"Ignacio Cattivelli","@id":"https:\/\/urudata.com\/#\/schema\/person\/486f019b38ae703f4a1b1702698b157c"},"headline":"Aprendizaje por Refuerzo","datePublished":"2025-03-28T18:46:38+00:00","dateModified":"2026-01-08T16:57:35+00:00","mainEntityOfPage":{"@id":"https:\/\/urudata.com\/aprendizaje-por-refuerzo\/"},"wordCount":3104,"commentCount":0,"publisher":{"@id":"https:\/\/urudata.com\/#organization"},"image":{"@id":"https:\/\/urudata.com\/aprendizaje-por-refuerzo\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2025\/03\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1","articleSection":["Urudata"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/urudata.com\/aprendizaje-por-refuerzo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/urudata.com\/aprendizaje-por-refuerzo\/","url":"https:\/\/urudata.com\/aprendizaje-por-refuerzo\/","name":"Urudata > Aprendizaje por Refuerzo","isPartOf":{"@id":"https:\/\/urudata.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/urudata.com\/aprendizaje-por-refuerzo\/#primaryimage"},"image":{"@id":"https:\/\/urudata.com\/aprendizaje-por-refuerzo\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2025\/03\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1","datePublished":"2025-03-28T18:46:38+00:00","dateModified":"2026-01-08T16:57:35+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/urudata.com\/aprendizaje-por-refuerzo\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/urudata.com\/aprendizaje-por-refuerzo\/#primaryimage","url":"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2025\/03\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1","contentUrl":"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2025\/03\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1","width":1030,"height":580,"caption":"portada de articulo"},{"@type":"WebSite","@id":"https:\/\/urudata.com\/#website","url":"https:\/\/urudata.com\/","name":"Urudata","description":"Integramos soluciones innovadoras","publisher":{"@id":"https:\/\/urudata.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/urudata.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/urudata.com\/#organization","name":"Urudata","url":"https:\/\/urudata.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/urudata.com\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2023\/05\/logoUrudata.png?fit=512%2C123&ssl=1","contentUrl":"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2023\/05\/logoUrudata.png?fit=512%2C123&ssl=1","width":512,"height":123,"caption":"Urudata"},"image":{"@id":"https:\/\/urudata.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/urudatasa"]},{"@type":"Person","@id":"https:\/\/urudata.com\/#\/schema\/person\/486f019b38ae703f4a1b1702698b157c","name":"Ignacio Cattivelli","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/77439521a4038776621f4f3aeb22018cfb48584baf065b59337a36af9ca0ee1a?s=96&d=simple_local_avatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/77439521a4038776621f4f3aeb22018cfb48584baf065b59337a36af9ca0ee1a?s=96&d=simple_local_avatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/77439521a4038776621f4f3aeb22018cfb48584baf065b59337a36af9ca0ee1a?s=96&d=simple_local_avatar&r=g","caption":"Ignacio Cattivelli"},"description":"Director of Engineering","url":"https:\/\/urudata.com\/en\/author\/ignaciocattivelli\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/urudata.com\/wp-content\/uploads\/2025\/03\/WhatsApp-Image-2025-03-28-at-15.31.08.jpeg?fit=1030%2C580&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/posts\/5400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/comments?post=5400"}],"version-history":[{"count":11,"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/posts\/5400\/revisions"}],"predecessor-version":[{"id":5879,"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/posts\/5400\/revisions\/5879"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/media\/5395"}],"wp:attachment":[{"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/media?parent=5400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/categories?post=5400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/urudata.com\/en\/wp-json\/wp\/v2\/tags?post=5400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}