Switch project to use minted
This commit is contained in:
parent
9e58fbfaab
commit
2a16d5c2ba
1
.gitignore
vendored
1
.gitignore
vendored
@ -43,6 +43,7 @@ dekker_thesis.pdf
|
||||
## Build tool directories for auxiliary files
|
||||
# latexrun
|
||||
latex.out/
|
||||
build/
|
||||
|
||||
## Auxiliary and intermediate files from other packages:
|
||||
# algorithms
|
||||
|
@ -5,14 +5,6 @@ $bibtex_use = 2;
|
||||
|
||||
$clean_ext = "run.xml %R-blx.bib %R-blx.aux ist xdy";
|
||||
|
||||
# Rule to typeset minizinc files
|
||||
add_cus_dep('mzn', 'mzntex', 0, 'run_make');
|
||||
add_cus_dep('py', 'pytex', 0, 'run_make');
|
||||
sub run_make {
|
||||
my $dest = $$Pdest;
|
||||
system "make $dest"
|
||||
}
|
||||
|
||||
# Rule to generate glossaries
|
||||
add_cus_dep('glo', 'gls', 0, 'run_makeindex');
|
||||
add_cus_dep('acn', 'acr', 0, 'run_makeindex');
|
||||
@ -28,3 +20,4 @@ sub run_makeindex {
|
||||
}
|
||||
push @generated_exts, 'glo', 'gls', 'gls.log', 'glg';
|
||||
push @generated_exts, 'acn', 'acr', 'acr.log', 'alg';
|
||||
push @generated_exts, 'listing';
|
||||
|
20
Makefile
20
Makefile
@ -1,25 +1,13 @@
|
||||
PROJECT=dekker_thesis
|
||||
|
||||
MZN_LISTINGS := $(addsuffix tex, $(wildcard assets/mzn/*.mzn) )
|
||||
PY_LISTINGS := $(addsuffix tex, $(wildcard assets/py/*.py) )
|
||||
.PHONY: $(PROJECT).pdf clean
|
||||
|
||||
.PHONY: $(PROJECT).pdf clean clobber
|
||||
|
||||
$(PROJECT).pdf: $(PROJECT).tex listings
|
||||
latexmk -use-make $<
|
||||
|
||||
listings: $(MZN_LISTINGS) $(PY_LISTINGS)
|
||||
|
||||
%.mzntex : %.mzn
|
||||
pipenv run pygmentize -f latex -Olinenos=True,texcomments=True,escapeinside="@@",verboptions="xleftmargin=5mm" $< > $@
|
||||
|
||||
%.pytex : %.py
|
||||
pipenv run pygmentize -f latex -Olinenos=True,texcomments=True,escapeinside="@@",verboptions="xleftmargin=5mm" $< > $@
|
||||
$(PROJECT).pdf: $(PROJECT).tex
|
||||
pipenv run latexmk --output-directory=build/ --shell-escape $<
|
||||
|
||||
clean:
|
||||
latexmk -c
|
||||
|
||||
clobber:
|
||||
latexmk -C
|
||||
rm -f assets/mzn/*.mzntex
|
||||
rm -f assets/py/*.pytex
|
||||
rm -rf build/
|
||||
|
@ -1,17 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{c}{\PYZpc{} Problem parameters}
|
||||
\PY{k+kt}{enum}\PY{l+s}{ }\PY{n+nv}{TOYS}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{p}{\PYZob{}}\PY{n+nv}{football}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{tennisball}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{stuffed\PYZus{}lama}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{stuffed\PYZus{}elephant}\PY{p}{\PYZcb{}}\PY{p}{;}
|
||||
\PY{k+kt}{array}\PY{p}{[}\PY{n+nv}{TOYS}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{toy\PYZus{}joy}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{p}{[}\PY{l+m}{63}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{12}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{50}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{100}\PY{p}{]}\PY{p}{;}
|
||||
\PY{k+kt}{array}\PY{p}{[}\PY{n+nv}{TOYS}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{toy\PYZus{}space}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{p}{[}\PY{l+m}{32}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{8}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{16}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{40}\PY{p}{]}\PY{p}{;}
|
||||
\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{space\PYZus{}left}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{l+m}{64}\PY{p}{;}
|
||||
|
||||
\PY{c}{\PYZpc{} Decision variables}
|
||||
\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{set}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{n+nv}{TOYS}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{selection}\PY{p}{;}
|
||||
\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{total\PYZus{}joy}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nb}{sum}\PY{p}{(}\PY{n+nv}{toy}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nv}{selection}\PY{p}{)}\PY{p}{(}\PY{n+nv}{toy\PYZus{}joy}\PY{p}{[}\PY{n+nv}{toy}\PY{p}{]}\PY{p}{)}\PY{p}{;}
|
||||
|
||||
\PY{c}{\PYZpc{} Constraints}
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nb}{sum}\PY{p}{(}\PY{n+nv}{toy}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nv}{selection}\PY{p}{)}\PY{p}{(}\PY{n+nv}{toy\PYZus{}space}\PY{p}{[}\PY{n+nv}{toy}\PY{p}{]}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nv}{space\PYZus{}left}\PY{p}{;}
|
||||
|
||||
\PY{c}{\PYZpc{} Goal}
|
||||
\PY{k}{solve}\PY{l+s}{ }\PY{k}{maximize}\PY{l+s}{ }\PY{n+nv}{total\PYZus{}joy}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,6 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{n+nv}{c}\PY{l+s}{ }\PY{esc}{$\mapsto$}\PY{l+s}{ }\PY{l}{true}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{p}{]}
|
||||
\PY{n+nv}{x}\PY{l+s}{ }\PY{esc}{$\mapsto$}\PY{l+s}{ }\PY{n+nf}{mkvar}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{l+m}{10}\PY{o}{..}\PY{l+m}{10}\PY{p}{)}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{p}{]}
|
||||
\PY{n+nv}{y}\PY{l+s}{ }\PY{esc}{$\mapsto$}\PY{l+s}{ }\PY{n+nf}{mkvar}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{l+m}{10}\PY{o}{..}\PY{l+m}{10}\PY{p}{)}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{p}{]}
|
||||
\PY{l}{true}\PY{l+s}{ }\PY{esc}{$\mapsto$}\PY{l+s}{ }\PY{l}{true}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{p}{]}
|
||||
\end{Verbatim}
|
@ -1,16 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{c}{\PYZpc{} Posted c}
|
||||
\PY{l}{true}\PY{l+s}{ }\PY{esc}{$\lhd$}\PY{l+s}{ }\PY{o}{\PYZhy{}}\PY{p}{[}\PY{n+nv}{c}\PY{p}{]}
|
||||
\PY{c}{\PYZpc{} Propagated c = true}
|
||||
\PY{n+nv}{c}\PY{l+s}{ }\PY{esc}{$\mapsfrom$}\PY{l+s}{ }\PY{n+nf}{mkvar}\PY{p}{(}\PY{l+m}{0,1}\PY{p}{)}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{p}{]}
|
||||
\PY{l}{true}\PY{l+s}{ }\PY{esc}{$\lhd$}\PY{l+s}{ }\PY{o}{+}\PY{p}{[}\PY{n+nv}{c}\PY{p}{]}
|
||||
\PY{c}{\PYZpc{} Simplified bool_or(b1, true) = true}
|
||||
\PY{n+nv}{b2}\PY{l+s}{ }\PY{esc}{$\mapsfrom$}\PY{l+s}{ }\PY{n+nf}{bool\PYZus{}or}\PY{p}{(}\PY{n+nv}{b1}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{c}\PY{p}{)}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{p}{]}
|
||||
\PY{l}{true}\PY{l+s}{ }\PY{esc}{$\lhd$}\PY{l+s}{ }\PY{o}{+}\PY{p}{[}\PY{n+nv}{b2}\PY{p}{]}
|
||||
\PY{c}{\PYZpc{} b1 became unused...}
|
||||
\PY{n+nv}{b1}\PY{l+s}{ }\PY{esc}{$\mapsfrom$}\PY{l+s}{ }\PY{n+nf}{int\PYZus{}gt}\PY{p}{(}\PY{n+nv}{t}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{y}\PY{p}{)}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{p}{]}
|
||||
\PY{c}{\PYZpc{} causing t, then b0 and finally z to become unused}
|
||||
\PY{n+nv}{t}\PY{l+s}{ }\PY{esc}{$\mapsfrom$}\PY{l+s}{ }\PY{n+nv}{z}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{n+nv}{b0}\PY{p}{]}
|
||||
\PY{n+nv}{b0}\PY{l+s}{ }\PY{esc}{$\mapsfrom$}\PY{l+s}{ }\PY{n+nf}{int\PYZus{}abs}\PY{p}{(}\PY{n+nv}{x}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{z}\PY{p}{)}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{p}{]}
|
||||
\PY{n+nv}{z}\PY{l+s}{ }\PY{esc}{$\mapsfrom$}\PY{l+s}{ }\PY{n+nf}{mkvar}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{n+nv}{infinity}\PY{p}{,}\PY{n+nv}{infinity}\PY{p}{)}\PY{l+s}{ }\PY{esc}{$\sep$}\PY{l+s}{ }\PY{p}{[}\PY{p}{]}
|
||||
\end{Verbatim}
|
@ -1,17 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{adaptive\PYZus{}uniform}\PY{p}{(}\PY{k+kt}{array}\PY{p}{[}\PY{k+kt}{int}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{init\PYZus{}rate}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{rate}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{START}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{rate}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{init\PYZus{}rate}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{elseif}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{UNSAT}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{rate}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nb}{min}\PY{p}{(}\PY{n+nf}{last\PYZus{}val}\PY{p}{(}\PY{n+nv}{rate}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZhy{}}\PY{l+s}{ }\PY{l+m}{0.02}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{0.6}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{else}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{rate}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nb}{max}\PY{p}{(}\PY{n+nf}{last\PYZus{}val}\PY{p}{(}\PY{n+nv}{rate}\PY{p}{)}\PY{l+s}{ }\PY{o}{+}\PY{l+s}{ }\PY{l+m}{0.02}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{0.95}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{k}{forall}\PY{p}{(}\PY{n+nv}{i}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nb}{index\PYZus{}set}\PY{p}{(}\PY{n+nv}{x}\PY{p}{)}\PY{p}{)}\PY{l+s}{ }\PY{p}{(}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{uniform}\PY{p}{(}\PY{l+m}{0.0}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{1.0}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZgt{}}\PY{l+s}{ }\PY{n+nv}{rate}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{x}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,13 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k+kt}{array}\PY{p}{[}\PY{l+m}{1}\PY{o}{..}\PY{n+nv}{n}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{l+m}{1}\PY{o}{..}\PY{n+nv}{n}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{;}\PY{l+s}{ }\PY{l+s}{ }\PY{c}{\PYZpc{} decision variables}
|
||||
\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{cost}\PY{p}{;}\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{c}{\PYZpc{} objective function}
|
||||
|
||||
\PY{c}{\PYZpc{} --- some constraints defining the problem ---}
|
||||
|
||||
\PY{c}{\PYZpc{} The user-defined LNS strategy}
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{my\PYZus{}lns}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{basic\PYZus{}lns}\PY{p}{(}\PY{n+nf}{uniform\PYZus{}neighbourhood}\PY{p}{(}\PY{n+nv}{x}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{0.2}\PY{p}{)}\PY{p}{)}\PY{p}{;}
|
||||
|
||||
\PY{c}{\PYZpc{} Solve using my\_lns, restart every 500 nodes, overall timeout 120 seconds}
|
||||
\PY{k}{solve}\PY{l+s}{ }\PY{p}{:}\PY{p}{:}\PY{n+nf}{on\PYZus{}restart}\PY{p}{(}\PY{l+s}{\PYZdq{}}\PY{l+s}{my\PYZus{}lns}\PY{l+s}{\PYZdq{}}\PY{p}{)}\PY{l+s}{ }\PY{p}{:}\PY{p}{:}\PY{n+nf}{restart\PYZus{}constant}\PY{p}{(}\PY{l+m}{500}\PY{p}{)}\PY{l+s}{ }\PY{p}{:}\PY{p}{:}\PY{n+nf}{timeout}\PY{p}{(}\PY{l+m}{120}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{minimize}\PY{l+s}{ }\PY{n+nv}{cost}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,18 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k+kt}{var}\PY{l+s}{ }\PY{l+m}{1}\PY{o}{..}\PY{l+m}{5}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{s}\PY{p}{;}\PY{esc}{ \Vlabel{line:6:status:start}}
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{n+nv}{s}\PY{p}{)}\PY{p}{;}
|
||||
\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{bool}\PY{l+s}{ }\PY{n+nv}{b1}\PY{p}{;}
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{int\PYZus{}ne\PYZus{}reif}\PY{p}{(}\PY{n+nv}{s}\PY{p}{,}\PY{l+m}{1}\PY{p}{,}\PY{n+nv}{b1}\PY{p}{)}\PY{p}{;}\PY{l+s}{ }\PY{esc}{\Vlabel{line:6:status:end}}\PY{l+s}{ }\PY{c}{\PYZpc{} b1 <-> status() != START}
|
||||
|
||||
\PY{k+kt}{var}\PY{l+s}{ }\PY{l+m}{0.0}\PY{o}{..}\PY{l+m}{1.0}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{rnd1}\PY{p}{;}\PY{esc}{\Vlabel{line:6:x1:start}}
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{float\PYZus{}uniform}\PY{p}{(}\PY{l+m}{0.0}\PY{p}{,}\PY{l+m}{1.0}\PY{p}{,}\PY{n+nv}{rnd1}\PY{p}{)}\PY{p}{;}
|
||||
\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{bool}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{b2}\PY{p}{;}
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{float\PYZus{}gt\PYZus{}reif}\PY{p}{(}\PY{n+nv}{rnd1}\PY{p}{,}\PY{l+m}{0.2}\PY{p}{,}\PY{n+nv}{b2}\PY{p}{)}\PY{p}{;}
|
||||
\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{bool}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{b3}\PY{p}{;}
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{bool\PYZus{}and}\PY{p}{(}\PY{n+nv}{b1}\PY{p}{,}\PY{n+nv}{b2}\PY{p}{,}\PY{n+nv}{b3}\PY{p}{)}\PY{p}{;}
|
||||
\PY{k+kt}{var}\PY{l+s}{ }\PY{l+m}{1}\PY{o}{..}\PY{l+m}{3}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{x1}\PY{p}{;}
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{int\PYZus{}sol}\PY{p}{(}\PY{n+nv}{x}\PY{p}{[}\PY{l+m}{1}\PY{p}{]}\PY{p}{,}\PY{n+nv}{x1}\PY{p}{)}\PY{p}{;}\PY{esc}{\Vlabel{line:6:x1}}
|
||||
\PY{c}{\PYZpc{} (status() != START /\textbackslash uniform(0.0, 1.0) > 0.2) -> x[1] = sol(x[1])}
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{int\PYZus{}eq\PYZus{}imp}\PY{p}{(}\PY{n+nv}{x}\PY{p}{[}\PY{l+m}{1}\PY{p}{]}\PY{p}{,}\PY{n+nv}{x1}\PY{p}{,}\PY{n+nv}{b3}\PY{p}{)}\PY{p}{;}\PY{l+s}{ }\PY{esc}{\Vlabel{line:6:x1:end}}
|
||||
\PY{esc}{...}
|
||||
\end{Verbatim}
|
@ -1,3 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{basic\PYZus{}lns}\PY{p}{(}\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{bool}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{nbh}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{p}{(}\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{o}{!=}\PY{n+nv}{START}\PY{l+s}{ }\PY{o}{\PYZhy{}\PYZgt{}}\PY{l+s}{ }\PY{n+nv}{nbh}\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,12 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{c}{\PYZpc{} TODO: We probably need to unify these (at least for the thesis)}
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{random\PYZus{}allocation}\PY{p}{(}\PY{k+kt}{array}\PY{p}{[}\PY{k+kt}{int}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{sol}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{forall}\PY{p}{(}\PY{n+nv}{i}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nv}{courses}\PY{p}{)}\PY{l+s}{ }\PY{p}{(}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{p}{(}\PY{n+nf}{uniform}\PY{p}{(}\PY{l+m}{0,99}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{l+m}{80}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZhy{}\PYZgt{}}\PY{l+s}{ }\PY{p}{(}\PY{n+nv}{period\PYZus{}of}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{l+s}{ }\PY{o}{==}\PY{l+s}{ }\PY{n+nv}{sol}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{p}{)}\PY{p}{;}
|
||||
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{free\PYZus{}period}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{period}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{uniform}\PY{p}{(}\PY{n+nv}{periods}\PY{p}{)}\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{forall}\PY{p}{(}\PY{n+nv}{i}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nv}{courses}\PY{l+s}{ }\PY{k}{where}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{period\PYZus{}of}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}\PY{l+s}{ }\PY{o}{!=}\PY{l+s}{ }\PY{n+nv}{period}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{p}{(}\PY{n+nv}{period\PYZus{}of}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{period\PYZus{}of}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,3 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{hill\PYZus{}climbing}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{!=}\PY{l+s}{ }\PY{n+nv}{START}\PY{l+s}{ }\PY{o}{\PYZhy{}\PYZgt{}}\PY{l+s}{ }\PY{l+s}{\PYZus{}}\PY{l+s}{o}\PY{l+s}{b}\PY{l+s}{j}\PY{l+s}{e}\PY{l+s}{c}\PY{l+s}{t}\PY{l+s}{i}\PY{l+s}{v}\PY{l+s}{e}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{l+s}{\PYZus{}}\PY{l+s}{o}\PY{l+s}{b}\PY{l+s}{j}\PY{l+s}{e}\PY{l+s}{c}\PY{l+s}{t}\PY{l+s}{i}\PY{l+s}{v}\PY{l+s}{e}\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,4 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nv}{x}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{l+m}{10}\PY{p}{;}
|
||||
\PY{k}{constraint}\PY{l+s}{ }\PY{n+nv}{y}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,27 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{lex\PYZus{}minimize}\PY{p}{(}\PY{k+kt}{array}\PY{p}{[}\PY{k+kt}{int}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{o}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{n+nb}{index\PYZus{}set}\PY{p}{(}\PY{n+nv}{o}\PY{p}{)}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{stage}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{array}\PY{p}{[}\PY{n+nb}{index\PYZus{}set}\PY{p}{(}\PY{n+nv}{o}\PY{p}{)}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{best}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{START}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{stage}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nb}{min}\PY{p}{(}\PY{n+nb}{index\PYZus{}set}\PY{p}{(}\PY{n+nv}{o}\PY{p}{)}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{else}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{UNSAT}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{lastval}\PY{p}{(}\PY{n+nv}{stage}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nv}{l}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{stage}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{lastval}\PY{p}{(}\PY{n+nv}{stage}\PY{p}{)}\PY{l+s}{ }\PY{o}{+}\PY{l+s}{ }\PY{l+m}{1}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{else}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nf}{complete}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{l+s}{ }\PY{c}{\PYZpc{} we are finished}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{else}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{stage}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{lastval}\PY{p}{(}\PY{n+nv}{stage}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{n+nv}{best}\PY{p}{[}\PY{n+nv}{stage}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{l+s}{\PYZus{}}\PY{l+s}{o}\PY{l+s}{b}\PY{l+s}{j}\PY{l+s}{e}\PY{l+s}{c}\PY{l+s}{t}\PY{l+s}{i}\PY{l+s}{v}\PY{l+s}{e}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{k}{for}\PY{p}{(}\PY{n+nv}{i}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nb}{min}\PY{p}{(}\PY{n+nb}{index\PYZus{}set}\PY{p}{(}\PY{n+nv}{o}\PY{p}{)}\PY{p}{)}\PY{l+s}{.}\PY{l+s}{.}\PY{n+nv}{stage}\PY{o}{\PYZhy{}}\PY{l+m}{1}\PY{p}{)}\PY{l+s}{ }\PY{p}{(}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{o}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{lastval}\PY{p}{(}\PY{n+nv}{best}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{SAT}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{o}\PY{p}{[}\PY{n+nv}{stage}\PY{p}{]}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{l+s}{\PYZus{}}\PY{l+s}{o}\PY{l+s}{b}\PY{l+s}{j}\PY{l+s}{e}\PY{l+s}{c}\PY{l+s}{t}\PY{l+s}{i}\PY{l+s}{v}\PY{l+s}{e}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{l+s}{\PYZus{}}\PY{l+s}{o}\PY{l+s}{b}\PY{l+s}{j}\PY{l+s}{e}\PY{l+s}{c}\PY{l+s}{t}\PY{l+s}{i}\PY{l+s}{v}\PY{l+s}{e}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{o}\PY{p}{[}\PY{n+nv}{stage}\PY{p}{]}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,15 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{function}\PY{l+s}{ }\PY{k+kt}{ann}\PY{p}{:}\PY{l+s}{ }\PY{n+nf}{lns}\PY{p}{(}\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{obj}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{array}\PY{p}{[}\PY{k+kt}{int}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{vars}\PY{p}{,}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{iterations}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{destr\PYZus{}rate}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{explore\PYZus{}time}\PY{g+gr}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{repeat}\PY{l+s}{ }\PY{p}{(}\PY{n+nv}{i}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{l+m}{1}\PY{o}{..}\PY{n+nv}{iterations}\PY{p}{)}\PY{l+s}{ }\PY{p}{(}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nf}{scope}\PY{p}{(}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{has\PYZus{}sol}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nf}{post}\PY{p}{(}\PY{n+nf}{uniform\PYZus{}neighbourhood}\PY{p}{(}\PY{n+nv}{vars}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{destr\PYZus{}rate}\PY{p}{)}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{n+nf}{time\PYZus{}limit}\PY{p}{(}\PY{n+nv}{explore\PYZus{}time}\PY{p}{,}\PY{l+s}{ }\PY{n+nf}{minimize\PYZus{}bab}\PY{p}{(}\PY{n+nv}{obj}\PY{p}{)}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{n+nf}{commit}\PY{p}{(}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{n+nf}{print}\PY{p}{(}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{g+gr}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{n+nf}{post}\PY{p}{(}\PY{n+nv}{obj}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{obj}\PY{p}{)}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{g+gr}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,8 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{uniform\PYZus{}neighbourhood}\PY{p}{(}\PY{k+kt}{array}\PY{p}{[}\PY{k+kt}{int}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{destr\PYZus{}rate}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{forall}\PY{p}{(}\PY{n+nv}{i}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nb}{index\PYZus{}set}\PY{p}{(}\PY{n+nv}{x}\PY{p}{)}\PY{p}{)}\PY{l+s}{ }\PY{p}{(}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{uniform}\PY{p}{(}\PY{l+m}{0.0}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{1.0}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZgt{}}\PY{l+s}{ }\PY{n+nv}{destr\PYZus{}rate}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{x}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,21 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{pareto\PYZus{}optimal}\PY{p}{(}\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{obj1}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{obj2}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{ms}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{l+m}{1000}\PY{p}{;}\PY{l+s}{ }\PY{c}{\PYZpc{} max solutions}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{l+m}{0}\PY{o}{..}\PY{n+nv}{ms}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{nsol}\PY{p}{;}\PY{l+s}{ }\PY{l+s}{ }\PY{c}{\PYZpc{} number of solutions}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{set}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{SOL}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{l+m}{1}\PY{o}{..}\PY{n+nv}{ms}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{array}\PY{p}{[}\PY{n+nv}{SOL}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{n+nb}{lb}\PY{p}{(}\PY{n+nv}{obj1}\PY{p}{)}\PY{l+s}{.}\PY{l+s}{.}\PY{n+nb}{ub}\PY{p}{(}\PY{n+nv}{obj1}\PY{p}{)}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{s1}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{array}\PY{p}{[}\PY{n+nv}{SOL}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{n+nb}{lb}\PY{p}{(}\PY{n+nv}{obj2}\PY{p}{)}\PY{l+s}{.}\PY{l+s}{.}\PY{n+nb}{ub}\PY{p}{(}\PY{n+nv}{obj2}\PY{p}{)}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{s2}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{START}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{nsol}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{l+m}{0}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{elseif}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{UNSAT}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nf}{complete}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{c}{\PYZpc{} we are finished!}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{elseif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{nsol}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{nsol}\PY{p}{)}\PY{l+s}{ }\PY{o}{+}\PY{l+s}{ }\PY{l+m}{1}\PY{l+s}{ }\PY{o}{/\PYZbs{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{s1}\PY{p}{[}\PY{n+nv}{nsol}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{obj1}\PY{p}{)}\PY{l+s}{ }\PY{o}{/\PYZbs{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{s2}\PY{p}{[}\PY{n+nv}{nsol}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{obj2}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{k}{for}\PY{p}{(}\PY{n+nv}{i}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{l+m}{1}\PY{o}{..}\PY{n+nv}{nsol}\PY{p}{)}\PY{l+s}{ }\PY{p}{(}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{obj1}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nf}{lastval}\PY{p}{(}\PY{n+nv}{s1}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZbs{}/}\PY{l+s}{ }\PY{n+nv}{obj2}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nf}{lastval}\PY{p}{(}\PY{n+nv}{s2}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,7 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{free\PYZus{}timeslot}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{slot}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nb}{max}\PY{p}{(}\PY{n+nv}{Times}\PY{p}{)}\PY{l+s}{ }\PY{o}{div}\PY{l+s}{ }\PY{l+m}{10}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{time}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{uniform}\PY{p}{(}\PY{n+nb}{min}\PY{p}{(}\PY{n+nv}{Times}\PY{p}{)}\PY{p}{,}\PY{l+s}{ }\PY{n+nb}{max}\PY{p}{(}\PY{n+nv}{Times}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZhy{}}\PY{l+s}{ }\PY{n+nv}{slot}\PY{p}{)}\PY{p}{;}\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{forall}\PY{p}{(}\PY{n+nv}{t}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nv}{Tasks}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{p}{(}\PY{p}{(}\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{s}\PY{p}{[}\PY{n+nv}{t}\PY{p}{]}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nv}{time}\PY{l+s}{ }\PY{o}{\PYZbs{}/}\PY{l+s}{ }\PY{n+nv}{time}\PY{o}{+}\PY{n+nv}{slot}\PY{l+s}{ }\PY{o}{\PYZgt{}}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{s}\PY{p}{[}\PY{n+nv}{t}\PY{p}{]}\PY{p}{)}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZhy{}\PYZgt{}}\PY{l+s}{ }\PY{n+nv}{s}\PY{p}{[}\PY{n+nv}{t}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{s}\PY{p}{[}\PY{n+nv}{t}\PY{p}{]}\PY{p}{)}\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,20 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{c}{\PYZpc{} post predicate "pred" whenever the solver restarts}
|
||||
\PY{k}{annotation}\PY{l+s}{ }\PY{n+nf}{on\PYZus{}restart}\PY{p}{(}\PY{k+kt}{string}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{pred}\PY{p}{)}\PY{p}{;}
|
||||
\PY{c}{\PYZpc{} restart after fixed number of nodes}
|
||||
\PY{k}{annotation}\PY{l+s}{ }\PY{n+nf}{restart\PYZus{}constant}\PY{p}{(}\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{nodes}\PY{p}{)}\PY{p}{;}
|
||||
\PY{c}{\PYZpc{} restart with scaled Luby sequence}
|
||||
\PY{k}{annotation}\PY{l+s}{ }\PY{n+nf}{restart\PYZus{}luby}\PY{p}{(}\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{scale}\PY{p}{)}\PY{p}{;}
|
||||
\PY{c}{\PYZpc{} restart with scaled geometric sequence ($scale*base^n$ in the $n$-th iteration)}
|
||||
\PY{k}{annotation}\PY{l+s}{ }\PY{n+nf}{restart\PYZus{}geometric}\PY{p}{(}\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{base}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{scale}\PY{p}{)}\PY{p}{;}
|
||||
\PY{c}{\PYZpc{} restart with linear sequence ($scale*n$ in the $n$-th iteration)}
|
||||
\PY{k}{annotation}\PY{l+s}{ }\PY{n+nf}{restart\PYZus{}linear}\PY{p}{(}\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{scale}\PY{p}{)}\PY{p}{;}
|
||||
\PY{c}{\PYZpc{} restart on each solution}
|
||||
\PY{k}{annotation}\PY{l+s}{ }\PY{n+nv}{restart\PYZus{}on\PYZus{}solution}\PY{p}{;}
|
||||
\PY{c}{\PYZpc{} restart without branch-and-bound constraints on the objective}
|
||||
\PY{k}{annotation}\PY{l+s}{ }\PY{n+nv}{restart\PYZus{}without\PYZus{}objective}\PY{p}{;}
|
||||
\PY{c}{\PYZpc{} overall time limit for search}
|
||||
\PY{k}{annotation}\PY{l+s}{ }\PY{n+nf}{timeout}\PY{p}{(}\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{seconds}\PY{p}{)}\PY{p}{;}
|
||||
\PY{c}{\PYZpc{} overall limit on number of restarts}
|
||||
\PY{k}{annotation}\PY{l+s}{ }\PY{n+nf}{restart\PYZus{}limit}\PY{p}{(}\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{n\PYZus{}restarts}\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,14 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{round\PYZus{}robin}\PY{p}{(}\PY{k+kt}{array}\PY{p}{[}\PY{k+kt}{int}\PY{p}{]}\PY{l+s}{ }\PY{k+kt}{of}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{bool}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{nbhs}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{N}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nb}{length}\PY{p}{(}\PY{n+nv}{nbhs}\PY{p}{)}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{o}{\PYZhy{}}\PY{l+m}{1}\PY{o}{..}\PY{n+nv}{N}\PY{o}{\PYZhy{}}\PY{l+m}{1}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{select}\PY{p}{;}\PY{l+s}{ }\PY{c}{\PYZpc{} Neighbourhood selection}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{o}{=}\PY{n+nv}{START}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{select}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{o}{\PYZhy{}}\PY{l+m}{1}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{else}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{select}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{p}{(}\PY{n+nf}{last\PYZus{}val}\PY{p}{(}\PY{n+nv}{select}\PY{p}{)}\PY{l+s}{ }\PY{o}{+}\PY{l+s}{ }\PY{l+m}{1}\PY{p}{)}\PY{l+s}{ }\PY{o}{mod}\PY{l+s}{ }\PY{n+nv}{N}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{k}{forall}\PY{p}{(}\PY{n+nv}{i}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{l+m}{1}\PY{o}{..}\PY{n+nv}{N}\PY{p}{)}\PY{l+s}{ }\PY{p}{(}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{select}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{i}\PY{o}{\PYZhy{}}\PY{l+m}{1}\PY{l+s}{ }\PY{o}{\PYZhy{}\PYZgt{}}\PY{l+s}{ }\PY{n+nv}{nbhs}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{l+s}{ }\PY{esc}{\Vlabel{line:6:roundrobin:post}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,11 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{simulated\PYZus{}annealing}\PY{p}{(}\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{init\PYZus{}temp}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{cooling\PYZus{}rate}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{temp}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{START}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{temp}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nv}{init\PYZus{}temp}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{else}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nv}{temp}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{last\PYZus{}val}\PY{p}{(}\PY{n+nv}{temp}\PY{p}{)}\PY{l+s}{ }\PY{o}{*}\PY{l+s}{ }\PY{p}{(}\PY{l+m}{1}\PY{l+s}{ }\PY{o}{\PYZhy{}}\PY{l+s}{ }\PY{n+nv}{cooling\PYZus{}rate}\PY{p}{)}\PY{l+s}{ }\PY{c}{\PYZpc{} cool down}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{l+s}{\PYZus{}}\PY{l+s}{o}\PY{l+s}{b}\PY{l+s}{j}\PY{l+s}{e}\PY{l+s}{c}\PY{l+s}{t}\PY{l+s}{i}\PY{l+s}{v}\PY{l+s}{e}\PY{l+s}{ }\PY{o}{\PYZlt{}}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{l+s}{\PYZus{}}\PY{l+s}{o}\PY{l+s}{b}\PY{l+s}{j}\PY{l+s}{e}\PY{l+s}{c}\PY{l+s}{t}\PY{l+s}{i}\PY{l+s}{v}\PY{l+s}{e}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZhy{}}\PY{l+s}{ }\PY{n+nb}{ceil}\PY{p}{(}\PY{n+nb}{log}\PY{p}{(}\PY{n+nf}{uniform}\PY{p}{(}\PY{l+m}{0.0}\PY{p}{,}\PY{l+s}{ }\PY{l+m}{1.0}\PY{p}{)}\PY{p}{)}\PY{l+s}{ }\PY{o}{*}\PY{l+s}{ }\PY{n+nv}{temp}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,12 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{int\PYZus{}sol}\PY{p}{(}\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{xi}\PY{p}{)}\PY{p}{;}
|
||||
\PY{k}{function}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{if}\PY{l+s}{ }\PY{n+nb}{is\PYZus{}fixed}\PY{p}{(}\PY{n+nv}{x}\PY{p}{)}\PY{l+s}{ }\PY{k}{then}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{n+nb}{fix}\PY{p}{(}\PY{n+nv}{x}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{else}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{n+nb}{lb}\PY{p}{(}\PY{n+nv}{x}\PY{p}{)}\PY{l+s}{.}\PY{l+s}{.}\PY{n+nb}{ub}\PY{p}{(}\PY{n+nv}{x}\PY{p}{)}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{xi}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{int\PYZus{}sol}\PY{p}{(}\PY{n+nv}{x}\PY{p}{,}\PY{n+nv}{xi}\PY{p}{)}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nv}{xi}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{endif}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,8 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{c}{\PYZpc{} Report the status of the solver (before restarting).}
|
||||
\PY{k+kt}{enum}\PY{l+s}{ }\PY{n+nv}{STATUS}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{p}{\PYZob{}}\PY{n+nv}{START}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{UNKNOWN}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{UNSAT}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{SAT}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{OPT}\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{esc}{\label{ann:enum_status}}
|
||||
\PY{k}{function}\PY{l+s}{ }\PY{n+nv}{STATUS}\PY{p}{:}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{p}{;}\PY{l+s}{ }\PY{esc}{\label{ann:status}}
|
||||
|
||||
\PY{c}{\PYZpc{} Provide access to the last assigned value of variable x.}
|
||||
\PY{k}{function}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nf}{last\PYZus{}val}\PY{p}{(}\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,8 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{stat}\PY{p}{)}\PY{p}{;}\PY{l+s}{ }\PY{esc}{\Vlabel{line:6:status}}
|
||||
\PY{k}{function}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{n+nv}{STATUS}\PY{p}{:}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{n+nv}{STATUS}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{stat}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{status}\PY{p}{(}\PY{n+nv}{stat}\PY{p}{)}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nv}{stat}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,6 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{free\PYZus{}slab}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}\PY{l+s}{ }\PY{k+kt}{int}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{slab}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{uniform}\PY{p}{(}\PY{l+m}{1}\PY{p}{,}\PY{l+s}{ }\PY{n+nv}{nbSlabs}\PY{p}{)}\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{forall}\PY{p}{(}\PY{n+nv}{i}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{l+m}{1}\PY{o}{..}\PY{n+nv}{nbSlabs}\PY{l+s}{ }\PY{k}{where}\PY{l+s}{ }\PY{n+nv}{slab}\PY{l+s}{ }\PY{o}{!=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{assign}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}\PY{p}{)}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{p}{(}\PY{n+nv}{assign}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{assign}\PY{p}{[}\PY{n+nv}{i}\PY{p}{]}\PY{p}{)}\PY{p}{)}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -1,3 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{n+nv}{b3}\PY{l+s}{ }\PY{o}{\PYZhy{}\PYZgt{}}\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{[}\PY{l+m}{1}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{x}\PY{p}{[}\PY{l+m}{1}\PY{p}{]}\PY{p}{)}
|
||||
\end{Verbatim}
|
@ -1,3 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{p}{(}\PY{n+nf}{status}\PY{p}{(}\PY{p}{)}\PY{l+s}{ }\PY{o}{!=}\PY{l+s}{ }\PY{n+nv}{START}\PY{l+s}{ }\PY{o}{/\PYZbs{}}\PY{l+s}{ }\PY{n+nf}{uniform}\PY{p}{(}\PY{l+m}{0.0}\PY{p}{,}\PY{l+m}{1.0}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZgt{}}\PY{l+s}{ }\PY{l+m}{0.2}\PY{p}{)}\PY{l+s}{ }\PY{o}{\PYZhy{}\PYZgt{}}\PY{l+s}{ }\PY{n+nv}{x}\PY{p}{[}\PY{l+m}{1}\PY{p}{]}\PY{l+s}{ }\PY{o}{=}\PY{l+s}{ }\PY{n+nf}{sol}\PY{p}{(}\PY{n+nv}{x}\PY{p}{[}\PY{l+m}{1}\PY{p}{]}\PY{p}{)}
|
||||
\end{Verbatim}
|
@ -1,8 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{k}{predicate}\PY{l+s}{ }\PY{n+nf}{float\PYZus{}uniform}\PY{p}{(}\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{n+nv}{l}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{u}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{r}\PY{p}{)}\PY{p}{;}
|
||||
\PY{k}{function}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nf}{uniform\PYZus{}slv}\PY{p}{(}\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{l}\PY{p}{,}\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{k+kt}{float}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{u}\PY{p}{)}\PY{l+s}{ }\PY{p}{:}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{impure}\PY{l+s}{ }\PY{o}{=}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{k}{let}\PY{l+s}{ }\PY{p}{\PYZob{}}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k+kt}{var}\PY{l+s}{ }\PY{n+nb}{lb}\PY{p}{(}\PY{n+nv}{l}\PY{p}{)}\PY{l+s}{.}\PY{l+s}{.}\PY{n+nb}{ub}\PY{p}{(}\PY{n+nv}{u}\PY{p}{)}\PY{p}{:}\PY{l+s}{ }\PY{n+nv}{rnd}\PY{p}{;}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{l+s}{ }\PY{k}{constraint}\PY{l+s}{ }\PY{n+nf}{float\PYZus{}uniform}\PY{p}{(}\PY{n+nv}{l}\PY{p}{,}\PY{n+nv}{u}\PY{p}{,}\PY{n+nv}{rnd}\PY{p}{)}\PY{p}{:}
|
||||
\PY{l+s}{ }\PY{l+s}{ }\PY{p}{\PYZcb{}}\PY{l+s}{ }\PY{o}{in}\PY{l+s}{ }\PY{n+nv}{rnd}\PY{p}{;}
|
||||
\end{Verbatim}
|
@ -64,25 +64,19 @@ style=apa,
|
||||
\textbf{Example~\theexample. #1} \rmfamily}{\hfill \ensuremath{\square}}
|
||||
|
||||
% Code formatting
|
||||
\usepackage{fancyvrb}
|
||||
\usepackage{color}
|
||||
\input{assets/pygments_header.tex}
|
||||
\newcommand{\highlightfile}[1]{{\scriptsize\input{#1tex}}}
|
||||
\DeclareNewTOC[
|
||||
type=listing,
|
||||
float,
|
||||
name=Listing,
|
||||
counterwithin=chapter,
|
||||
listname={List of Source Listings},
|
||||
]{listing}
|
||||
\usepackage[
|
||||
cachedir=build/listings,
|
||||
outputdir=build,
|
||||
]{minted}
|
||||
\usemintedstyle{borland}
|
||||
|
||||
\crefname{listing}{listing}{listings}
|
||||
\newcommand{\Vlabel}[1]{\label[line]{#1}\hypertarget{#1}{}}
|
||||
\newcommand{\lref}[1]{\hyperlink{#1}{\FancyVerbLineautorefname~\ref*{#1}}}
|
||||
\newcommand{\lrefrange}[2]{\FancyVerbLineautorefname{}s~\hyperlink{#1}{\ref*{#1}}--\hyperlink{#2}{\ref*{#2}}}
|
||||
\newcommand{\Lrefrange}[2]{Lines~\hyperlink{#1}{\ref*{#1}}--\hyperlink{#2}{\ref*{#2}}}
|
||||
\newenvironment{mzn}{\VerbatimEnvironment\begin{minted}[autogobble=true,breaklines,breakindent=4em,numbers=none,escapeinside=@@,fontsize=\scriptsize]{minizinc}}{\end{minted}}
|
||||
\newcommand{\mznfile}[1]{\inputminted[autogobble=true,breaklines,breakindent=4em,numbers=left,escapeinside=@@,fontsize=\scriptsize]{minizinc}{#1}}
|
||||
\newcommand{\mzninline}[1]{\mintinline[fontsize=\small,escapeinside=@@]{minizinc}{#1}}
|
||||
|
||||
% TODO: What am I doing with this?
|
||||
\newcommand{\pyfile}[1]{\inputminted[autogobble=true,breaklines,breakindent=4em,numbers=left,escapeinside=@@,fontsize=\scriptsize]{python}{#1}}
|
||||
|
||||
% % TODO: What am I doing with this?
|
||||
\newcommand*\justify{%
|
||||
\fontdimen2\font=0.4em% interword space
|
||||
\fontdimen3\font=0.2em% interword stretch
|
||||
@ -90,4 +84,11 @@ listname={List of Source Listings},
|
||||
\fontdimen7\font=0.1em% extra space
|
||||
\hyphenchar\font=`\-% allowing hyphenation
|
||||
}
|
||||
\newcommand{\mzninline}[1]{\texttt{\small\justify\detokenize{#1}}}
|
||||
|
||||
\newcommand{\Vlabel}[1]{\label[line]{#1}\hypertarget{#1}{}}
|
||||
\newcommand{\lref}[1]{\hyperlink{#1}{\FancyVerbLineautorefname~\ref*{#1}}}
|
||||
\newcommand{\lrefrange}[2]{\FancyVerbLineautorefname{}s~\hyperlink{#1}{\ref*{#1}}--\hyperlink{#2}{\ref*{#2}}}
|
||||
\newcommand{\Lrefrange}[2]{Lines~\hyperlink{#1}{\ref*{#1}}--\hyperlink{#2}{\ref*{#2}}}
|
||||
|
||||
% Proof Tree
|
||||
\usepackage{bussproofs}
|
||||
|
@ -1,30 +0,0 @@
|
||||
\begin{Verbatim}[commandchars=\\\{\},numbers=left,firstnumber=1,stepnumber=1,codes={\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax},xleftmargin=5mm]
|
||||
\PY{n}{toys\PYZus{}joy} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{63}\PY{p}{,} \PY{l+m+mi}{12}\PY{p}{,} \PY{l+m+mi}{50}\PY{p}{,} \PY{l+m+mi}{100}\PY{p}{]}
|
||||
\PY{n}{toys\PYZus{}space} \PY{o}{=} \PY{p}{[}\PY{l+m+mi}{32}\PY{p}{,} \PY{l+m+mi}{8}\PY{p}{,} \PY{l+m+mi}{16}\PY{p}{,} \PY{l+m+mi}{40}\PY{p}{]}
|
||||
\PY{n}{space\PYZus{}left} \PY{o}{=} \PY{l+m+mi}{64}
|
||||
|
||||
\PY{n}{num\PYZus{}toys} \PY{o}{=} \PY{n+nb}{len}\PY{p}{(}\PY{n}{toys\PYZus{}joy}\PY{p}{)}
|
||||
\PY{c+c1}{\PYZsh{} Initialise an empty table}
|
||||
\PY{n}{table} \PY{o}{=} \PY{p}{[}
|
||||
\PY{p}{[}\PY{l+m+mi}{0} \PY{k}{for} \PY{n}{x} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{n}{space\PYZus{}left} \PY{o}{+} \PY{l+m+mi}{1}\PY{p}{)}\PY{p}{]}
|
||||
\PY{k}{for} \PY{n}{x} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{n}{num\PYZus{}toys} \PY{o}{+} \PY{l+m+mi}{1}\PY{p}{)}
|
||||
\PY{p}{]}
|
||||
\PY{k}{for} \PY{n}{i} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{n}{num\PYZus{}toys} \PY{o}{+} \PY{l+m+mi}{1}\PY{p}{)}\PY{p}{:}
|
||||
\PY{k}{for} \PY{n}{j} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{(}\PY{n}{space\PYZus{}left} \PY{o}{+} \PY{l+m+mi}{1}\PY{p}{)}\PY{p}{:}
|
||||
\PY{c+c1}{\PYZsh{} If we are out of space or toys we cannot choose a toy}
|
||||
\PY{k}{if} \PY{n}{i} \PY{o}{==} \PY{l+m+mi}{0} \PY{o+ow}{or} \PY{n}{j} \PY{o}{==} \PY{l+m+mi}{0}\PY{p}{:}
|
||||
\PY{n}{table}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{[}\PY{n}{j}\PY{p}{]} \PY{o}{=} \PY{l+m+mi}{0}
|
||||
\PY{c+c1}{\PYZsh{} If there is space for the toy, then compare the joy of}
|
||||
\PY{c+c1}{\PYZsh{} picking this toy over picking the next toy with more}
|
||||
\PY{c+c1}{\PYZsh{} space left}
|
||||
\PY{k}{elif} \PY{n}{toys\PYZus{}space}\PY{p}{[}\PY{n}{i} \PY{o}{\PYZhy{}} \PY{l+m+mi}{1}\PY{p}{]} \PY{o}{\PYZlt{}}\PY{o}{=} \PY{n}{j}\PY{p}{:}
|
||||
\PY{n}{table}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{[}\PY{n}{j}\PY{p}{]} \PY{o}{=} \PY{n+nb}{max}\PY{p}{(}
|
||||
\PY{n}{toys\PYZus{}joy}\PY{p}{[}\PY{n}{i} \PY{o}{\PYZhy{}} \PY{l+m+mi}{1}\PY{p}{]} \PY{o}{+} \PY{n}{table}\PY{p}{[}\PY{n}{i} \PY{o}{\PYZhy{}} \PY{l+m+mi}{1}\PY{p}{]}\PY{p}{[}\PY{n}{j} \PY{o}{\PYZhy{}} \PY{n}{wt}\PY{p}{[}\PY{n}{i} \PY{o}{\PYZhy{}} \PY{l+m+mi}{1}\PY{p}{]}\PY{p}{]}\PY{p}{,}
|
||||
\PY{n}{table}\PY{p}{[}\PY{n}{i} \PY{o}{\PYZhy{}} \PY{l+m+mi}{1}\PY{p}{]}\PY{p}{[}\PY{n}{j}\PY{p}{]}\PY{p}{,}
|
||||
\PY{p}{)}
|
||||
\PY{c+c1}{\PYZsh{} Otherwise, consider the next toy}
|
||||
\PY{k}{else}\PY{p}{:}
|
||||
\PY{n}{table}\PY{p}{[}\PY{n}{i}\PY{p}{]}\PY{p}{[}\PY{n}{j}\PY{p}{]} \PY{o}{=} \PY{n}{table}\PY{p}{[}\PY{n}{i} \PY{o}{\PYZhy{}} \PY{l+m+mi}{1}\PY{p}{]}\PY{p}{[}\PY{n}{j}\PY{p}{]}
|
||||
|
||||
\PY{n}{optimal\PYZus{}joy} \PY{o}{=} \PY{n}{table}\PY{p}{[}\PY{n}{num\PYZus{}toys}\PY{p}{]}\PY{p}{[}\PY{n}{space\PYZus{}left}\PY{p}{]}
|
||||
\end{Verbatim}
|
@ -1,109 +0,0 @@
|
||||
|
||||
\makeatletter
|
||||
\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax%
|
||||
\let\PY@ul=\relax \let\PY@tc=\relax%
|
||||
\let\PY@bc=\relax \let\PY@ff=\relax}
|
||||
\def\PY@tok#1{\csname PY@tok@#1\endcsname}
|
||||
\def\PY@toks#1+{\ifx\relax#1\empty\else%
|
||||
\PY@tok{#1}\expandafter\PY@toks\fi}
|
||||
\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{%
|
||||
\PY@it{\PY@bf{\PY@ff{#1}}}}}}}
|
||||
\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}}
|
||||
|
||||
\expandafter\def\csname PY@tok@w\endcsname{\let\PY@ul=\underline\def\PY@tc##1{\textcolor[rgb]{0.97,0.97,0.97}{##1}}}
|
||||
\expandafter\def\csname PY@tok@err\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.64,0.00,0.00}{##1}}\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{0.94,0.16,0.16}{1,1,1}{\strut ##1}}}
|
||||
\expandafter\def\csname PY@tok@x\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.56,0.35,0.01}{##1}}}
|
||||
\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.56,0.35,0.01}{##1}}}
|
||||
\expandafter\def\csname PY@tok@cp\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.56,0.35,0.01}{##1}}}
|
||||
\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.56,0.35,0.01}{##1}}}
|
||||
\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.56,0.35,0.01}{##1}}}
|
||||
\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@kt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@o\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.81,0.36,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@p\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@n\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.77,0.63,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.20,0.40,0.64}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.36,0.21,0.80}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ni\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.81,0.36,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.80,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@py\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.96,0.47,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nn\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.13,0.29,0.53}{##1}}}
|
||||
\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@l\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@m\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.81}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mf\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.81}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.81}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mi\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.81}{##1}}}
|
||||
\expandafter\def\csname PY@tok@il\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.81}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mo\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.81}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ld\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.56,0.35,0.01}{##1}}}
|
||||
\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@se\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@si\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@g\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.64,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.94,0.16,0.16}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@go\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.56,0.35,0.01}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}}
|
||||
\expandafter\def\csname PY@tok@gt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.64,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@fm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@vm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.00}{##1}}}
|
||||
\expandafter\def\csname PY@tok@sa\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@dl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.31,0.60,0.02}{##1}}}
|
||||
\expandafter\def\csname PY@tok@mb\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.81}{##1}}}
|
||||
\expandafter\def\csname PY@tok@ch\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.56,0.35,0.01}{##1}}}
|
||||
\expandafter\def\csname PY@tok@cpf\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.56,0.35,0.01}{##1}}}
|
||||
|
||||
\def\PYZbs{\char`\\}
|
||||
\def\PYZus{\char`\_}
|
||||
\def\PYZob{\char`\{}
|
||||
\def\PYZcb{\char`\}}
|
||||
\def\PYZca{\char`\^}
|
||||
\def\PYZam{\char`\&}
|
||||
\def\PYZlt{\char`\<}
|
||||
\def\PYZgt{\char`\>}
|
||||
\def\PYZsh{\char`\#}
|
||||
\def\PYZpc{\char`\%}
|
||||
\def\PYZdl{\char`\$}
|
||||
\def\PYZhy{\char`\-}
|
||||
\def\PYZsq{\char`\'}
|
||||
\def\PYZdq{\char`\"}
|
||||
\def\PYZti{\char`\~}
|
||||
% for compatibility with earlier versions
|
||||
\def\PYZat{@}
|
||||
\def\PYZlb{[}
|
||||
\def\PYZrb{]}
|
||||
\makeatother
|
||||
|
@ -23,7 +23,7 @@ gets enjoys playing with some toys more than others, we can now try and pick the
|
||||
toys that bring Audrey the most amount of joy, but still fit in the car.
|
||||
|
||||
\begin{listing}[ht]
|
||||
\highlightfile{assets/py/2_dyn_knapsack.py}
|
||||
\pyfile{assets/py/2_dyn_knapsack.py}
|
||||
\caption{\label{lst:2-dyn-knapsack} A Python program that solves a 0-1 knapsack
|
||||
problem using dynamic programming}
|
||||
\end{listing}
|
||||
@ -39,7 +39,7 @@ most joy, but using a dynamic programming approach this exponential behaviour
|
||||
(on the number of toys) can be avoided.
|
||||
|
||||
\begin{listing}[ht]
|
||||
\highlightfile{assets/mzn/2_knapsack.mzn}
|
||||
\mznfile{assets/mzn/2_knapsack.mzn}
|
||||
\caption{\label{lst:2-mzn-knapsack} A \minizinc\ model describing a 0-1 knapsack
|
||||
problem}
|
||||
\end{listing}
|
||||
|
@ -123,13 +123,13 @@ unconstrained, and an 80\% chance of being assigned to the value it had in the
|
||||
previous solution.
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_lns_minisearch_pred.mzn}
|
||||
\mznfile{assets/mzn/6_lns_minisearch_pred.mzn}
|
||||
\caption{\label{lst:6-lns-minisearch-pred} A simple random \gls{lns} predicate
|
||||
implemented in \minisearch{}}
|
||||
\end{listing}
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_lns_minisearch.mzn}
|
||||
\mznfile{assets/mzn/6_lns_minisearch.mzn}
|
||||
\caption{\label{lst:6-lns-minisearch} A simple \gls{lns} \gls{meta-search}
|
||||
implemented in \minisearch{}}
|
||||
\end{listing}
|
||||
@ -213,7 +213,7 @@ overall time limit for the search, whereas \mzninline{restart_limit} stops the
|
||||
search after a fixed number of restarts.
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_restart_ann.mzn}
|
||||
\mznfile{assets/mzn/6_restart_ann.mzn}
|
||||
\caption{\label{lst:6-restart-ann} New annotations to control the restarting
|
||||
behaviour}
|
||||
\end{listing}
|
||||
@ -253,7 +253,7 @@ modellers to access the last value assigned to a variable (the value is
|
||||
undefined if \mzninline{status()=START}).
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_state_access.mzn}
|
||||
\mznfile{assets/mzn/6_state_access.mzn}
|
||||
\caption{\label{lst:6-state-access} Functions for accessing previous solver
|
||||
states}
|
||||
\end{listing}
|
||||
@ -272,7 +272,7 @@ parametric over the neighbourhoods they should apply. For example, since
|
||||
strategy \mzninline{basic_lns} that applies a neighbourhood only if the current
|
||||
status is not \mzninline{START}:
|
||||
|
||||
\highlightfile{assets/mzn/6_basic_lns.mzn}
|
||||
\mznfile{assets/mzn/6_basic_lns.mzn}
|
||||
|
||||
In order to use this predicate with the \mzninline{on_restart} annotation, we
|
||||
cannot simply pass \mzninline{basic_lns(uniform_neighbourhood(x, 0.2))}. First
|
||||
@ -284,7 +284,7 @@ to define their overall strategy in a new predicate. \Cref{lst:6-basic-complete}
|
||||
shows a complete example of a basic \gls{lns} model.
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_basic_complete.mzn}
|
||||
\mznfile{assets/mzn/6_basic_complete.mzn}
|
||||
\caption{\label{lst:6-basic-complete} Complete \gls{lns} example}
|
||||
\end{listing}
|
||||
|
||||
@ -300,7 +300,7 @@ activate a different neighbourhood for each restart
|
||||
(\lref{line:6:roundrobin:post}).
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_round_robin.mzn}
|
||||
\mznfile{assets/mzn/6_round_robin.mzn}
|
||||
\caption{\label{lst:6-round-robin} A predicate providing the round robin
|
||||
meta-heuristic}
|
||||
\end{listing}
|
||||
@ -314,7 +314,7 @@ when the previous restart failed, and decreases it when it succeeded, within the
|
||||
bounds $[0.6,0.95]$.
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_adaptive.mzn}
|
||||
\mznfile{assets/mzn/6_adaptive.mzn}
|
||||
\caption{\label{lst:6-adaptive} A simple adaptive neighbourhood}
|
||||
\end{listing}
|
||||
|
||||
@ -340,7 +340,7 @@ With \mzninline{restart_without_objective}, the restart predicate is now
|
||||
responsible for constraining the objective function. Note that a simple
|
||||
hill-climbing (for minimisation) can still be defined easily in this context as:
|
||||
|
||||
\highlightfile{assets/mzn/6_hill_climbing.mzn}
|
||||
\mznfile{assets/mzn/6_hill_climbing.mzn}
|
||||
|
||||
It takes advantage of the fact that the declared objective function is available
|
||||
through the built-in variable \mzninline{_objective}. A more interesting example
|
||||
@ -353,7 +353,7 @@ solution needs to improve until we are just looking for any improvements. This
|
||||
thereby reaching the optimal solution quicker. This strategy is also easy to
|
||||
express using our restart-based modelling:
|
||||
|
||||
\highlightfile{assets/mzn/6_simulated_annealing.mzn}
|
||||
\mznfile{assets/mzn/6_simulated_annealing.mzn}
|
||||
|
||||
Using the same methods it is also possible to describe optimisation strategies
|
||||
with multiple objectives. An example of such a strategy is lexicographic search.
|
||||
@ -364,7 +364,7 @@ same value for the first objective and improve the second objective, or have the
|
||||
same value for the first two objectives and improve the third objective, and so
|
||||
on. We can model this strategy restarts as such:
|
||||
|
||||
\highlightfile{assets/mzn/6_lex_minimize.mzn}
|
||||
\mznfile{assets/mzn/6_lex_minimize.mzn}
|
||||
|
||||
The lexicographic objective changes the objective at each stage in the
|
||||
evaluation. Initially the stage is 1. Otherwise is we have an UNSAT result, then
|
||||
@ -381,7 +381,7 @@ problem. In these cases we might instead look for a number of diverse solutions
|
||||
and allow the user to pick the most acceptable options. The following fragment
|
||||
shows a \gls{meta-search} for the pareto optimality of a pair of objectives:
|
||||
|
||||
\highlightfile{assets/mzn/6_pareto_optimal.mzn}
|
||||
\mznfile{assets/mzn/6_pareto_optimal.mzn}
|
||||
|
||||
In this implementation we keep track of the number of solutions found so far
|
||||
using \mzninline{nsol}. There is a maximum number we can handle
|
||||
@ -472,7 +472,7 @@ in \lref{line:6:status}), which constrains its local variable argument
|
||||
\mzninline{stat} to take the status value.
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_status.mzn}
|
||||
\mznfile{assets/mzn/6_status.mzn}
|
||||
\caption{\label{lst:6-status} MiniZinc definition of the \mzninline{status} function}
|
||||
\end{listing}
|
||||
|
||||
@ -490,7 +490,7 @@ replace the function call with a type specific \mzninline{int_sol} predicate,
|
||||
which is the constraint that will be executed by the solver.
|
||||
%
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_sol_function.mzn}
|
||||
\mznfile{assets/mzn/6_sol_function.mzn}
|
||||
\caption{\label{lst:6-int-sol} MiniZinc definition of the \mzninline{sol}
|
||||
function for integer variables}
|
||||
\end{listing}
|
||||
@ -518,7 +518,7 @@ Note that the function accepts variable arguments \mzninline{l} and
|
||||
as \mzninline{sol}.
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_uniform_slv.mzn}
|
||||
\mznfile{assets/mzn/6_uniform_slv.mzn}
|
||||
\caption{\label{lst:6-int-rnd} MiniZinc definition of the
|
||||
\mzninline{uniform_nbh} function for floats}
|
||||
\end{listing}
|
||||
@ -573,7 +573,7 @@ For example, consider the model from \cref{lst:6-basic-complete} again.
|
||||
The second block of code (\lrefrange{line:6:x1:start}{line:6:x1:end}) represents
|
||||
the decomposition of the expression
|
||||
|
||||
\highlightfile{assets/mzn/6_transformed_partial.mzn}
|
||||
\mznfile{assets/mzn/6_transformed_partial.mzn}
|
||||
|
||||
which is the result of merging the implication from the \mzninline{basic_lns}
|
||||
predicate with the \mzninline{if} expression from
|
||||
@ -585,14 +585,14 @@ is constrained to be true if-and-only-if the random number is greater than
|
||||
in the previous solution. Finally, the half-reified constraint in
|
||||
\lref{line:6:x1:end} implements
|
||||
|
||||
\highlightfile{assets/mzn/6_transformed_half_reif.mzn}
|
||||
\mznfile{assets/mzn/6_transformed_half_reif.mzn}
|
||||
|
||||
We have omitted the similar code generated for \mzninline{x[2]} to
|
||||
\mzninline{x[n]}. Note that the \flatzinc\ shown here has been simplified for
|
||||
presentation.
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_basic_complete_transformed.mzn}
|
||||
\mznfile{assets/mzn/6_basic_complete_transformed.mzn}
|
||||
\caption{\label{lst:6-flat-pred} \flatzinc\ that results from compiling \\
|
||||
\mzninline{basic_lns(uniformNeighbourhood(x,0.2))}.}
|
||||
\end{listing}
|
||||
@ -620,6 +620,9 @@ these Boolean conditions are compiled and evaluated.
|
||||
\section{An Incremental Interface for Constraint Modelling Languages}
|
||||
\label{sec:6-incremental-compilation}
|
||||
|
||||
As an alternative approach to run \gls{meta-search} algorithm we propose the
|
||||
possibility of incremental flattening. The execution of any
|
||||
|
||||
In order to support incremental flattening, the \nanozinc\ interpreter must be
|
||||
able to process \nanozinc\ calls \emph{added} to an existing \nanozinc\ program,
|
||||
as well as to \emph{remove} calls from an existing \nanozinc\ program. Adding
|
||||
@ -633,7 +636,7 @@ propagation, \gls{cse} and other simplifications.
|
||||
\begin{example}\label{ex:6-incremental}
|
||||
Consider the following \minizinc\ fragment:
|
||||
|
||||
\highlightfile{assets/mzn/6_incremental.mzn}
|
||||
\mznfile{assets/mzn/6_incremental.mzn}
|
||||
|
||||
After evaluating the first constraint, the domain of \mzninline{x} is changed to
|
||||
be less than 10. Evaluating the second constraint causes the domain of
|
||||
@ -670,7 +673,7 @@ trailing.
|
||||
\begin{example}\label{ex:6-trail}
|
||||
Let us look again at the resulting \nanozinc\ code from \Cref{ex:absreif}:
|
||||
|
||||
% \highlightfile{assets/mzn/6_abs_reif_result.mzn}
|
||||
% \mznfile{assets/mzn/6_abs_reif_result.mzn}
|
||||
|
||||
Assume that we added a choice point before posting the constraint
|
||||
\mzninline{c}. Then the trail stores the \emph{inverse} of all modifications
|
||||
@ -678,7 +681,7 @@ trailing.
|
||||
$\mapsfrom$ denotes restoring an identifier, and $\lhd$ \texttt{+}/\texttt{-}
|
||||
respectively denote attaching and detaching constraints):
|
||||
|
||||
% \highlightfile{assets/mzn/6_abs_reif_trail.mzn}
|
||||
% \mznfile{assets/mzn/6_abs_reif_trail.mzn}
|
||||
|
||||
To reconstruct the \nanozinc\ program at the choice point, we simply apply
|
||||
the changes recorded in the trail, in reverse order.
|
||||
@ -756,7 +759,7 @@ of the variables in the previous solution, posts constraints to restrict the
|
||||
search. The following predicate defines a suitable neighbourhood for the GBAC
|
||||
problem:
|
||||
|
||||
\highlightfile{assets/mzn/6_gbac_neighbourhood.mzn}
|
||||
\mznfile{assets/mzn/6_gbac_neighbourhood.mzn}
|
||||
|
||||
When this predicate is called with a previous solution \mzninline{sol}, then
|
||||
every \mzninline{period_of} variable has an $80\%$ chance to be fixed to its
|
||||
@ -881,7 +884,7 @@ the model (described below). The restart strategy is
|
||||
|
||||
% GBAC
|
||||
\begin{listing}[b]
|
||||
\highlightfile{assets/mzn/6_gbac_neighbourhood.mzn}
|
||||
\mznfile{assets/mzn/6_gbac_neighbourhood.mzn}
|
||||
\caption{\label{lst:6-free-period}\texttt{gbac}: neighbourhood freeing all
|
||||
courses in a period.}
|
||||
\end{listing}
|
||||
@ -910,7 +913,7 @@ Gecode. However, \gls{lns} again significantly improves over standard Chuffed.
|
||||
\subsubsection{\texttt{steelmillslab}}
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_steelmillslab_neighbourhood.mzn}
|
||||
\mznfile{assets/mzn/6_steelmillslab_neighbourhood.mzn}
|
||||
\caption{\label{lst:6-free-bin}\texttt{steelmillslab}: Neighbourhood that frees
|
||||
all orders assigned to a selected slab.}
|
||||
\end{listing}
|
||||
@ -943,7 +946,7 @@ outperforms \gecodeStd on this problem, once we use \gls{lns}, the learning in
|
||||
\subsubsection{\texttt{rcpsp-wet}}
|
||||
|
||||
\begin{listing}
|
||||
\highlightfile{assets/mzn/6_rcpsp_neighbourhood.mzn}
|
||||
\mznfile{assets/mzn/6_rcpsp_neighbourhood.mzn}
|
||||
\caption{\label{lst:6-free-timeslot}\texttt{rcpsp-wet}: Neighbourhood freeing
|
||||
all tasks starting in the drawn interval.}
|
||||
\end{listing}
|
||||
|
Reference in New Issue
Block a user