"Berechnung vorwärts, Optimierung rückwärts?" - Wie würdet ihr das machen?

Status
Nicht offen für weitere Antworten.

-horn-

Bekanntes Mitglied
moien,

ich hab da folgendes problem. ich habe eine mathematische funktion für eine bwegungsgleichung eines masseteilchens. diese bewegung des teilchens berechne ich für jedes kleine zeitintervall, damit man die neue position hat, die dann als start für das nächste zeit intervall ist. stellt euch das wie beim bogenschießen vor. die startbedingungen habe ich und ich will am ende mit dem pfeil ins ziel treffen. die flugbahn dazu berechne ich mir und schaue dann ganz am ende, ob ich ins ziel getroffen habe und wenn nicht, dann muss ich zb an den parametern was so ändern, dass es nachher ins ziel trifft.

ich habe aber nun mehrere phasen, eine angetriebene phase und eine freiflugphase. diese habe ich dann mehrfach hintereinander, weil ich eine rakete mit mehreren stufen berechnen will.
bei den angetriebene phasen habe ich eine maximale flugdauer bis der treibstoff verbraucht ist, dafür kann ich aber an der richtung was ändern.
bei den freiflugphasen muss ich mit der letzten richtung der angetriebenen phase starten und lasse mich dann von der gravitation beeinflussen. dort kann ich nur die flugdauer verändern bis dann nachher die nächste stufe startet.

das ziel ist dann auf die maximale höhe zum beispiel zu kommen unter einem vorgegebenem winkel.


der ablauf wäre nun dass ich die rechnung einmal nur senkrecht durchführe, damit ich weiss, wo die rakete hinfliegt. aus dem letzten werten zum schluss aller phasen, muss dann der vergleich zwischen aktuellem ort und wirklichem zielort gemacht werden. damit müssen dann verändelrichen parameter vorher wieder geändert werden und verglichen werden, ob das nun besser oder schlechter wird.

ich muss also vorwärts schritt für schritt rechnen, aber bei jedem schritt dann komplett bis zum ende rechnen und von dort aus rückwärts optimieren, um bei diesem schritt den besten parameterwert zu bekommen.

und nun fängt mein programmierproblem an. wie stell ich das an?

hat da jemand eine idee?

grüße, Andreas
 

Marco13

Top Contributor
Java ist eine Programmiersprache. Damit kann man solche Sachen machen.

Zum Thema: Ich konnte es nicht 100% nachvollziehen, aber es hört sich alles andere als trivial an - von daher kann ich das jetzt ja sagen: WENN du überhaupt eine Chance hast, das hinzukriegen, dann könnte Backwards Steps in Rigid Body Simulation hilfreich sein - da hatte ich mal einen Vortrag drüber gehört, und es scheint grob mit dem zusammenzuhängen, was du vorhast, aber sicher bin ich da nicht.
 

diggaa1984

Top Contributor
hm klingt ziemlich interessant :D

@marco
er möchte im endeffekt durch mehrere berechnungen einer bewegung startparameter ermitteln, welche diese bewegung dann in einem vorher definiertem ziel enden lassen.
Seine Herangehensweise sieht eben so aus, das er das ganze mehr oder weniger zufällig probiert bis die bewegung den gewünschten verlauf einnimmt.
 

FatFire

Bekanntes Mitglied
Ich würde, wenn ich es könnte, kann ich aber nicht, weil ich eine Niete in Mathe und Physik bin, öhm...wo war ich stehengeblieben? Achso, ja, ich würde:

1. passende Gleichung aufstellen (also wie ist die Höhe abhängig zu Abschusswinkel, Startgeschwindigkeit, Gewicht, etc...das dürfte durch die unterschiedlichen Stufen und damit Antriebspausen und Gewichtsänderung das größte Problem sein)
2.einen passenden Optimierungsalgorithmus implementieren (hab bisher nur einmal simulierte Abkühlung implementiert)
3. Rechnen lassen
4. Freuen
5. solange wiederholen, bis man sich sicher ist, dass man in einem globalen und nicht nur einem lokalen Maxima ist
6. nochmal freuen
7. Randparameter übernehmen und Rakete guten Flug wünschen

