From 2a16d5c2ba27823497ea25fa68a9d223f0ef4732 Mon Sep 17 00:00:00 2001 From: "Jip J. Dekker" Date: Tue, 2 Mar 2021 13:39:42 +1100 Subject: [PATCH] Switch project to use minted --- .gitignore | 1 + .latexmkrc | 9 +- Makefile | 20 +--- assets/mzn/2_knapsack.mzntex | 17 --- assets/mzn/6_abs_reif_result.mzntex | 6 - assets/mzn/6_abs_reif_trail.mzntex | 16 --- assets/mzn/6_adaptive.mzntex | 17 --- assets/mzn/6_basic_complete.mzntex | 13 --- .../mzn/6_basic_complete_transformed.mzntex | 18 --- assets/mzn/6_basic_lns.mzntex | 3 - assets/mzn/6_gbac_neighbourhood.mzntex | 12 -- assets/mzn/6_hill_climbing.mzntex | 3 - assets/mzn/6_incremental.mzntex | 4 - assets/mzn/6_lex_minimize.mzntex | 27 ----- assets/mzn/6_lns_minisearch.mzntex | 15 --- assets/mzn/6_lns_minisearch_pred.mzntex | 8 -- assets/mzn/6_pareto_optimal.mzntex | 21 ---- assets/mzn/6_rcpsp_neighbourhood.mzntex | 7 -- assets/mzn/6_restart_ann.mzntex | 20 ---- assets/mzn/6_round_robin.mzntex | 14 --- assets/mzn/6_simulated_annealing.mzntex | 11 -- assets/mzn/6_sol_function.mzntex | 12 -- assets/mzn/6_state_access.mzntex | 8 -- assets/mzn/6_status.mzntex | 8 -- .../mzn/6_steelmillslab_neighbourhood.mzntex | 6 - assets/mzn/6_transformed_half_reif.mzntex | 3 - assets/mzn/6_transformed_partial.mzntex | 3 - assets/mzn/6_uniform_slv.mzntex | 8 -- assets/packages.tex | 37 +++--- assets/py/2_dyn_knapsack.pytex | 30 ----- assets/pygments_header.tex | 109 ------------------ chapters/2_background.tex | 4 +- chapters/6_incremental.tex | 53 +++++---- 33 files changed, 55 insertions(+), 488 deletions(-) delete mode 100644 assets/mzn/2_knapsack.mzntex delete mode 100644 assets/mzn/6_abs_reif_result.mzntex delete mode 100644 assets/mzn/6_abs_reif_trail.mzntex delete mode 100644 assets/mzn/6_adaptive.mzntex delete mode 100644 assets/mzn/6_basic_complete.mzntex delete mode 100644 assets/mzn/6_basic_complete_transformed.mzntex delete mode 100644 assets/mzn/6_basic_lns.mzntex delete mode 100644 assets/mzn/6_gbac_neighbourhood.mzntex delete mode 100644 assets/mzn/6_hill_climbing.mzntex delete mode 100644 assets/mzn/6_incremental.mzntex delete mode 100644 assets/mzn/6_lex_minimize.mzntex delete mode 100644 assets/mzn/6_lns_minisearch.mzntex delete mode 100644 assets/mzn/6_lns_minisearch_pred.mzntex delete mode 100644 assets/mzn/6_pareto_optimal.mzntex delete mode 100644 assets/mzn/6_rcpsp_neighbourhood.mzntex delete mode 100644 assets/mzn/6_restart_ann.mzntex delete mode 100644 assets/mzn/6_round_robin.mzntex delete mode 100644 assets/mzn/6_simulated_annealing.mzntex delete mode 100644 assets/mzn/6_sol_function.mzntex delete mode 100644 assets/mzn/6_state_access.mzntex delete mode 100644 assets/mzn/6_status.mzntex delete mode 100644 assets/mzn/6_steelmillslab_neighbourhood.mzntex delete mode 100644 assets/mzn/6_transformed_half_reif.mzntex delete mode 100644 assets/mzn/6_transformed_partial.mzntex delete mode 100644 assets/mzn/6_uniform_slv.mzntex delete mode 100644 assets/py/2_dyn_knapsack.pytex delete mode 100644 assets/pygments_header.tex diff --git a/.gitignore b/.gitignore index f2c5e4b..ff3bab8 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/.latexmkrc b/.latexmkrc index 97e4deb..f054f2f 100644 --- a/.latexmkrc +++ b/.latexmkrc @@ -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'; diff --git a/Makefile b/Makefile index a474913..7f8351f 100644 --- a/Makefile +++ b/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/ diff --git a/assets/mzn/2_knapsack.mzntex b/assets/mzn/2_knapsack.mzntex deleted file mode 100644 index 19f14f7..0000000 --- a/assets/mzn/2_knapsack.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_abs_reif_result.mzntex b/assets/mzn/6_abs_reif_result.mzntex deleted file mode 100644 index c7b9a86..0000000 --- a/assets/mzn/6_abs_reif_result.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_abs_reif_trail.mzntex b/assets/mzn/6_abs_reif_trail.mzntex deleted file mode 100644 index 70ee3ca..0000000 --- a/assets/mzn/6_abs_reif_trail.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_adaptive.mzntex b/assets/mzn/6_adaptive.mzntex deleted file mode 100644 index 2c9c9bd..0000000 --- a/assets/mzn/6_adaptive.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_basic_complete.mzntex b/assets/mzn/6_basic_complete.mzntex deleted file mode 100644 index d4d906e..0000000 --- a/assets/mzn/6_basic_complete.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_basic_complete_transformed.mzntex b/assets/mzn/6_basic_complete_transformed.mzntex deleted file mode 100644 index 79eb808..0000000 --- a/assets/mzn/6_basic_complete_transformed.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_basic_lns.mzntex b/assets/mzn/6_basic_lns.mzntex deleted file mode 100644 index ef92a21..0000000 --- a/assets/mzn/6_basic_lns.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_gbac_neighbourhood.mzntex b/assets/mzn/6_gbac_neighbourhood.mzntex deleted file mode 100644 index 732e1ab..0000000 --- a/assets/mzn/6_gbac_neighbourhood.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_hill_climbing.mzntex b/assets/mzn/6_hill_climbing.mzntex deleted file mode 100644 index 5f7b579..0000000 --- a/assets/mzn/6_hill_climbing.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_incremental.mzntex b/assets/mzn/6_incremental.mzntex deleted file mode 100644 index 2e1142a..0000000 --- a/assets/mzn/6_incremental.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_lex_minimize.mzntex b/assets/mzn/6_lex_minimize.mzntex deleted file mode 100644 index f2fe5ef..0000000 --- a/assets/mzn/6_lex_minimize.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_lns_minisearch.mzntex b/assets/mzn/6_lns_minisearch.mzntex deleted file mode 100644 index 58dca4f..0000000 --- a/assets/mzn/6_lns_minisearch.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_lns_minisearch_pred.mzntex b/assets/mzn/6_lns_minisearch_pred.mzntex deleted file mode 100644 index 6567b23..0000000 --- a/assets/mzn/6_lns_minisearch_pred.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_pareto_optimal.mzntex b/assets/mzn/6_pareto_optimal.mzntex deleted file mode 100644 index e310530..0000000 --- a/assets/mzn/6_pareto_optimal.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_rcpsp_neighbourhood.mzntex b/assets/mzn/6_rcpsp_neighbourhood.mzntex deleted file mode 100644 index 6a0f016..0000000 --- a/assets/mzn/6_rcpsp_neighbourhood.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_restart_ann.mzntex b/assets/mzn/6_restart_ann.mzntex deleted file mode 100644 index 9fd2ea1..0000000 --- a/assets/mzn/6_restart_ann.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_round_robin.mzntex b/assets/mzn/6_round_robin.mzntex deleted file mode 100644 index d38c7e0..0000000 --- a/assets/mzn/6_round_robin.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_simulated_annealing.mzntex b/assets/mzn/6_simulated_annealing.mzntex deleted file mode 100644 index 47b3276..0000000 --- a/assets/mzn/6_simulated_annealing.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_sol_function.mzntex b/assets/mzn/6_sol_function.mzntex deleted file mode 100644 index 80e808f..0000000 --- a/assets/mzn/6_sol_function.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_state_access.mzntex b/assets/mzn/6_state_access.mzntex deleted file mode 100644 index a63a3a7..0000000 --- a/assets/mzn/6_state_access.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_status.mzntex b/assets/mzn/6_status.mzntex deleted file mode 100644 index a7a0803..0000000 --- a/assets/mzn/6_status.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_steelmillslab_neighbourhood.mzntex b/assets/mzn/6_steelmillslab_neighbourhood.mzntex deleted file mode 100644 index e82aa45..0000000 --- a/assets/mzn/6_steelmillslab_neighbourhood.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_transformed_half_reif.mzntex b/assets/mzn/6_transformed_half_reif.mzntex deleted file mode 100644 index 01c02e8..0000000 --- a/assets/mzn/6_transformed_half_reif.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_transformed_partial.mzntex b/assets/mzn/6_transformed_partial.mzntex deleted file mode 100644 index f17f311..0000000 --- a/assets/mzn/6_transformed_partial.mzntex +++ /dev/null @@ -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} diff --git a/assets/mzn/6_uniform_slv.mzntex b/assets/mzn/6_uniform_slv.mzntex deleted file mode 100644 index ea5aa9b..0000000 --- a/assets/mzn/6_uniform_slv.mzntex +++ /dev/null @@ -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} diff --git a/assets/packages.tex b/assets/packages.tex index 390a451..781fd8f 100644 --- a/assets/packages.tex +++ b/assets/packages.tex @@ -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} diff --git a/assets/py/2_dyn_knapsack.pytex b/assets/py/2_dyn_knapsack.pytex deleted file mode 100644 index 8d9c1a6..0000000 --- a/assets/py/2_dyn_knapsack.pytex +++ /dev/null @@ -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} diff --git a/assets/pygments_header.tex b/assets/pygments_header.tex deleted file mode 100644 index b5ad0f6..0000000 --- a/assets/pygments_header.tex +++ /dev/null @@ -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 - diff --git a/chapters/2_background.tex b/chapters/2_background.tex index 5311983..4593566 100644 --- a/chapters/2_background.tex +++ b/chapters/2_background.tex @@ -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} diff --git a/chapters/6_incremental.tex b/chapters/6_incremental.tex index 209269b..e440f69 100644 --- a/chapters/6_incremental.tex +++ b/chapters/6_incremental.tex @@ -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}