GitHub: https://github.com/nrkno/brainfuck_programmer
GitHub-side Artikkel Forskningsartikkel Artikkelserie om reinforcement learning på Freecodecamp Deep Reinforcement Learning Artikkel på towardsdatascience.com om å lære maskiner å spille spill. paddel, artikkel
Q-learning, -network, -table Bayesian Optimization Reinforcement learning Deep learning Deep Reinforcement Learning
Algoritmen skal skal kunne lære av å systematisk utforske hvilke kodestrenger som leder til hvilke resultater. Systematisk utforskning oppnår den ved å starte med korte kodestrenger som det gjøres små endringer på. Ved å undersøke forskjellene mellom kodestrengene og resultatene som kommer ut av endringene, skal algoritmen lære hva operasjonene i kodestrengene gjør.
- Emil Huster (DataHub, ex-anbefalingsteamet)
- Eirik Sæther (anbefalingsteamet)
Kan en maskin lære å programmere i Brainfuck?
- Esoterisk programmeringsspråk utviklet av Urban Müller i 1993.
- Svært minimalistisk med sine åtte operasjoner
+
og-
endrer verdien i en minnecelle<
og>
flytter pekeren til forrige og neste minnecelle[
og]
for å lage løkker, litt forenklet.
og ~,~ skriver ut og leser inn data til/fra terminalen
- Les mer om Brainfuck på Wikipedia.
Vel, maskiner kan lære å spille spill.
Bare se på Googles DeepMind-prosjekt der de ved hjelp av Deep Q-Learning har lært maskiner å spille gamle Atari-spill
Hva om programmeringen kan settes opp som et spill?
- En interpreter for Brainfuck
- En belønningsfunksjon
- En funksjon for å avgjøre neste handling
- En Deep Q-learning-modell
- (Hjelpefunksjoner)
from interpreter import interpret
brainfuck_H = ("++++++++++++"
"++++++++++++"
"++++++++++++"
"++++++++++++"
"++++++++++++"
"++++++++++++" ".")
brainfuck_e = ("++++++++++++++++++++"
"++++++++++++++++++++"
"++++++++++++++++++++"
"++++++++++++++++++++"
"+++++++++++++++++++++" ".")
brainfuck_i = "++++" + brainfuck_e
brainfuck_letters = [brainfuck_H, brainfuck_e, brainfuck_i]
print([interpret(letter) for letter in brainfuck_letters])
[('H', [72], 0), ('e', [101], 0), ('i', [105], 0)]
brainfuck_hello = ("++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+"
"[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.----"
"--.--------.>>+.>++.")
print(interpret(brainfuck_hello))
('Hello World!\n', [0, 0, 72, 100, 87, 33, 10], 6)
- 1 poeng for hvert tegn som skrives ut opp til lengden av målet.
- 1 poeng for hver gang riktig tegn skrives ut.
- 1 poeng for riktig tegn i riktig posisjon
- -0,1 poeng ganger antall operasjoner.
- Merk: maks poeng for å få riktig ord er 3 ganger lengden på ordet.
- For eksempel: Hvis målet er “Hei”, så gir
- ”” -> 0 poeng
- “q” -> 1 poeng
- “e” -> 2 poeng
- “H” -> 3 poeng
- “Hqi” -> 6 poeng
from agent import calculate_reward
results = ["", "H", "Hw", "Hwaaaaaa", "Hwaa wrl"]
target = "Hello world"
print([calculate_reward("", res, target) for res in results])
[0.0, 3.0, 5.0, 11.0, 14.0]
- Sette opp infrastrukturen (python, jupyter, keras, tensorflow).
- Sette seg inn i keras.
- Finne ut av detaljene som artikler om praktiske implementasjoner av Q-Learning overser.
- Modellbygging
- Hvilken informasjon skal inneholdes i tilstanden?
- Hvordan skal kodestrengen mates inn som en del av tilstanden?
- Etc.
- Bruke mindre tid på å slåss mot feilmeldinge.
- Jobbe i et system der koder, dokumenterer, og lager presentasjonen samtidig.