Aufgabe 2
This commit is contained in:
parent
d29755051d
commit
ff07766822
5 changed files with 110 additions and 2 deletions
BIN
AGT_Folien/Zusammenfassung.pdf
Normal file
BIN
AGT_Folien/Zusammenfassung.pdf
Normal file
Binary file not shown.
51
AGT_Folien/Zusammenfassung.tex
Normal file
51
AGT_Folien/Zusammenfassung.tex
Normal file
|
|
@ -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}
|
||||
32
agt_übung2.py
Normal file
32
agt_übung2.py
Normal file
|
|
@ -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}")
|
||||
Binary file not shown.
|
|
@ -1,5 +1,30 @@
|
|||
\section{b-Flüsse}
|
||||
\begin{tasks}
|
||||
\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
|
||||
\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}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue