Para comparar el rendimiento de estos algoritmos de Multi-Arm Bandit, podemos usar simulaciones para realizar experimentos. Podemos simular el juego creando múltiples máquinas tragamonedas con diferentes probabilidades de ganar y probando cómo funciona cada algoritmo. Podemos medir la recompensa total obtenida por cada algoritmo en un determinado número de jugadas.
El siguiente código de Python simula un juego Multi-Arm Bandit con 5 máquinas tragamonedas con diferentes probabilidades de ganar y ejecuta 1000 jugadas para cada algoritmo:
n_arms = 5
probabilities = [0.1, 0.3, 0.5, 0.7, 0.9]def play_slot_machine(probability):
if random.random() < probability:
return 1
else:
return 0
def run_experiment(algo, n_plays):
total_reward = 0
for i in range(n_plays):
arm = algo.select_arm()
reward = play_slot_machine(probabilities[arm])
total_reward += reward
algo.update(arm, reward)
#print(arm)
return total_reward
También te puede interesarRevisión de Amazon Transformación de datos (código) Parte 2n_plays = 1000
n_experiments = 100
epsilons = [0.1, 0.2, 0.3]
c_values = [1, 2, 3]
algos = [EpsilonGreedy(epsilon, n_arms) for epsilon in epsilons]
algo_names = ['Epsilon-Greedy (epsilon={})'.format(epsilon) for epsilon in epsilons]
algos.extend([UCB(c, n_arms) for c in c_values])
algo_names.extend(['UCB (c={})'.format(c) for c in c_values])
algos.extend([ThompsonSampling(n_arms)])
algo_names.extend(['Thompson Sampling'])
También te puede interesarTítulo del libro: Sentinel-1 PyGMTSAR (Python InSAR): una guía paso a paso para todos. Capítulo 3.results = []
for algo, name in zip(algos, algo_names):
#print(algo, name)
total_reward = 0
for i in range(n_experiments):
reward = run_experiment(algo, n_plays)
total_reward += reward
average_reward = total_reward / n_experiments
#print(algo.counts)
results.append((name, average_reward))
El resultado de la simulación muestra la recompensa promedio obtenida por cada algoritmo en 100 experimentos con 1000 jugadas cada uno:
Según los resultados de la simulación, podemos ver que el algoritmo Thompson Sampling funciona mejor y obtiene la recompensa promedio más alta. El algoritmo UCB también funciona bien, pero no tan bien como Thompson Sampling. El algoritmo Epsilon-Greedy funciona peor, con recompensas promedio más bajas para valores más pequeños de épsilon.
Los algoritmos de Multi-Arm Bandit son útiles para tomar decisiones en situaciones en las que existe incertidumbre sobre el resultado de diferentes opciones. Estos algoritmos equilibran la exploración de nuevas opciones con la explotación de opciones conocidas para optimizar las recompensas.
También te puede interesarTF-IDF: liberando el poder de la extracción de características de textoEl algoritmo Epsilon-Greedy es un algoritmo simple que equilibra la exploración y la explotación seleccionando la opción más conocida con probabilidad 1-epsilon y explorando con probabilidad épsilon.
El algoritmo UCB equilibra la exploración y la explotación seleccionando la opción con el límite de confianza superior más alto, que tiene en cuenta tanto la recompensa media como la incertidumbre de la estimación.
El algoritmo de muestreo de Thompson modela las recompensas desconocidas de cada opción como una distribución de probabilidad y selecciona la opción con la recompensa esperada más alta en función de la distribución.
En las simulaciones de un juego Multi-Arm Bandit con diferentes probabilidades de ganar, el algoritmo Thompson Sampling se desempeñó mejor, seguido del algoritmo UCB. El algoritmo Epsilon-Greedy funcionó peor, especialmente para valores pequeños de epsilon.
También te puede interesarExplorando los contrastes: ChatGPT vs. Microsoft 365 Copilot: revelando diferencias clave