From d0d7b7dece1ff986b27be66a90b9d2a02980f9d2 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 14 Dec 2016 22:43:28 +0100 Subject: JobScheduling: finish 3b Previous answer was correct, but rewriting it to fit the variables used in part (a). Also adding a picture. --- part1.tex | 77 ++++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 23 deletions(-) (limited to 'part1.tex') diff --git a/part1.tex b/part1.tex index c33fb6c..b4763cc 100644 --- a/part1.tex +++ b/part1.tex @@ -674,31 +674,62 @@ milliseconds. \subsubsection*{(b)} -This solution was retrieved in the same way as answer a. This answer is $m = 65$. -2 extra lines were added to ensure that job 6 lies within job 12: +The extra constraint states that job 6 may only be run when it fits within the +scheduled time of job 12: +\begin{align} +\label{eq:sched6} +t_{12} \leq t_6 \land t_6 + d_6 \leq t_{12} + d_{12} +\end{align} -\begin{lstlisting}[language=lisp,basicstyle=\scriptsize] -(>= j6 j12) -(<= (+ j6 11) (+ j12 17)) -\end{lstlisting} +After modifying the program from (a) by adding \texttt{(and (<= t12 t6) (<= (+ +t6 d6) (+ t12 d12)))} to the formula, a satisfying assignment was found for +$D=65$ in 50 milliseconds (shown in Figure~\ref{fig:jobSchedulingB}). For +$D=64$, ``unsat'' was output (in 50ms). -With those 2 extra formula lines, the new schedule becomes: - -\begin{lstlisting} -j1 -> 1 -j2 -> 0 -j3 -> 7 -j4 -> 0 -j5 -> 15 -j6 -> 42 -j7 -> 53 -j8 -> 15 -j9 -> 28 -j10 -> 0 -j11 -> 15 -j12 -> 42 -\end{lstlisting} -Note that $53 + 7 + 5$ is indeed equal to $65$. +\begin{figure}[H] +\centering +\begin{tikzpicture} +% +\draw[draw=red,fill=red] (0.0, 6.1) rectangle (1.4000000000000001, 6.4); +\node[anchor=east] at (-0.100000,6.200000) {2}; +\node[anchor=west] at (1.500000,6.200000) {0 + 7 = 7}; +\draw[draw=green,fill=green] (0.0, 5.6) rectangle (1.8, 5.9); +\node[anchor=east] at (-0.100000,5.700000) {4}; +\node[anchor=west] at (1.900000,5.700000) {0 + 9 = 9}; +\draw[draw=blue,fill=blue] (0.0, 5.1) rectangle (3.0, 5.4); +\node[anchor=east] at (-0.100000,5.200000) {10}; +\node[anchor=west] at (3.100000,5.200000) {0 + 15 = 15}; +\draw[draw=cyan,fill=cyan] (0.2, 4.6) rectangle (1.4000000000000001, 4.9); +\node[anchor=east] at (-0.100000,4.700000) {1}; +\node[anchor=west] at (1.500000,4.700000) {1 + 6 = 7}; +\draw[draw=magenta,fill=magenta] (1.4000000000000001, 4.1) rectangle (3.0, 4.4); +\node[anchor=east] at (-0.100000,4.200000) {3}; +\node[anchor=west] at (3.100000,4.200000) {7 + 8 = 15}; +\draw[draw=gray,fill=gray] (3.0, 3.6) rectangle (5.0, 3.9); +\node[anchor=east] at (-0.100000,3.700000) {5}; +\node[anchor=west] at (5.100000,3.700000) {15 + 10 = 25}; +\draw[draw=darkgray,fill=darkgray] (3.0, 3.1) rectangle (5.6, 3.4); +\node[anchor=east] at (-0.100000,3.200000) {8}; +\node[anchor=west] at (5.700000,3.200000) {15 + 13 = 28}; +\draw[draw=lightgray,fill=lightgray] (3.0, 2.6) rectangle (6.2, 2.9); +\node[anchor=east] at (-0.100000,2.700000) {11}; +\node[anchor=west] at (6.300000,2.700000) {15 + 16 = 31}; +\draw[draw=brown,fill=brown] (5.6000000000000005, 2.1) rectangle (8.4, 2.4); +\node[anchor=east] at (-0.100000,2.200000) {9}; +\node[anchor=west] at (8.500000,2.200000) {28 + 14 = 42}; +\draw[draw=olive,fill=olive] (8.4, 1.6) rectangle (10.600000000000001, 1.9); +\node[anchor=east] at (-0.100000,1.700000) {6}; +\node[anchor=west] at (10.700000,1.700000) {42 + 11 = 53}; +\draw[draw=orange,fill=orange] (8.4, 1.1) rectangle (11.8, 1.4); +\node[anchor=east] at (-0.100000,1.200000) {12}; +\node[anchor=west] at (11.900000,1.200000) {42 + 17 = 59}; +\draw[draw=pink,fill=pink] (10.600000000000001, 0.6) rectangle (13.000000000000002, 0.9); +\node[anchor=east] at (-0.100000,0.700000) {7}; +\node[anchor=west] at (13.100000,0.700000) {53 + 12 = 65}; +% +\end{tikzpicture} +\caption{\label{fig:jobSchedulingB}Result of job scheduling for (b).} +\end{figure} \section*{Problem: Integer sum from neighbors} Eight integer variables $a_1$, $a_2$, $a_3$, $a_4$, $a_5$, $a_6$, $a_7$, $a_8$ -- cgit v1.2.1