Approximationschema für das Rucksackproblem

This commit is contained in:
Marco Ammon 2020-10-14 18:00:11 +02:00
parent 2ac590b369
commit 134f00e6b3
2 changed files with 82 additions and 1 deletions

Binary file not shown.

View File

@ -298,6 +298,11 @@ Sei $\Pi$ ein Optimierungsproblem und $A$ ein Approximationsalgorithmus für $\P
Da die Werte zulässiger Lösungen immer ganzzahlig sind, folgt $\abs{\opt(I) - A(I, \varepsilon^*)} = 0$, damit also die Optimalität von $A(I, \varepsilon^*)$.
\end{proof}
\section{Pseudo-polynomielle Algorithmen}
Sei $\Pi$ ein kombinatorisches Optimierungsproblem, sodass in allen Instanzen $I$ alle vorkommenden Zahlen natürliche Zahlen sind. Sei $\mathrm{maxnr}(I)$ die größte in $I$ vorkommende Zahl. Ein Algorithmus wird als pseudo-polynomiell bezeichnet, falls es ein Polynom $\mathrm{poly}(\cdot, \cdot)$ gibt, sodass für alle Instanzen $I$ seine Laufzeit $\mathrm{poly}(\abs{I}, \mathrm{maxnr}(I))$ ist.
Kann also das Problem so eingeschränkt werden, dass für alle Instanzen $I$ die größte vorkommende Zahl durch ein Polynom begrenz wird, also $\mathrm{maxnr}(I) \le q(\abs{I})$ mit Polynom $q$ gilt, so ist auch die Laufzeit des Algorithmus polynomiell.
\section{\algo{GreedyIS} für \problem{IS}}
\begin{algorithmic}[]
\State $U = \emptyset, t = 0, V^{(0)} = V$
@ -465,6 +470,82 @@ Der Algorithmus von Christofides (\algo{CH}) geht wie folgt vor:
TODO
\end{zeuge}
\section{\algo{DynRucksack} für \problem{Rucksack}}
\section{Approximationsschema für \problem{Rucksack}}
\subsection{\algo{DynRucksack} zur exakten Lösung von \problem{Rucksack}}
Für eine Instanz $I = \langle W, \mathrm{vol}, p, B\rangle$ kann direkt eine obere und eine untere Grenze für den maximalen Wert der Füllung angegeben werden:
\begin{equation*}
P_{\max} \le \opt(I) \le n \cdot P_{\max}
\end{equation*}
Sei $F_j(\alpha)$, wobei $j \in \{0, 1, \dots, n\} und $$\alpha \in \mathbb{Z}$ gilt, das kleinste benötigte Rucksackvolumen, mit dem man einen Wert von mindestes $\alpha$ erreichen kann, wenn man die ersten $j$ Waren einpacken darf.
Die formale Definition
\begin{equation*}
F_j(\alpha) = \min\{\mathrm{vol}(R)\mid R \subseteq \{1, \dots, j\}, p(R) \ge \alpha\}
\end{equation*}
lässt sich durch die folgende Rekursion ausdrücken:
\begin{equation*}
f_j(\alpha) = \begin{cases*}
0 & falls $\alpha \le 0$\\
\infty & falls $\alpha \ge 1, j = 0$\\
\min\{F_{j-1}(\alpha - p_j) + \mathrm{vol}(j), F_{j-1}(\alpha)\} & sonst (sog. Bellmannsche Optimalitätsgl.)
\end{cases*}
\end{equation*}
Der Algorithmus \algo{DynRucksack} setzt diese durch dynamische Programmierung um:
\begin{algorithmic}[]
\State $\alpha = 0$
\Repeat
\State $\alpha = \alpha + 1$
\For{$j = 1$ to $n$}
\State $F_j(\alpha) = \min\{F_{j-1}(\alpha - p_j) + \mathrm{vol}(j), F_{j-1}(\alpha)\}$
\EndFor
\Until{$B < F_n(\alpha)$}
\State \Return $\alpha - 1$
\end{algorithmic}
\begin{satz}
\algo{DynRucksack} berechnet zur Eingabe $I$ den Wert $\opt(I)$ in Zeit $\mathcal{O}(n \cdot \opt(I)) = \mathcal{O}(n^2 \cdot P_{\max})$.
\end{satz}
\subsection{\algo{AR\textsubscript{$k$}} zur Approximation mit konstantem relativen Fehler}
Der Algorithmus \algo{AR\textsubscript{$k$}} rechnet mit um den Faktor $k$ reduzierten, gerundeten Preisen:
\begin{algorithmic}[]
\State $p_\mathrm{red}(w) = \left\lfloor\frac{p(w)}{k}\right\rfloor$
\State $I_\mathrm{red} = \langle W, \mathrm{vol}, p_\mathrm{red}, B \rangle$
\State $R_k = \Call{\algo{DynRucksack}}{I_\mathrm{red}}$
\State \Return $R_k$
\end{algorithmic}
\begin{satz}
\algo{AR\textsubscript{$k$}} macht bei Eingabe $I$ einen relativen Fehler von $\varepsilon_{\algo{AR\textsubscript{$k$}}} \le \frac{k \cdot n}{P_{\max}}$ und hat eine Laufzeit von $\mathcal{O}(n^2 \cdot \frac{P_{\max}}{k})$.
\end{satz}
\begin{proof}
Sei $R^*$ die Indexmenge einer optimalen Rucksackfüllung für $I$ und $R_k$ die berechnete Indexmenge der Lösung des um $k$ reduzierten Problems $I_\mathrm{red}$.
Da $R_k$ eine optimale Lösung für $I_\mathrm{red}$ ist, gilt $\opt(I_\mathrm{red}) \geq \sum_{j\in R^*}\left\lfloor\frac{p_j}{k}\right\rfloor$. Weiterhin ist $R_k$ eine zulässige Lösung für $I$.
Es gilt dann:
\begin{align*}
\algo{AR}_k(I) &= p(R_k) \ge k \cdot \sum_{j\in R_k} \left\lfloor \frac{p_j}{k}\right\rfloor = k \cdot \opt(I_\mathrm{red})\\
&\ge k\cdot \sum_{j\in R^*} \left\lfloor \frac{p_j}{k}\right\rfloor \ge k \cdot \sum_{j\in R^*}\left(\frac{p_j}{k} - 1\right) = \sum_{j\in R^*}\left(p_j - k\right) = p(R^*) - k \cdot \abs{R^*}\\
&= \opt(I) - k \cdot \abs{R^*} \ge \opt(I) - k \cdot n
\end{align*}
Damit folgt für den relativen Fehler die zu zeigende Aussage
\begin{equation*}
\varepsilon_{\algo{AR}_k} = \frac{\abs{\algo{AR}_k(I) - \opt(I)}}{\opt(I)} \le \frac{k\cdot n}{\opt(I)} \le \frac{k\cdot n}{P_{\max}}
\end{equation*}
\end{proof}
\subsection{\algo{FPASRucksack} zur Umwandlung in ein streng polynomielles Approximationsschema}
Um ein FPAS zu erreichen, muss gezeigt werden, dass jedes $\varepsilon \in ]0, 1[$ als relativer Fehler erreichbar ist.
Der Algorithmus \algo{FPASRucksack} verwendet dazu \algo{AR\textsubscript{$k$}} und konstruiert ein passendes $k$:
\begin{algorithmic}[]
\State bestimme $n$ und $P_{\max}$ aus der Eingabe $I$
\State $k = \varepsilon \cdot \frac{P_{\max}}{n}$
\State \Return \Call{\algo{AR\textsubscript{$k$}}}{$I$}
\end{algorithmic}
\begin{satz}
\algo{FPASRucksack} ist ein FPAS für \problem{Rucksack} mit einer Laufzeit von $\mathcal{O}\left(n \cdot \log \frac{1}{\varepsilon} + \frac{1}{\varepsilon^4}\right)$.
\end{satz}
\end{document}