1 | %
|
---|
2 | % $Id: report.tex 571 2008-04-20 17:31:04Z rick $
|
---|
3 | %
|
---|
4 |
|
---|
5 | \documentclass[12pt,a4paper]{article}
|
---|
6 |
|
---|
7 | \usepackage{listings}
|
---|
8 |
|
---|
9 | \frenchspacing
|
---|
10 | \usepackage[english,dutch]{babel}
|
---|
11 | \selectlanguage{dutch}
|
---|
12 | \usepackage{graphicx}
|
---|
13 | \usepackage{url}
|
---|
14 | \usepackage{multicol}
|
---|
15 | \usepackage{fancybox}
|
---|
16 | \usepackage{amssymb,amsmath}
|
---|
17 | \usepackage{float}
|
---|
18 | \usepackage{color}
|
---|
19 | \usepackage{subfig}
|
---|
20 | \floatstyle{ruled}
|
---|
21 | \newfloat{result}{thp}{lop}
|
---|
22 | \floatname{result}{Result}
|
---|
23 |
|
---|
24 | \input{highlight.sty}
|
---|
25 |
|
---|
26 | \title{The low-autocorrelation problem\\
|
---|
27 | \large{Practical Assignments Natural Computing, 2009}}
|
---|
28 | \author{Rick van der Zwet\\
|
---|
29 | \texttt{<hvdzwet@liacs.nl>}}
|
---|
30 | \date{\today}
|
---|
31 |
|
---|
32 |
|
---|
33 | \begin{document}
|
---|
34 | \newcommand{\wekacmd}[1]{\begin{quote}\small{\texttt{#1}}\end{quote}}
|
---|
35 | \newcommand{\unixcmd}[1]{\begin{quote}\small{\texttt{#1}}\end{quote}}
|
---|
36 |
|
---|
37 |
|
---|
38 | \maketitle
|
---|
39 |
|
---|
40 | \section{Introduction}
|
---|
41 | The report is focused on the so-called \emph{low-autocorrelation problem of
|
---|
42 | binary sequences}, is subject to actual research and is of big interest for
|
---|
43 | industrial applications, e.g. communications and electrical engineering. Its
|
---|
44 | description goes as follows.
|
---|
45 |
|
---|
46 | \textbf{Feasible Solutions:} Binary Sequences $\vec{y} \in \{-1,+1\}^n$
|
---|
47 |
|
---|
48 | \textbf{Objective Function:}
|
---|
49 | \begin{equation}
|
---|
50 | f(\vec{y}) = \frac{n^2}{2 \cdot E(\vec{y})} \longrightarrow maximization
|
---|
51 | \end{equation}
|
---|
52 |
|
---|
53 | \begin{equation}
|
---|
54 | E(\vec{y}) = \displaystyle\sum_{k=1}^{n-1} (\sum_{i=1}^{n-k} y_i \cdot y_{i+k})^2
|
---|
55 | \end{equation}
|
---|
56 |
|
---|
57 | \section{Problem description}
|
---|
58 | Due to the huge 'exploding' posibilities it is not possible to walk trough the
|
---|
59 | whole list of posibities, so we need alternative approches to tackle this
|
---|
60 | problem. First we will try the \emph{Monte Carlo Search algoritm [MCS]} and next try
|
---|
61 | \emph{Simulated Annealing [SA]}.
|
---|
62 |
|
---|
63 | \emph{MCS} is all about random sequence generation and trying to find a good
|
---|
64 | solution, do a small ajustment on the solution and compare the new solution
|
---|
65 | again.
|
---|
66 |
|
---|
67 | \emph{SA} takes a more and less the same aproch, but it also accept small
|
---|
68 | 'losses' from time-to-time. But as time passes it get less likely to accept
|
---|
69 | 'bad solutions'.
|
---|
70 |
|
---|
71 | \section{Statistics}
|
---|
72 | Of course many people have run numerous computer hours on finding the best
|
---|
73 | possible fitness as shown in table~\ref{tab:best}. The algoritms used to find
|
---|
74 | those numbers are not found.
|
---|
75 |
|
---|
76 | \begin{table}
|
---|
77 | \caption{Best known values of low-autocorrelation problem}
|
---|
78 | \begin{center}
|
---|
79 | \begin{tabular}{| l | c | r | }
|
---|
80 | \hline
|
---|
81 | $n$ & Best known $f$ \\
|
---|
82 | \hline \hline
|
---|
83 | 20 & 7.6923 \\ \hline
|
---|
84 | 50 & 8.1699 \\ \hline
|
---|
85 | 100 & 8.6505 \\ \hline
|
---|
86 | 200 & 7.4738 \\ \hline
|
---|
87 | 222 & 7.0426 \\ \hline
|
---|
88 | \end{tabular}
|
---|
89 | \end{center}
|
---|
90 | \label{tab:best}
|
---|
91 | \end{table}
|
---|
92 |
|
---|
93 | \section{Approach}
|
---|
94 | The \emph{MCS} is implemented streight-forward from the wikipedia
|
---|
95 | page\footnote{http://en.wikipedia.org/wiki/Monte\_Carlo\_method}. The mutation
|
---|
96 | choosing is flipping one bit in the array.
|
---|
97 |
|
---|
98 | For the \emph{SA} implemented also comes streight from 'the book'
|
---|
99 | \footnote{http://en.wikipedia.org/wiki/Simulated\_annealing}, the process
|
---|
100 | choosing for the cooling-down sequence is taken from the dutch wikipedia page
|
---|
101 | 'Simulated annealing', which is nice indicator when to choose something when
|
---|
102 | the solution is worse (logically, beter solutions will always be accepted).
|
---|
103 | \footnote{http://nl.wikipedia.org/wiki/Simulated\_annealing}:
|
---|
104 | \begin{math}
|
---|
105 | p = e^{\frac{f(i)-f(j)}{c}}
|
---|
106 | \end{math}
|
---|
107 |
|
---|
108 | \section{Implementation}
|
---|
109 | The code is written in
|
---|
110 | \emph{Octave}\footnote{http://www.gnu.org/software/octave/} which is the
|
---|
111 | open-source 'variant' of \emph{MATLAB}\copyright
|
---|
112 | \footnote{http://www.mathworks.com/products/matlab/}. There are small minor
|
---|
113 | differences between them, but all code is made compatible to to run on both
|
---|
114 | systems. The code is to be found in Appendix~\ref{app:code}.
|
---|
115 |
|
---|
116 | As work is done remotely, the following commands are used:
|
---|
117 | \unixcmd{matlab-bin -nojvm -nodesktop -nosplash -nodisplay < \%\%PROGRAM\%\%}
|
---|
118 | \unixcmd{octave -q \%\%PROGRAM\%\%}
|
---|
119 |
|
---|
120 | \section{Results}
|
---|
121 | All experiments are run 5 times the best solution is choosen and will be
|
---|
122 | resented at table~\ref{tab:result}. Iteration size is set to 1000. For $n=20$
|
---|
123 | the best fitness history is shown at figure~\ref{fig:fitness}.
|
---|
124 |
|
---|
125 | \begin{table}
|
---|
126 | \caption{Best known values of low-autocorrelation problem}
|
---|
127 | \begin{center}
|
---|
128 | \begin{tabular}{| r | r | r | r | }
|
---|
129 | \hline
|
---|
130 | $n$ & \multicolumn{3}{|c|}{Best fitness} \\
|
---|
131 | & known & MCS & SA \\
|
---|
132 | \hline \hline
|
---|
133 | 20 & 7.6923 & 4.3478 & 4.7619 \\ \hline
|
---|
134 | 50 & 8.1699 & 2.4752 & 2.6882 \\ \hline
|
---|
135 | 100 & 8.6505 & 1.8342 & 1.7470 \\ \hline
|
---|
136 | 200 & 7.4738 & 1.8678 & 1.5733 \\ \hline
|
---|
137 | 222 & 7.0426 & 1.5657 & 1.4493 \\ \hline
|
---|
138 | \end{tabular}
|
---|
139 | \label{tab:result}
|
---|
140 | \end{center}
|
---|
141 | \end{table}
|
---|
142 |
|
---|
143 | \begin{figure}[htp]
|
---|
144 | \begin{center}
|
---|
145 | \subfloat[SA]{\label{fig:edge-a}\includegraphics[scale=0.4]{sa-fitness.eps}}
|
---|
146 | \subfloat[MCS]{\label{fig:edge-b}\includegraphics[scale=0.4]{mcs-fitness.eps}}
|
---|
147 | \end{center}
|
---|
148 | \caption{Fitness throughout the iterations}
|
---|
149 | \label{fig:fitness}
|
---|
150 | \end{figure}
|
---|
151 |
|
---|
152 | \section{Conclusions}
|
---|
153 | Looking at the graphs the fitness was still increasing so a larger iteration
|
---|
154 | size would make the fitness a better result. Secondly the \emph{SA} is
|
---|
155 | preforming much worse on large number than the \emph{MCS} one. It seems to the
|
---|
156 | temperature function is not working as expected.
|
---|
157 |
|
---|
158 | Both algoritms are preforming much worse then the best found solutions.
|
---|
159 | \section{Appendix 1}
|
---|
160 | \label{app:code}
|
---|
161 | \include{autocorrelation.m}
|
---|
162 | \include{initseq.m}
|
---|
163 | \include{mcs-call.m}
|
---|
164 | \include{mcs.m}
|
---|
165 | \include{mutation.m}
|
---|
166 | \include{randint.m}
|
---|
167 | \include{sa-call.m}
|
---|
168 | \include{sa.m}
|
---|
169 | \end{document}
|
---|