Gruß FatFire

PS: Punkt 2 ist wahrscheinlich der wichtigste Hinweis
 
B

bygones

Gast
5. solange wiederholen, bis man sich sicher ist, dass man in einem globalen und nicht nur einem lokalen Maxima ist
wenn man in einem lokalen maxima / minima gefangen ist kann man noch so viel rechnen wie man will - man kommt nicht raus.... dazu muessen dann schon "abschaetzungsparameter" existieren, die dir angeben ob du eine moegliches max / min verlaesst.
 

Civilazi

Bekanntes Mitglied
Das hängt doch vom Algorithmus ab, ob er von allein aus nem lokalen Extremum rausfindet oder ob man ein bisschen stupsen muss.

Vielleicht kannst du das auch als lineares Programm formulieren und dann nen Löser drüberlaufen lassen, dann hast du gar kein Problem mit lokalen Extrema...

Aber so wirklich java-spezifisch ist die Frage ja eher nicht :)
 

FatFire

Bekanntes Mitglied
wenn man in einem lokalen maxima / minima gefangen ist kann man noch so viel rechnen wie man will - man kommt nicht raus....
Deswegen stößt man die Berechnung dann normalerweise mit "frischen" Startwerten neu an. Zumindest bei der simulierten Abkühlung. Andere Algorithmen bieten einem da bestimmt auch mehr Spielraum und eine größere Varianz auch in späterem Rechenverlauf, um auch aus einem lokalen Extrema wieder rauszuspringen.
Das ist aber auch nicht wirklich mein Fachgebiet, muss mich da eventuell nochmal ein wenig belesen :rtfm:

Gruß FatFire
 

-horn-

Bekanntes Mitglied
moien,

ich hab das nun hinbekommen. ich will den grusel-code hier nicht posten :D, aber ich hab halt eine maximal rekursionsstiefe festgelegt und lasse bei jedem aufruf der klasse dann den levelcounter mitzählen bis der bei der maximalen tiefe ist und wenn er dann die werte zurückgibt wird im vorhigen level erst dieser "vergleichswert" geprüft und wenn er noch nicht dem suchkritierum entspricht wird wieder in das level herabgestiegen und die parameter verändert bis es passt. hat mich ein wenig grübeln und unmengen papier zum prozess aufzeichnen gekostet :D, aber das war es wert.
es ist immer noch nicht optimal. meinem kumpel hatte ich das schonmal gezeigt und er sagte, das wäre VIEL einfacher, wenn man es in OO machen würde. aber das kann ich leider noch nicht. naja, man wächst an den herausforderungen.

zum thema optimierung und lokale maxima/minima:
eine globale optimierung gelingt in den seltensten fällen und wenn es mal vom grundsatz her geht dann rechnet sich das programm ab und zu bis in alle ewigkeit tot.
wenn, dann wird ja auf die annahmen und auf seine methode hin optimiert. alles, was ausserhalb dieser liegt wird und kann nicht berücksichtigt werden. ist leider so und gehört ja auch zur betrachtung nachher dazu.
ein prof von mir, den ich sehr schätze, hat es sehr anschaulich erklärt. wenn man sich eine eipappenhalterung vorstellt, so wie man es beim eierkauf aus dem supermarkt vorstellt wo so ein paar duzent eier drin stecken und die pappe (ohne eier natürlich) biegt, so dass es in er mitte genau durchhängt, dann hat man quasi seinen suchbereich. und der sucher ist dann ein stein, den man gezielt, oder nicht gezielt in diese geboegen fläche wirft. er kann dann genau in das tiefste loch fallen, also ins globale minimum, aber er kann auch in einen anderen trichter fallen und nicht mehr von alleine raus kommen. man hat zwar dann auch ein lokales minimum gefunden, was vielleicht auch besser als so manch andere ist, aber halt nicht die aller beste lösung zum problem. damit muss man ab und an leben :).

