diff --git a/AGT_Folien/Zusammenfassung.pdf b/AGT_Folien/Zusammenfassung.pdf new file mode 100644 index 0000000..0f71c49 Binary files /dev/null and b/AGT_Folien/Zusammenfassung.pdf differ diff --git a/AGT_Folien/Zusammenfassung.tex b/AGT_Folien/Zusammenfassung.tex new file mode 100644 index 0000000..e12b0bd --- /dev/null +++ b/AGT_Folien/Zusammenfassung.tex @@ -0,0 +1,51 @@ +\documentclass[a4paper,abstract,german,10pt]{scrreprt} + +\usepackage[german]{babel} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{lmodern} +\usepackage{amsmath} +\usepackage{bm} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} +\usepackage{amsthm} +\usepackage{graphicx} +\usepackage{enumitem} +\usepackage{tikz} +\usepackage{float} +\usepackage[left=2.5cm,right=2.5cm,top=3cm,bottom=2cm,includeheadfoot]{geometry} +\usepackage[most]{tcolorbox} + +\setlength{\parindent}{0pt} + +\begin{document} + +\title{AGT Zusammenfasssung SS26} + +\chapter{Wiederholung aus ADS} + +\section*{Definitionen} + \textbf{Was ist ein Graph?}\\ + Ein Grapg G ist ein Tupel (V(G), E(G)) wobei + \begin{itemize} + \item V(G) die Knotenmenge und + \item \textit{ungerichtet:} E(G) $\subseteq\binom{V}{2}=\{\{u,v\}\subseteq V(G) | u\neq v\}$ die Kantenmenge ist. + \item \textit{gerichtet:} E(G)$\subseteq V(G)\times V(G)=\{(u,v) | u,v \in V(G), u\neq v\}$ die Knatenmenge ist. + \end{itemize} + + \textbf{Wie repräsentiert man einen Graphen?}\\ + Mit \textbf{Adjazenlisten}, wenn es darum geht alle Kanten eines Knotens zu finden oder mit einer \textbf{Adjazenzmatrix} wenn es darum geht eine bestimmte Kante zu finden/überprüfen.\\\\ + + \textbf{Grad eines Knotens}\\ + + + \section*{Graphendurchlauf-Strategien} + + \section*{Berechnung kürzester Wege} + + \section*{Minimale Spannbäume} + + + +\end{document} \ No newline at end of file diff --git a/agt_übung2.py b/agt_übung2.py new file mode 100644 index 0000000..be37a7e --- /dev/null +++ b/agt_übung2.py @@ -0,0 +1,32 @@ +from pulp import * + +def min_vertexcover(nodes, edges): + #Problemdefinition + prob = LpProblem("Kleinste Knotenüberdeckung", LpMinimize) + + #Binäre Variablen + x = {v: LpVariable(f"x_{v}", cat=LpBinary) for v in nodes} + + #Zielfunktion + prob += lpSum(x[v] for v in nodes) + + #Nebenbedingung + for u,v in edges: + prob += x[u] + x[v] >=1, f"Kante_{u}_{v}" + + #Lösen mit gurobi + prob.solve(GUROBI()) + + #Ergebnis + status = LpStatus[prob.status] + vertex_cover = [v for v in nodes if value(x[v]) == 1] + + return status, vertex_cover, value(prob.objective) + +nodes_test = ['A', 'B', 'C', 'D', 'E'] +edges_test = [('A', 'B'), ('A', 'C'), ('B', 'C'), ('B', 'D'), ('C', 'D'), ('D', 'E')] + +status, cover, size = min_vertexcover(nodes_test, edges_test) +print(f"Status: {status}") +print(f"Minimale Knotenüberdeckung: {cover}") +print(f"Größe der Überdeckung: {size}") \ No newline at end of file diff --git a/übung_4/agt_übung_4.pdf b/übung_4/agt_übung_4.pdf index e5e0733..555124b 100644 Binary files a/übung_4/agt_übung_4.pdf and b/übung_4/agt_übung_4.pdf differ diff --git a/übung_4/aufgabe_2.tex b/übung_4/aufgabe_2.tex index f821048..067063b 100644 --- a/übung_4/aufgabe_2.tex +++ b/übung_4/aufgabe_2.tex @@ -1,5 +1,30 @@ \section{b-Flüsse} \begin{tasks} -\item -\item +\item Damit überhaupt ein gültiger $s$-$t$ Fluss existieren kann, muss $$\sum_{v\in V}b(v)=0$$ gelten, da die Flusserhaltung gegeben sein muss.\\ +Man erweitert den Graphen $G=(V,E)$ um eine künstliche Quelle $s$ und eine künstliche Senke $t$, welche man mit den schon vorhandenen ''Quellen'' ($b(v)<0$) und ''Senken''($b(v)>0$) verbindet. Als Kapazität der Kanten wählt man $|b(v)|$.\\ +Die vorher bereits vorhandenen Kanten zwischen den Knoten bleiben natürlich mit ihrer Kapazität vorhanden.\\ +Ein Zulässiger b-Fluss existiert genau dann, wenn der maximale s-t-Fluss im erweiterten Graphen G' genau +$$\sum_{v:b(v)>0}b(v)$$ +entspricht, da dann alle neuen von $s$ ausgehenden Kanten vollständig ausgelastet sind. +\points{4} + +\item +\begin{enumerate} + \item Sei $f$ ein zulässiger b-Fluss in $G$. Man definiert $f'$ auf $G'$ durch: + $$ + f'(e)= \begin{cases} + f(e) &e\in E\\ + b(v) &e=(s\rightarrow v), b(v) >0\\ + -b(v) &e=(v\rightarrow t), b(v) <0\\ + \end{cases} + $$ + Für jeden Knoten $v\in V$ gilt in $G'$: + $$\textnormal{Nettozufluss}_{f'}(v)=\textnormal{Nettozufluss}_{f}(v)-b(v)=0$$ + Also ist $f'$ ein zulässiger $s$-$t$-Fluss mit Wert $|f'|=\sum_{v:b(v)>0}b(v)$ + \item Sei $f'$ ein $s$-$t$-Fluss in $G'$. Da sein Wert maximal ist, sind alle Kanten zu $s$ und $t$ voll ausgelastet.\\ + Für die Einschränkung $f:=f'\vert_E$ betrachtet man die Flusserhaltung jedes Knotens $v\in V$ in $G'$: + $$\textnormal{Nettozufluss}_f(v)=\textnormal{Nettozufluss}_{f'}(v)-[\textnormal{Beitrag der neuen Kante]}=0-(-b(v))=b(v)$$ + Also ist $f$ ein zulässiger b-Fluss in $G$. +\end{enumerate} +\points{2} \end{tasks}