Approximationschema für das Rucksackproblem
This commit is contained in:
parent
2ac590b369
commit
134f00e6b3
Binary file not shown.
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user