118 lines
4.1 KiB
R
118 lines
4.1 KiB
R
#####
|
|
# nBandits: Anzahl der Arme am Banditen
|
|
# eps: Explorationswahrscheinlichkeit
|
|
# plays: Anzahl der Versuche
|
|
#
|
|
# Simuliert das n-armige Banditenproblem mit epsilon-greedy-Strategie.
|
|
# Gibt die Belohnung für jedes Spiel zurück.
|
|
#####
|
|
epsBandits<-function(nBandits = 10, eps = .1, plays) {
|
|
# Erzeugt Zufallsfunktionen mit unterschiedlichem Mittelwert
|
|
bandits <- rnorm(nBandits)
|
|
|
|
tries <- list() # Speichert die Ergebnisse am jeweiligen Automaten
|
|
expected <- rep(0, length(bandits)) # Zwischengespeicherter Erwartungswert
|
|
reward <- numeric(plays) # Ergebnisse aller Durchläufe
|
|
|
|
for (i in seq_along(bandits)) {
|
|
tries[i] <- list(NULL)
|
|
}
|
|
|
|
# Es wird der Automat mit dem höchsten Erwartungswert gewählt
|
|
# oder zufällig (gleichverteilt) einer der Automaten.
|
|
# Anschließend wird der Erwartungswert für den gewählten Automaten
|
|
# aktualisiert.
|
|
for (i in seq_len(plays)) {
|
|
if (runif(1) < eps) {
|
|
pick <- sample.int(nBandits, 1)
|
|
} else {
|
|
pick <- which.max(expected)
|
|
}
|
|
|
|
reward[i] <- rnorm(1, mean = bandits[pick])
|
|
tries[[pick]] <- c(tries[[pick]], reward[i])
|
|
expected[pick] <- mean(tries[[pick]]) # Einladung zum Optimieren
|
|
}
|
|
return(reward)
|
|
}
|
|
|
|
#####
|
|
# nBandits: Anzahl der Arme am Banditen
|
|
# eps: Explorationswahrscheinlichkeit
|
|
# plays: Anzahl der Versuche
|
|
#
|
|
# Simuliert das n-armige Banditenproblem mit epsilon-greedy-Strategie.
|
|
# Am Start wird jeder Arm einmal ausprobiert.
|
|
# Gibt die Belohnung für jedes Spiel zurück.
|
|
#####
|
|
epsBanditsPlayFirst<-function(nBandits = 10, eps = .1, plays) {
|
|
# Erzeugt Zufallsfunktionen mit unterschiedlichem Mittelwert
|
|
bandits <- rnorm(nBandits)
|
|
|
|
tries <- list() # Speichert die Ergebnisse am jeweiligen Automaten
|
|
expected <- rep(0, length(bandits)) # Zwischengespeicherter Erwartungswert
|
|
reward <- numeric(plays) # Ergebnisse aller Durchläufe
|
|
|
|
# Alle Automaten werden ausprobiert
|
|
for (i in seq_along(bandits)) {
|
|
expected[i] <- rnorm(1, mean = bandits[i])
|
|
tries[i] <- expected[i]
|
|
reward[i] <- expected[i]
|
|
}
|
|
|
|
# Es wird der Automat mit dem höchsten Erwartungswert gewählt
|
|
# oder zufällig (gleichverteilt) einer der Automaten.
|
|
# Anschließend wird der Erwartungswert für den gewählten Automaten
|
|
# aktualisiert.
|
|
for (i in seq((nBandits+1),plays)) {
|
|
if (runif(1) < eps) {
|
|
pick <- sample.int(nBandits, 1)
|
|
} else {
|
|
pick <- which.max(expected)
|
|
}
|
|
|
|
reward[i] <- rnorm(1, mean = bandits[pick])
|
|
tries[[pick]] <- c(tries[[pick]], reward[i])
|
|
expected[pick] <- mean(tries[[pick]]) # Einladung zum Optimieren
|
|
}
|
|
return(reward)
|
|
}
|
|
|
|
#####
|
|
# nBandits: Anzahl der Arme am Banditen
|
|
# init: Anfänglicher Erwartungswert für alle Arme
|
|
# plays: Anzahl der Versuche
|
|
#
|
|
# Simuliert das n-armige Banditenproblem mit optimistischer Strategie.
|
|
# Gibt die Belohnung für jedes Spiel zurück.
|
|
#####
|
|
optimisticBandits<-function(nBandits = 10, init = 5, plays) {
|
|
# Erzeugt Zufallsfunktionen mit unterschiedlichem Mittelwert
|
|
bandits <- rnorm(nBandits)
|
|
|
|
tries <- list() # Speichert die Ergebnisse am jeweiligen Automaten
|
|
expected <- rep(init, length(bandits)) # Zwischengespeicherter Erwartungswert
|
|
reward <- numeric(plays) # Ergebnisse aller Durchläufe
|
|
|
|
for (i in seq_along(bandits)) {
|
|
tries[i] <- list(init)
|
|
}
|
|
|
|
# Es wird der Automat mit dem höchsten Erwartungswert gewählt
|
|
# oder zufällig (gleichverteilt) einer der Automaten.
|
|
# Anschließend wird der Erwartungswert für den gewählten Automaten
|
|
# aktualisiert.
|
|
for (i in seq_len(plays)) {
|
|
pick <- which.max(expected)
|
|
|
|
reward[i] <- rnorm(1, mean = bandits[pick])
|
|
tries[[pick]] <- c(tries[[pick]], reward[i])
|
|
expected[pick] <- mean(tries[[pick]]) # Einladung zum Optimieren
|
|
}
|
|
return(reward)
|
|
}
|
|
|
|
# plays <- 1000
|
|
# reward01eps <- epsBandits(plays = plays, eps = 0.1)
|
|
# reward0eps <- epsBanditsPlayFirst(plays = plays, eps = 0)
|
|
# rewardOpt <- optimisticBandits(plays = plays, init = 5)
|