\documentclass[a4paper,12pt]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{graphicx} %BIlder einbinden
\usepackage{amsmath} %erweiterte Mathe-Zeichen
\usepackage{amsfonts} %weitere fonts
\usepackage[utf8]{inputenc} %Umlaute & Co
\usepackage{hyperref} %Links
\usepackage{ifthen} %ifthenelse
\usepackage{enumerate}
\usepackage{listings}
\lstset{language=Python}
\usepackage{pgffor}
\usepackage{algpseudocode} %Pseudocode
\usepackage{dsfont} % schöne Zahlenräumezeichen
\usepackage{amssymb, amsthm} %noch stärker erweiterte Mathe-Zeichen
\usepackage{tikz} %TikZ ist kein Zeichenprogramm
\usetikzlibrary{trees,automata,arrows,shapes}
\pagestyle{empty}
\topmargin-50pt
\newcounter{aufgabe}
\def\tand{&}
\newcommand{\makeTableLine}[2][0]{%
\setcounter{aufgabe}{27}%TODO update
\whiledo{\value{aufgabe} < 30}%TODO update
{%
#2\tand\stepcounter{aufgabe}%
}
}
\newcommand{\aufgTable}[1]{
\def\spalten{\numexpr #1 + 1 \relax}
\begin{tabular}{|*{\spalten}{p{1cm}|}}
\makeTableLine[\spalten]{A\theaufgabe}$\Sigma$~~\\ \hline
\rule{0pt}{15pt}\makeTableLine[\spalten]{}\\
\end{tabular}
}
\def\header#1#2#3#4#5#6#7{\pagestyle{empty}
\begin{minipage}[t]{0.47\textwidth}
\begin{flushleft}
{\bf #4}\\
#5
\end{flushleft}
\end{minipage}
\begin{minipage}[t]{0.5\textwidth}
\begin{flushright}
#6 \vspace{0.5cm}\\
% Number of Columns Definition of Columns second empty line
% \begin{tabular}{|*{5}{C{1cm}|}}\hline A1&A2&A3&A4&$\Sigma$\\\hline&&&&\\\hline\end{tabular}\\\vspace*{0.1cm}
\aufgTable{#7}
\end{flushright}
\end{minipage}
\vspace{1cm}
\begin{center}
{\Large\bf Übungsblatt #1}
{(Abgabe #3)}
\end{center}
}
%counts the exercisenumber
\newcounter{n}
\setcounter{n}{26} %TODO update
%Kommando für Aufgaben
%\Aufgabe{AufgTitel}{Punktezahl}
\newcommand{\Aufgabe}[2]{\stepcounter{n}
\textbf{Aufgabe \arabic{n}: #1} (#2 Punkte)}
\begin{document}
%\header{BlattNr}{Tutor}{Abgabedatum}{Vorlesungsname}{Namen}{Semester}{Anzahl Aufgaben}
\header{10}{}{2015-07-07}{Evolutionäre Algorithmen}{
\textit{Jan-Peter Hohloch}\\ \textit{Maximus Mutschler}
}{SS 15}{3}%TODO update
\vspace{0.5cm}
\Aufgabe{1/5-Erfolgsregel (Theorie)}{5}
\begin{enumerate}[(a)]
\item Liegt die Sphäre (abhängig von $\sigma$) vollständig im Korridor, so ist die Erfolgswahrscheinlichkeit $0.5$. Für größere $\sigma$ wird die Erfolgswahrscheinlichkeit geringer, jedoch der mögliche Fortschritt größer.\\
Die geringere Erfolgswahrscheinlichkeit ist bedingt durch den kleineren Anteil des Korridors an der Sphären-Außenfläche.
\item Ist eine Erfolgswahrscheinlichkeit von $\frac{1}{5}$ optimal, so muss bei größerer Erfolgswahrscheinlichkeit $\sigma$ vergrößert werden (s.o.); bei zu kleiner Erfolgswahrscheinlichkeit umgekehrt. Dies ermöglicht größeren Fortschritt und damit schneller bessere Fitness ($\varphi$).
\item $w_e=0.2$, $b=1.5cm$\\
$2\pi\cdot r\cdot w_e= c$ Bogenlänge\\
$c=2r\cdot\sin^{-1}\left(\frac{s}{2r}\right)$\\
$\Rightarrow \pi\cdot w_e=\sin^{-1}\frac{s}{2r}\\
\Leftrightarrow \sin\left(\pi\cdot w_e\right)=\frac{s}{2r}\\
\Leftrightarrow r=\frac{s}{2\sin\left(w_e\pi\right)}\\
\Rightarrow r=\frac{3cm}{2\sin\left(0.2\pi\right)}\approx 2.552cm=\sigma_{opt}$
\end{enumerate}\pagebreak
\Aufgabe{1/5-Erfolgsregel (Praxis)}{11}\\
\foreach \x in {0.15,0.2,0.25,0.3,0.5,0.6}{
\includegraphics[width=0.33\textwidth]{figures/sigma\x .png}
\includegraphics[width=0.33\textwidth]{figures/we\x .png}
\includegraphics[width=0.33\textwidth]{figures/fitness\x .png}\\
}\\
\begin{lstlisting}
import numpy as np
import matplotlib.pyplot as plt
def ES(n,sigma,eval,term=lambda P,t:t>=100000,
kappa=0.82,zw=0.2,fit=lambda P:P[0],lb=-10,ub=10):
t=0
P=np.random.uniform(lb, ub, n)
succ=0
stats=[]
while not term(P,t):
Pm=P+np.random.normal(0,sigma,n)
if eval(P,Pm,t):
P=Pm
succ=succ+1
t=t+1
if (t % 100) == 0:
we=succ/100
stats.append([t,sigma,we,fit(P)])
if we < zw:
sigma=sigma*kappa
if we > zw:
sigma=sigma/kappa
succ=0
return stats
def minimizeAbs(P,Pm,t):
return np.sum(np.abs(P))>np.sum(np.abs(Pm))
def corridor(P,Pm,t,b=np.array([10,13,1,6,18,20,4,10,13,2])):
if (P[1]-Pm[1]) <= b[t//10000]:
return Pm[0]>P[0]
else:
return 0
stats=np.zeros((6,4,1000))
j=0
for zw in np.array([0.15,0.2,0.25,0.3,0.5,0.6]):
for i in np.arange(0,1000):
stats[j]=stats[j]
+np.transpose(ES(2,1,corridor,zw=zw,lb=0,ub=0))
stats[j]=stats[j]/1000
plt.plot(stats[j][0],stats[j][1],"rx")
plt.xlabel("t")
plt.ylabel("sigma")
plt.title("sigma over time, zw="+str(zw))
#plt.axis((0,100000,0,1e10))
plt.savefig("sigma"+str(zw)+".png")
plt.close()
plt.plot(stats[j][0],stats[j][2],"rx")
plt.xlabel("t")
plt.ylabel("we")
plt.title("we over time, zw="+str(zw))
plt.axis((0,100000,0,0.55))
plt.savefig("we"+str(zw)+".png")
plt.close()
plt.plot(stats[j][0],stats[j][3],"rx")
plt.xlabel("t")
plt.ylabel("fitness")
plt.title("fitness over time, zw="+str(zw))
plt.axis((0,100000,0,1e5))
plt.savefig("fitness"+str(zw)+".png")
plt.close()
j=j+1
np.save("stats.npy",stats)
\end{lstlisting}
\Aufgabe{Rekombination in ES}{4}
\begin{enumerate}[(a)]
\item $a_1'=(0.23,-0.92,-0.23,-0.85,0.21)$
\item $a_2'=((0.25,1.18,0.36,0.53,0.14)+(1.18,-0.88,-0.23,-0.85,0.14))/2\\=(0.715,0.15,0.065,-0.16,0.14)$
\item $a_3'=((0.25,-0.65,-0.31,-1.58,0.25)+(0.23,0.72,0.64,-0.85,0.25))/2\\=(0.24 , 0.035, 0.165, -1.215, 0.25)$
\item $a_4'=(0.25,1.18,0.67,0.47,0.195)$
\end{enumerate}
\end{document}