FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Angewandte Informatik (HS)

DOS: Hausaufgabe 1, Simplex Programmierung

DOS: Hausaufgabe 1, Simplex Programmierung 2006-11-16 16:41
Dennis-
Hi,
ich sitz gerad an der DOS-Übungsaufgabe 1.2 a)
"Programmieren Sie diese Variante des SIMPLEX-Algorithmus unter Java!".

Mein Problem ist die Lösung fürs n-Dimensionale..
in 1.2 d) soll ja ein Problem für die Optimierungsfunktion
f: |R^2 -> |R^1 gelöst werden. Dh der Simplex müsste quasi wie in der Vorlesung besprochen nur 3 Ecken mit jeweils 3 Koordinaten (x,y,z) haben.

Wenn man aber die Aufgabenstellung genau nimmt und sich nach der Definition des Simplex im "Skript" (:D) richtet, müsste die abgegebene Lösung in der Lage sein auch n-Dimensionale Optimierungsfunktionen zu bearbeiten. Also quasi Funktionen f mit
f: |R^n -> |R^1.

Meine Vermutung war jetzt, dass ich je nach Anzahl der Parameter n auch ein n+1 Eck brauche, wobei jeder Eckpunkt des n+1 Ecks, n+1 Koordinaten besitzt? Ist das richtig?
Ich habs mir fürs 1D überlegt, wo der Simplex quasi nur eine Linie ist. Jeder der Eck-Punkte hat einen x und einen y-Wert. Im 2D hätte man wie in der Vorlesung vorgestellt 3 Eckpunkte mit jeweils 3 Koordinaten. Setzt sich das so fort? Oder ist ein Beweis zb mit Vollständiger Induktion schon Teil der Aufgabenstellung? :x

Kann jemand was dazu sagen? Gab es gestern in der Vorlesung noch einen Hinweis hierzu?

Re: DOS: Hausaufgabe 1, Simplex Programmierung 2006-11-17 01:28
r-hold
Du brauchst keine n-Eck sondern eine mehrdimensionales äquivalent vom dreieck.
Sprich für den 3-dimensnsionalen Fall eine pyramide. In 4d eine hyper Pyramide etc…

Re: DOS: Hausaufgabe 1, Simplex Programmierung 2006-12-06 12:38
Anonymer User
in 1.2.b steht, dass man angeben soll an welchen Stellen man Beschränkungen der Allgemeinheit vornimmt. Kann man hier das Problem nicht einfach auf den 2 Dimensionalen Fall beschränken, weil man.. äh.. kein Bock hat?? Natürlich wäre es in n-D viel eleganter, und vielleicht ist es im Endeffekt für 2-D auch schwerer zu machen als gleich für n-D.

Was meint ihr denn?


Re: DOS: Hausaufgabe 1, Simplex Programmierung 2006-12-09 17:10
Brokkoli
also ansich stellt n-D kein Problem dar.. Und wo in der Aufgabe ja steht, dass wir die Simplex-Variante Programmieren wollen die im Script beshcrieben ist denke ich mal sollte man schon n-D machen.

Re: DOS: Hausaufgabe 1, Simplex Programmierung 2006-12-09 20:14
Dennis-
bringt euer simplex die gleichen ergebnisse wie im skript?
wenn ich einen erstelle mit den p und q formeln komme ich zu folgender tabelle:
0 # 0.0 0.0 # -25.0 #... 1 # 1.89 0.47 # 13.65 #... 2 # 0.47 1.89 # -0.49 #... 3 # 2.36 2.36 # 34.6 # 0 # 1 4 # 3.77 0.94 # 44.74 # 2 # 1 5 # 4.24 2.83 # 62.14 # 1 # 1..
und hab also schon in den 3 startpunkten abweichungen zu den werten ausm skript

Re: DOS: Hausaufgabe 1, Simplex Programmierung 2006-12-09 21:33
Brokkoli
hast du eine andere start-simplex-grösse verwendet?

das sind meine ersten ergebnisse:
0001 0000,0000 0000,0000 -0025,0000
0002 0001,9319 0000,5176 0014,8134
0003 0000,5176 0001,9319 0000,6713
0004 0002,4495 0002,4495 0036,4847 0001 0001 0002
0005 0003,8637 0001,0353 0046,6268 0003 0001 0003
0006 0004,3813 0002,9671 0064,2981 0002 0001 0002

und im script gibts leider auch einige andere ergebnisse als meine… da sind wohl auch einige rechenfehler dabei…

Re: DOS: Hausaufgabe 1, Simplex Programmierung 2006-12-10 00:58
Dennis-
mhm ne Kantenlänge sollte eigentlich 2.0 gewesen sein..
is ja egal, jetz is eh zu spät aber deine Start-Werte zumindest sehen besser aus :-/
In Skript-Datei script_056.gif steht ja was dazu..
Aber irgendwie war ich mir eh nicht so sicher, wie diese komische Tabelle zu interpretieren ist.
Stehen dort Zeilenweise die Punkte drin? So zumindest habe ich das implementiert.. aber dann verstehe ich die Zeile drunter nicht: xj = §j + x1

Re: DOS: Hausaufgabe 1, Simplex Programmierung 2006-12-10 15:25
Brokkoli
die zeile xj = §j + x1 ist nur von bedeutung, wenn man einen anderen Startpunkt als (Vektor)0 hat. Dann muss man immer noch den Startpunkt x1 auf jeden Punkt draufaddieren. ansonsten hast du mit deiner interpretation schon recht. wo ja nun sowieso der abgebetermin vorbei ist… mal meine implementation für die initialisierung:
if(startpunkt == null) startpunkt = new double[dimensionen]; //initialisierung des simplex double p = kantenlaengeAnfang / (dimensionen * Math.sqrt(2)) * (Math.sqrt(dimensionen+1) + dimensionen - 1); double q = kantenlaengeAnfang / (dimensionen * Math.sqrt(2)) * (Math.sqrt(dimensionen+1) - 1); vektoren = new double[dimensionen+1][dimensionen]; for(int j = 0; j < dimensionen; j++) { vektoren[0 ][j] = startpunkt[j]; } for(int i = 0; i < dimensionen; i++) { for(int j = 0; j < dimensionen; j++) { if(i == j) vektoren[i+1][j] = p + startpunkt[j]; else vektoren[i+1][j] = q + startpunkt[j]; } }

Re: DOS: Hausaufgabe 1, Simplex Programmierung 2006-12-10 19:56
Dennis-
ja wer lesen kann und so… :X