grüße, Andreas
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I File Uploader... Statusanzeige, Berechnung des Status etc. Java Basics - Anfänger-Themen 0
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
Jamie logische Verknüpfung zur Schaltjahr-Berechnung Java Basics - Anfänger-Themen 30
Stephan_kl Reihenwert-Berechnung, Ergebnis mit vorherigem Ergebnis vergleichen Java Basics - Anfänger-Themen 11
Abraham42 Berechnung der Kühlung Java Java Basics - Anfänger-Themen 12
S Hashcode-Berechnung + ^ Java Basics - Anfänger-Themen 2
J Median-Berechnung von 2D-Teilarrays Java Basics - Anfänger-Themen 56
F Tabelle - Berechnung Rang Java Basics - Anfänger-Themen 2
B Berechnung der Position von Kinderelemente von einem Elternknoten Java Basics - Anfänger-Themen 23
S Berechnung der sleep time ist falsch Java Basics - Anfänger-Themen 46
S Switch-Case zur Berechnung der Einkommensteuer Java Basics - Anfänger-Themen 15
F Berechnung der Rektaszension und Deklination eines Sterns Java Basics - Anfänger-Themen 7
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
V Erste Schritte Pi Berechnung Java Basics - Anfänger-Themen 47
M Berechnung der Reststrecke bei Graphen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
B Berechnung zu einer Schleife formen Java Basics - Anfänger-Themen 6
B Berechnung Median mit Methode Java Basics - Anfänger-Themen 7
CptK Methoden Berechnung von Anfangsgeschwindigkeit und Winkel Java Basics - Anfänger-Themen 27
K Erste Schritte Berechnung der Summe zweier Arrays Java Basics - Anfänger-Themen 15
S Erste Schritte Berechnung des Paketportos - Problem/Frage Java Basics - Anfänger-Themen 52
J Gleitkommazahlen, Berechnung von pi Java Basics - Anfänger-Themen 4
J Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
kilopack15 Verzweiflung wegen Berechnung mit Multithreading Java Basics - Anfänger-Themen 1
A Die Werte zur Berechnung müssen als Parameter übergeben werden? Java Basics - Anfänger-Themen 7
Salo Berechnung von Winkeln Java Basics - Anfänger-Themen 28
M Restbuchwert Berechnung geht nicht Java Basics - Anfänger-Themen 45
Ghostman1711 Pi berechnung Methode aufrufen Java Basics - Anfänger-Themen 2
L Rekursive Methode zur Berechnung der Potenz q hoch p Java Basics - Anfänger-Themen 17
beatles Operatoren Operatoren - Berechnung Java Basics - Anfänger-Themen 40
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
N Verzögerte Berechnung "Lazy" Java Basics - Anfänger-Themen 8
J Erste Schritte Rundungsproblem - Berechnung Notendurchschnitt Java Basics - Anfänger-Themen 13
S Variablen Vektor zur Berechnung verwenden Java Basics - Anfänger-Themen 4
T Java double berechnung fehler Java Basics - Anfänger-Themen 2
M Berechnung in Java Java Basics - Anfänger-Themen 4
S Berechnung der Arbeitstage in einem Zeitraum Java Basics - Anfänger-Themen 9
E Problem bei rekursiver Berechnung des Binomialkoeffizienten Java Basics - Anfänger-Themen 5
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
S Double, int, Berechnung Java Basics - Anfänger-Themen 3
C Nach Berechnung runden und Wert ausgeben Java Basics - Anfänger-Themen 7
E Berechnung für Shop einbinden Java Basics - Anfänger-Themen 8
S Klassen Formel zur Berechnung .... Bitte um Hilfe Java Basics - Anfänger-Themen 7
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
P Schleife zur Berechnung von einer Summe Java Basics - Anfänger-Themen 16
F Berechnung einer linearen Abschreibung Java Basics - Anfänger-Themen 5
E Berechnung von Punkten Java Basics - Anfänger-Themen 4
D Berechnung des Abstandes von zwei Punkten in einem Koordinatensystem Java Basics - Anfänger-Themen 14
A Methoden PI-Berechnung Java Basics - Anfänger-Themen 22
S Erste Schritte Berechnung mit Daten aus CSV und Date Objekt Java Basics - Anfänger-Themen 2
C Programm zur Berechnung der Spur einer Matrix Java Basics - Anfänger-Themen 4
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
A Erste Schritte Steuer Berechnung, Alters Abhängig Java Basics - Anfänger-Themen 5
T Erste Schritte Berechnung von gerade und ungerade Zahlen Java Basics - Anfänger-Themen 10
J Erste Schritte Berechnung Ratten vermehrung Java Basics - Anfänger-Themen 4
P falsches ergebnis bei einfacher berechnung Java Basics - Anfänger-Themen 3
T Iterative Berechnung einer Satellitenbahn Java Basics - Anfänger-Themen 20
M Java Berechnung mit mehreren Lösungen? Java Basics - Anfänger-Themen 9
D Nullstellen-Berechnung Java Basics - Anfänger-Themen 10
L Fehlermeldung bei falscher Berechnung anzeigen Java Basics - Anfänger-Themen 31
A berechnung multiplikatives inverses Java Basics - Anfänger-Themen 5
J Berechnung des aktuellen Alters auf Basis des Geburtstags Java Basics - Anfänger-Themen 45
J Datentypen Fehler bei Berechnung mit Double und Int-Werten Java Basics - Anfänger-Themen 22
G Berechnung von Winkeln mit Cosinussatz Java Basics - Anfänger-Themen 2
B Arrays verwenden für Berechnung Java Basics - Anfänger-Themen 3
R Merkwürdige Modulo Berechnung Java Basics - Anfänger-Themen 7
B Hausaufgabe Berechnung quadratischer Funktion Java Basics - Anfänger-Themen 16
U Alter Berechnung + sortierung Java Basics - Anfänger-Themen 6
P Berechnung wird nicht durchgeführt Java Basics - Anfänger-Themen 2
D Berechnung von Ostern und Ramadan! Java Basics - Anfänger-Themen 24
N Algorithmus für Berechnung einer Quersumme Java Basics - Anfänger-Themen 9
D Berechnung von Geldausgabe Java Basics - Anfänger-Themen 22
F Berechnung von Kugeln! Java Basics - Anfänger-Themen 9
M rekursive Funktion zur Berechnung der Spiegelzahl Java Basics - Anfänger-Themen 7
S Hausaufgabe: Java-Programm schreiben zur Berechnung von x und y Java Basics - Anfänger-Themen 9
Y Ergebnis einer Berechnung an die Main Methode übergeben Java Basics - Anfänger-Themen 11
Semox Ersten Wert eines Intervalls bei Berechnung einschließen Java Basics - Anfänger-Themen 8
J Logarithmische Berechnung und Arrays Java Basics - Anfänger-Themen 2
B LinkedList - Berechnung des Produkts Java Basics - Anfänger-Themen 6
B Berechnung von Preisen per Java-Programm Java Basics - Anfänger-Themen 27
M Alters berechnung aus Geburtsjahr aus dem Buch Java Basics - Anfänger-Themen 5
O Fehler in der String-Distanz-Berechnung Java Basics - Anfänger-Themen 5
P iterative Berechnung Java Basics - Anfänger-Themen 9
1 Berechnung von PI mithilfe von Buffons Nadelproblem Java Basics - Anfänger-Themen 2
G Berechnung zwei Komplexen Zahlen Java Basics - Anfänger-Themen 34
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
J Programm für interaktive Berechnung von Temperaturverläufen Java Basics - Anfänger-Themen 9
K Annährende ganzzahlige Berechnung der Wurzel Java Basics - Anfänger-Themen 8
L Berechnung von Perioden Java Basics - Anfänger-Themen 4
D einfach berechnung einer onlinezeit Java Basics - Anfänger-Themen 25
S Euklid Klasse mit Methoden zur Berechnung des ggT Java Basics - Anfänger-Themen 23
G Frage zur Primzahlen berechnung Java Basics - Anfänger-Themen 11
G Berechnung von N-Tageslinien von Aktienkursen Java Basics - Anfänger-Themen 13
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
W Schaltjahr Berechnung Java Basics - Anfänger-Themen 24
A Probleme mit Programm zur Pi-Berechnung Java Basics - Anfänger-Themen 6
X Temperatur-Berechnung /Array(?) Java Basics - Anfänger-Themen 5
L Berechnung Summe Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben