From 30c37862a8b4ecba2885a59ae34a32722fa241cd Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 23 Jul 2016 14:10:49 +0200 Subject: [PATCH] Add dyna-q algorithm --- source-code/Pseudocode/dyna-q/Makefile | 36 +++++++++++++++ source-code/Pseudocode/dyna-q/README.md | 3 ++ source-code/Pseudocode/dyna-q/dyna-q.png | Bin 0 -> 50440 bytes source-code/Pseudocode/dyna-q/dyna-q.tex | 56 +++++++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 source-code/Pseudocode/dyna-q/Makefile create mode 100644 source-code/Pseudocode/dyna-q/README.md create mode 100644 source-code/Pseudocode/dyna-q/dyna-q.png create mode 100644 source-code/Pseudocode/dyna-q/dyna-q.tex diff --git a/source-code/Pseudocode/dyna-q/Makefile b/source-code/Pseudocode/dyna-q/Makefile new file mode 100644 index 0000000..444baaf --- /dev/null +++ b/source-code/Pseudocode/dyna-q/Makefile @@ -0,0 +1,36 @@ +SOURCE = dyna-q +DELAY = 80 +DENSITY = 300 +WIDTH = 512 + +make: + pdflatex $(SOURCE).tex -output-format=pdf + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot + +gif: + pdfcrop $(SOURCE).pdf + convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif + make clean + +png: + make + make svg + inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png + +transparentGif: + convert $(SOURCE).pdf -transparent white result.gif + make clean + +svg: + make + #inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg + pdf2svg $(SOURCE).pdf $(SOURCE).svg + # Necessary, as pdf2svg does not always create valid svgs: + inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg + rsvg-convert -a -w $(WIDTH) -f svg $(SOURCE).svg -o $(SOURCE)2.svg + inkscape $(SOURCE)2.svg --export-plain-svg=$(SOURCE).svg + rm $(SOURCE)2.svg diff --git a/source-code/Pseudocode/dyna-q/README.md b/source-code/Pseudocode/dyna-q/README.md new file mode 100644 index 0000000..a538dc4 --- /dev/null +++ b/source-code/Pseudocode/dyna-q/README.md @@ -0,0 +1,3 @@ +Compiled example +---------------- +![Example](dyna-q.png) diff --git a/source-code/Pseudocode/dyna-q/dyna-q.png b/source-code/Pseudocode/dyna-q/dyna-q.png new file mode 100644 index 0000000000000000000000000000000000000000..f82f68c7a3b56a905b81b8b7d6d9ef10814f4bb3 GIT binary patch literal 50440 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 literal 0 HcmV?d00001 diff --git a/source-code/Pseudocode/dyna-q/dyna-q.tex b/source-code/Pseudocode/dyna-q/dyna-q.tex new file mode 100644 index 0000000..456d45e --- /dev/null +++ b/source-code/Pseudocode/dyna-q/dyna-q.tex @@ -0,0 +1,56 @@ +\documentclass{article} +\usepackage[pdftex,active,tightpage]{preview} +\setlength\PreviewBorder{2mm} + +\usepackage[utf8]{inputenc} % this is needed for umlauts +\usepackage[ngerman]{babel} % this is needed for umlauts +\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf +\usepackage{amssymb,amsmath,amsfonts} % nice math rendering +\usepackage{braket} % needed for \Set +\usepackage{caption} +\usepackage{algorithm} +\usepackage{xcolor} +\usepackage[noend]{algpseudocode} +\usepackage{mathtools,bm} +\DeclareMathOperator*{\argmax}{arg\,max} + +\DeclareCaptionFormat{myformat}{#3} +\captionsetup[algorithm]{format=myformat} + +\begin{document} +\begin{preview} + \begin{algorithm}[H] + \begin{algorithmic} + \Require + \Statex Sates $\mathcal{X} = \{1, \dots, n_x\}$ + \Statex Actions $\mathcal{A} = \{1, \dots, n_a\},\qquad A: \mathcal{X} \Rightarrow \mathcal{A}$ + \Statex Reward function $R: \mathcal{X} \times \mathcal{A} \rightarrow \mathbb{R}$ + \Statex Black-box (probabilistic) transition function $T: \mathcal{X} \times \mathcal{A} \rightarrow \mathcal{X}$ + \Statex Learning rate $\alpha \in [0, 1]$, typically $\alpha = 0.1$ + \Statex Discounting factor $\gamma \in [0, 1]$ + \Statex $\lambda \in [0, 1]$: Trade-off between TD and MC + \Procedure{QLearning}{$\mathcal{X}$, $A$, $R$, $T$, $\alpha$, $\gamma$, $\lambda$} + \State Initialize $Q: \mathcal{X} \times \mathcal{A} \rightarrow \mathbb{R}$ arbitrarily + \State Initialize $M: \mathcal{X} \times \mathcal{A} \rightarrow \mathcal{X} \times \mathbb{R}$ arbitrarily \Comment{Model} + \While{$Q$ is not converged} + \State Select $s \in \mathcal{X}$ arbitrarily + \State $a \gets \pi(s)$ + \State $r \gets R(s, a)$ + \State $s' \gets T(s, a)$ \Comment{Receive the new state} + \State $Q(s, a) \gets (1 - \alpha) \cdot Q(s, a) + \alpha \cdot (r + \gamma \cdot \max_{a'} Q(s, a'))$ + \State $M(s, a) \gets (s', r)$ + \For{$i$ in range $1, \dots, N$} + \State Select $(\tilde{s}, \tilde{a}) \in \mathcal{X} \times \mathcal{A}$ arbitrarily + \State $(s', r) \gets M(\tilde{x}, \tilde{a})$ + \State $Q(\tilde{s}, \tilde{a}) \gets (1 - \alpha) \cdot Q(\tilde{s}, \tilde{a}) + \alpha \cdot (r + \gamma \cdot \max_{a'} Q(s', a'))$ + \EndFor + \State Calculate $\pi$ based on $Q$ (e.g. $\varepsilon$-greedy) + \EndWhile + \Return $Q$ + \EndProcedure + \end{algorithmic} + \caption{Dyna-Q: Learn function $Q: \mathcal{X} \times \mathcal{A} \rightarrow \mathbb{R}$} + \label{alg:dyna-q} + \end{algorithm} +\end{preview} +\end{document}