nrkno / brainfuck_programmer

Her ligger kode fra innovasjonsdagene i september 2021 hvor vi tenkte stort og prøvde å lage en algoritme som kunne programmere i Brainfuck.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Dokumenter

GitHub: https://github.com/nrkno/brainfuck_programmer

Referanser

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

Stikkord

Q-learning, -network, -table Bayesian Optimization Reinforcement learning Deep learning Deep Reinforcement Learning

Lærende algoritme

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.

Programmerende algoritme

Medsammensvorne

  • Emil Huster (DataHub, ex-anbefalingsteamet)
  • Eirik Sæther (anbefalingsteamet)

Beskrivelse av oppgaven

Kan en maskin lære å programmere i Brainfuck?

Vent litt… 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.

Tilbake til der vi var…

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? ./skjema.png

Arbeidsprosess

  • En interpreter for Brainfuck
  • En belønningsfunksjon
  • En funksjon for å avgjøre neste handling
  • En Deep Q-learning-modell
  • (Hjelpefunksjoner)

Interpreter

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)]

Hello world

brainfuck_hello = ("++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+"
                   "[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.----"
                   "--.--------.>>+.>++.")
print(interpret(brainfuck_hello))
('Hello World!\n', [0, 0, 72, 100, 87, 33, 10], 6)

Belønningssystem

  • 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

Belønningsfunksjon

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]

Utfordringer

  • 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.

Annerledes neste gang

  • Bruke mindre tid på å slåss mot feilmeldinge.
  • Jobbe i et system der koder, dokumenterer, og lager presentasjonen samtidig.

Takk for oppmerskomheten!

About

Her ligger kode fra innovasjonsdagene i september 2021 hvor vi tenkte stort og prøvde å lage en algoritme som kunne programmere i Brainfuck.


Languages

Language:PowerShell 44.1%Language:Python 37.3%Language:Shell 18.6%