Modellierungskurs
EXKURS: Visualisierung der Ergebnisse
Python ist eine sehr umfangreiche Programmiersprache. Bisher, habe Sie sie nur zum Übertragen eines Optimierungsmodells in Gurobi und das Auslesen der Ergebnisse benutzt. In diesem Abschnitt zeigen wir Ihnen, wie Sie Ihre Ergebnisse visualisieren können.
Stellen Sie sich folgendes Szenario vor: Das Management ist sehr daran interessiert, wie sich Produktionskosten zu von Transportkosten verhalten und möchte gerne mit einer einfachen Darstellung sehen, welcher Produktionsstandort an welchen Abnehmer liefert. Sie sollen eine Präsentation vorbereiten und brauchen einige Abbildungen. Sie entscheiden sich dazu einige Diagramme mit den Kosten zu erstellen und eine Übersichtskarte mit allen potenziellen Produktionsstandorten und Kunden.
Diagramme
Mit Matplotib können Sie eine sehr große Anzahl verschiedenster Diagramm erstellen. Wir geben zwei Beispiele, ein Pie-Chart und ein Bar-Chart. Generell sollte Matplotlib bereits auf ihrem System mit Anaconda kommen.
Code Pie-Chart
```lang:python;;def plot_shares(transport_cost, production_cost):
labels = 'Transport', 'Produktion'
sizes = [transport, production]
fig, ax = plt.subplots()
fig.set_dpi(100)
ax.pie(sizes, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
ax.axis('equal')
plt.show()
fig.savefig('pie_chart.png')```
Ergebnis
Code Bar-Chart
```lang:python;;def plot_totals_bar(transport, production):
fig, ax = plt.subplots()
labels = ['Transport', 'Fixed']
counts = [transport, production]
ax.bar(labels, counts)
fig.set_dpi(100)
plt.show()
Ergebnis

Karten
Mit Geopandas können Sie relative leicht Karten plotten. Es gibt verschiedene Formate, in den Karten bereitgestellt werden. Die Verbreitetsten sind ESRI Shapefiles und Geojson. Wir stellen ein .geojson von NRW bereit: LANDKREISE. (Quelle: GeoBasis-DE / BKG 2013). Weiterhin brauchen Sie die Geo-Koordinaten von den potenziellen Fabriken und Abnehmern. Der Datenumfang ist hier noch überschaubar, deshalb haben wir die Koordinaten einzeln herausgesucht. Es wäre aber auch möglich, diesen Schritt zu automatisieren. Zum Beispiel mit einem Geocoding - Service (e.g. OpenRouteService oder OpenCage).
Zum Installieren von Geopandas folgen Sie bitte der Installationsanleitung: Geopandas Installation Guide
Daten Vorbereiten
```lang:python;;production = [('Krefeld',51.33489008436512, 6.568047013473666),
('Herne',51.53771045684371, 7.194962256766569),
('Paderborn',51.71909942364076, 8.75057976047261)]
sinks = [('Koeln',50.93386518777527, 6.958973923969869),
('Bonn',50.740625840775465, 7.0952987924814),
('Duisburg',51.43082091590227, 6.76912922060523),
('Muenster',51.96498607848209, 7.617203294554034),
('Unna',51.537604178977716, 7.690509013834595),
('Bielefeld',52.02833269735831, 8.527475896723134)]```
Karte Plotten
Geopandas mit gpd.read_file(fp) übernimmt alle Arbeit für uns.
```lang:python;;def plot_map():
fp = "landkreise.geojson"
data_nrw = gpd.read_file(fp)
fig, ax = plt.subplots()
data_nrw.plot(ax=ax, facecolor="none", edgecolor="black")```
Daten auf Karte Plotten
ax.scatter zeichnet Punkte auf die Karte. x und y Werte müssen als getrennte Arrays angegeben werden.
```lang:python;;def plot_potential_modules(fig, ax):
x_values = [value[2] for value in production]
y_values = [value[1] for value in production]
ax.scatter(x_values, y_values, c="y", label="Produktion")
def plot_sinks(fig, ax):
x_values = [value[2] for value in sinks]
y_values = [value[1] for value in sinks]
ax.scatter(x_values, y_values, c="r", label="Kunden")```
Optimierungsergebnisse Plotten
ax.plot zeichnet hier jede Verbindungslinie einzeln, wenn das Optimierungsergebnis sagt, dass die Verbindung benutzt wird.
```lang:python;;for i in range(len(production)):
for j in range(len(sinks)):
if(x[i, j]. x > 0.001):
ax.plot([production[i][2], sinks[j][2]],
[production[i][1], sinks[j][1]], c='k')```
Ergebnis Problemdarstellung
Ergebnis Lösungsdarstellung
Hier finden Sie noch einmal die kompletten kommentierten Programmdateien