Systematische (Offline?)-Lösung für Optimierungsproblem



  • Hallo,

    evtl. ist das mehr was für Rund um die Programmierung.

    Problemstellung: ich habe mal recht weit abstrahiert, um die ganze Physik nicht mitbeschreiben zu müssen. Also: ich habe ein Stück Echtzeit-Software, das auf einer recht minimalistischen Embedded Plattform läuft und dort möchte ich zwei Optimierungsprobleme mit dynamischen Grenzen lösen:

    1. Berechne Maxkraft
    max Kraft(Strom1, Strom2, Strom3)
    mit:
    Schutzbedingung1(Strom1, Strom2) < QuelleA
    Schutzbedingung2(Strom3) < QuelleB(t)
    Schutzbedingung3(Strom1,Strom2,Strom3, Temperatur, Spannungswert) < 0

    2. Berechne Opt. Betriebsstrategie
    min Verluste(Strom1, Strom2, Strom3)
    mit:
    Fsoll = Kraft(Strom1, 2, 3)
    Schutzbedingung1(Strom1, Strom2) < QuelleA(t)
    Schutzbedingung2(Strom3) < QuelleB (t)
    Schutzbedingung3 (Strom1,Strom2,Strom3, Temperatur, Spannungswert) < 0

    Ich habe mich jetzt zu einem offline-Ansatz entschieden, ganz typisch, mit Lookups und der ist aus dem Bauch entstanden (nach der 'koennte so funktionieren' Logik).

    Ich berechne
    1. Fmax = LUT[QuelleA, QuelleB, Temperatur, Spannungswert]

    Und dann:
    2. Fsoll_lim = max(Fsoll, Fmax)
    a. Strom3 = LUT[QuelleA, Fsoll_lim, Temperatur, Spannungswert]
    b. Strom3_lim = max(Strom3, QuelleB)
    c. (Strom1,Strom2) = LUTs[QuelleA, Strom3_lim, Fsoll_lim, Temperatur, Spannungswert]

    Soweit, so gut, das klappt auch, bis auf, dass die LUTs langsam (siehe Anzahl der Dimensionen) wirklich groß werden und meinen Speicher zumüllen.

    Eine online-Lösung des Optimierungsproblems ist – jedenfalls mit den mir bekannten Ansätzen – auf der Plattform nicht möglich, die Funktionen Kraft, die Bedingungen und die Verluste sind nichtlinear und über den kompletten Arbeitsbereich quasi nicht analytisch zu approximieren (selbst die Offline-Lösung auf meinem dicken Rechner dauert für einen Punkt ein paar Sekunden, was nicht echtzeitfähig wäre).

    Wie gehe ich denn systematisch an so ein Problem ran, statt einfach aus dem Bauch raus irgendwelche Offline-Strategien zu entwerfen? Gibt es da Standard-Ansätze? Literatur? Beispiele?

    Schönen Gruß



  • Ich bin mir nicht ganz sicher ob ich dein Problem richtig verstehe.

    Du hast im Prinzip zwei Berechnungen, die du in echtzeit machen musst. Einmal max. Kraft und einmal Opt. Betriebsstrategie.

    Da die Berechnung davon recht komplex ist, machst du die offline. So weit, so normal, würde ich sagen.

    Das Einzige, was du jetzt noch "online" machst, ist das Nachschlagen der korrekten Werte. Hier sagst du, dass das auf deinem normalen Computer schon mehrere Sekunden dauert. Ich würde hier auf Implementierungsprobleme tippen, bei denen man dir nur helfen kann, wenn du uns sagst (zeigst) wie du das implementiert hast. Wahrscheinlich kann man das geschickter Lösen.

    Ein möglicher Ansatz wären vielleicht Hash maps (http://www.cplusplus.com/reference/unordered_map/unordered_map/)

    EDIT: Sorry, Antwort an der Frage und deinem Post vorbei. Zum Thema Softwaredesign, Embedded System Engineering usw. gibt es verschiedenen Bücher, aber da Embedded Systems nicht unbedingt mein Fachgebiet sind, kann ich dir da keins empfehlen.


Log in to reply