Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws1415:projekte_im_wintersemester_2014_15:optimierungsprogramm

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ws1415:projekte_im_wintersemester_2014_15:optimierungsprogramm [2015/02/26 13:10]
jsauder [Zwischenziele und nötige Kompetenzen:]
ws1415:projekte_im_wintersemester_2014_15:optimierungsprogramm [2016/05/10 14:46] (aktuell)
Zeile 4: Zeile 4:
 Ein Programm, welches eine 3d Erhöhungsdatei,​ sowie zwei Punkte als Input nimmt und den kürzesten Weg zwischen den Beiden Punkten ausgibt. Ein Programm, welches eine 3d Erhöhungsdatei,​ sowie zwei Punkte als Input nimmt und den kürzesten Weg zwischen den Beiden Punkten ausgibt.
  
 +====Ergebnis====
 +
 +[[https://​www.youtube.com/​watch?​v=nsnEnsky7W4|Youtube Video]]
 ==== Teilnehmer ​ ==== ==== Teilnehmer ​ ====
 *[[jsauder@campus.tu-berlin.de|Jonathan Sauder]] *[[jsauder@campus.tu-berlin.de|Jonathan Sauder]]
Zeile 14: Zeile 17:
 Betrachten wir die Datei //run.py// und gehen chronologisch durch die Struktur bis zur Lösung. Betrachten wir die Datei //run.py// und gehen chronologisch durch die Struktur bis zur Lösung.
  
-Es beginnt die Main-Methode. Notwendige ​ Übergabeparameter sind eine Liste aus Zahlenwerten,​ die die Z-Werte der Koordinaten von der 3D-Oberfläche darstellt. Des weiteren müssen noch Start-und Zielpunkt der Berechnung ​übergeben ​werden.+Es beginnt die Main-Methode. Notwendige ​ Übergabeparameter sind eine Liste aus Zahlenwerten,​ die die Z-Werte der Koordinaten von der 3D-Oberfläche darstelltStart-und Zielpunkt der Berechnung, und eine Auflösung mit der Kanten diskretisiert ​werden.
  
 <code Python> <code Python>
Zeile 182: Zeile 185:
  index+=1  index+=1
  
- #​Sonst ​bedingung: maximum der zubetrachtenden Kante muss kleiner ​sein als das minimum des kleinsten ​elements ​von front+ #Sonst: maximum der zubetrachtenden Kante kleiner als minimum des kleinsten ​Elements ​von front
  elif (zubetrachtend[i-index].maximum<​front[0].minimum+0.0000001):​  elif (zubetrachtend[i-index].maximum<​front[0].minimum+0.0000001):​
  zubetrachtend[i-index].fertig=True  zubetrachtend[i-index].fertig=True
Zeile 194: Zeile 197:
  
  
 +=== Die Lösung ===
 +Wenn diese Schleife nicht mehr läuft, wird dann noch mithilfe der Funktion //ende.py// der Unterpunkt auf den drei Kanten des Enddreiecks gefunden, für den gilt, dass die Summe des Weges vom Anfangspunkt zu diesem Unterpunkt und des Weges von diesem Unterpunkt zum Zielpunkt kleinstmöglich ist.
 +Das Attribut weg dieses Punktes hat alle Unterpunkte eingespeichert,​ die berührt werden, wenn man auf dem optimalen Weg vom Anfangspunkt zum Endpunkt rechnet. Dieser Weg ist also die Lösung.
 +
 +<code Python>
 + from ende import ende
 + weg=ende(endkanten,​endpoint,​enddreieck)
 +</​code>​
 +
 +====Insgesamt:​ ohne grafische Darstellung====
 +Insgesamt sieht die datei //run.py// ohne jegliche grafische Darstellung also aus wie folgt:
 +
 +<code Python>
 +from __future__ import division
 +def main(asciidatei,​startpoint,​endpoint,​aufloesung):​
 +   from datenstruktur import datenstruktur
 +   ​punktliste,​delaunay,​dreiecksliste,​kantenliste=datenstruktur(asciidatei,​aufloesung)
 +
 +   #Init of Cython, notwendig um anfang.py bzw. berechnung.py auszuführen
 +   ​import pyximport
 +   ​pyximport.install()
 +
 +   #​Anfangskanten finden
 +   from anfang import anfang
 +   ​anfangskanten,​anfangsdreieck=anfang(startpoint,​dreiecksliste)
 +
 +   #​Endkanten finden
 +   from endpunkt import endpunkt
 +   ​endkanten,​enddreieck=endpunkt(endpoint,​dreiecksliste)
 +
 +   #​Erstellen der Input-Listen
 +   from copy import copy
 +   ​zubetrachtend=copy(anfangskanten)
 +   ​front=copy(anfangskanten)
 +   ​fertig=[]
 +   
 +   from schleife import schleife
 +   while (endkanten[0].fertig==False or endkanten[1].fertig==False or endkanten[2].fertig==False):​
 +      zubetrachtend,​ front, fertig=schleife(zubetrachtend,​front,​fertig)
 +
 +   from ende import ende
 +   ​weg=ende(endkanten,​endpoint,​enddreieck)
 +   ​return 0
 +</​code>​
 +
 +===== Die Visualisierung =====
 +
 +Die Visualisierung wurde mit Python-Matplotlib gemacht.
 +Matplotlib ist zwar auf die dauer ziemlich langsam (am Ende mehr als die Hälfte der runtime), aber ist für simple Darstellungen durch eine übersichtliche API ziemlich nützlich. Rote Kanten sind als Kanten in der Front markiert, Grüne Kanten sind zu betrachtende Kanten, und blaue Kanten
 +sind fertige Kanten (für die der Optimale Weg schon gefunden wurde)
 +
 +{{:​ws1415:​projekte_im_wintersemester_2014_15:​bild1.png?​400|}}{{:​ws1415:​projekte_im_wintersemester_2014_15:​bild2_.png?​400|}}
  
 +{{:​ws1415:​projekte_im_wintersemester_2014_15:​bild3.png?​400|}}{{:​ws1415:​projekte_im_wintersemester_2014_15:​bild4.png?​400|}}
  
 +[[https://​www.youtube.com/​watch?​v=nsnEnsky7W4|Youtube Video]]
 ==== Projektseiten ==== ==== Projektseiten ====
  
ws1415/projekte_im_wintersemester_2014_15/optimierungsprogramm.1424952611.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)