Handout zum Optimierungsseminar von Jakob, Anwendungsbeispiel Problemstellung: Optimierung von chemischen Prozessen mit “steady state”. Steady state bedeutet, dass die Veränderung des Volumens in einem Reaktionsgefäß = 0 ist. dx/dt = f(x, u) = 0. Die Funktion ist von x abhängig, dem Zustand selber und von u, der Flußrate, beziehungsweise von Kontrollen für den Zufluss. Genauer betrachtet bedeutet es sogar, dass sich gar nicht mehr ändert und das System sich in einem dynamischen Gleichgewicht befindet. Aus dem Wörterbuch: “A nonequilibrium state of a system through which matter is flowing and in which all components remain at a constant concentration.” Es ist zeitunabhängig. Angenommenes Problem: in einem Reaktionsgefäß reagieren ein Stoff x0 in einer gewünschten Reaktion erster Ordnung zu x1, aber auch in zwei unerwünschten Reaktionen zu x2 (nullte Ordnung) und zu x3 (zweiter Ordnung). Modell x0 wird von außen mit u0 zugeführt. u0 ist hier als Volumenstrom gedacht. Da in dem Gefäß ein steady state vorliegt, müssen die Stoffe mit dem gleichen Volumenstrom u0 auch wieder herausfliessen. Die Reaktionen für die einzelnen Stoffe, bzw deren Konzentrationen können mit unterschiedlichen Gleichungen verdeutlicht werden. x1, x2 und x3 entstehen aus den Reaktionen und werden alle auch mit der konstanten Flussrate u0 aus dem Reaktor abgeführt. (Falls man mehrere Stoffe einführt, müssen natuerliche die Einflussraten insgesamt so groß sein wie die Ausflussrate, da das Volumen weder zu noch abnimmt). Betrachtet man nun die Zu- und Abnahmen der einzelnen Stoffe, so ergeben sich dadurch folgende Gleichungen (Beschränkungen): 1. d x0/dt = -u0*x0/Vol + u0*X1/Vol - k1*x0 - k2 - k3*x0*x0. Hier steht bei dem Einfluss von u0 noch ein X1 dabei, einerseits wegen der Einheiten, andererseits, um eine eventuelle Verdünnung zu berücksichtigen. wir betrachten den Fall x = 1000. Bei den Reaktionskonstanten steht je nach Ordnung der Reaktion noch x0 dabei. die Konstanten sind in unserem Beispiel k1 = 0.2, k2 = 25.0, k3 = 0.0004. Für die anderen Stoffe ergibt sich: 2. d x1/dt = -u0*x1/Vol + k1*x0; 3. d x2/dt = -u0*x2/Vol + k2; 4. d x3/dt = -u0*x3/Vol + k3*x0*x0; Das Volumen (Vol) ist gleich 1. Man kann dann z.B. die Umsatzrate optimieren, also max x1/(X1-x0). Das Optimierungsproblem hat somit folgende Form: min - x1/(X1-x0), x1, x0 єR s.t. d x0/dt = -u0*x0/Vol + u0*X1/Vol - k1*x0 - k2 - k3*x0*x0 = 0 d x1/dt = -u0*x1/Vol + k1*x0 = 0 d x2/dt = -u0*x2/Vol + k2 = 0 d x3/dt = -u0*x3/Vol + k3*x0*x0 = 0 Lösung Man kann dieses Problem nun für FSQP (bietet sich an, da die Gleichungsbeschränkungen nicht linear sind) formulieren und lösen. Dazu werden die drei Dateien steadystate.pds, steadystate.sim und steadystate.ini erstellt: steadystate.pds (deklarieren der Variablen und Funktionen) dv x0 x1 x2 x3 u0 ob f ec c0 c1 c2 c3 cfix steadystate.sim (definieren der Zielfunktion und der constraints) f = -x1/(1000-x0) c0 = -u0*x0 + u0*1000 - 0.2*x0 - 25.0 - 0.0004*x0*x0 c1 = -u0*x1 + 0.2*x0 c2 = -u0*x2 + 25.0 c3 = -u0*x3 + 0.0004*x0*x0 cfix = u0 - 0.13 (Erklärung siehe Ergebnisse) steadystate.ini (definieren der Startwerte) x0 = 250 x1 = 370 x2 = 180 x3 = 180 u0 = 0.13 Ergebnisse Leider findet FSQP nicht alleine eine optimale Lösung für das Problem. Man muss in der pds Datei einen zusätzlichen constraint einführen, in dem das u0 fixiert wird (cfix), und dieses dann von Hand variieren. So kann man das Minimum finden, zumindest findet es dann einen steady state. Allerdings braucht FSQP dafür – wenn es denn klappt - sehr lange. Das Optimum bekommt man theoretisch, in dem man die Beschränkung wieder wegnimmt, allerdings gibt es mit FSQP auch hier Probleme. Bei den Startwerten kann man eigentlich beliebig variieren, jedoch funktioniert es mit den hier angegebenen am besten. Zusammenfassung Das wichtige ist das „Umschreiben“ der chemischen Reaktionen und de Zu- und Abflüsse in Gleichungen bzw Gleichungsbeschränkungen. Dabei muss immer betrachtet werden ob der Stoff von außen zugeführt wird, ob er in einer Reaktion veschwindet oder entsteht und mit welcher Rate er wieder abfliesst. Um einen steady state zu gewährleisten, setzt man die Änderung des Stoffes (dx/dt) gleich Null. Das wird für jeden Stoff gemacht. Auf die Zielfunktion kommt man durch einfaches Überlegen der Fragestellung, es gibt viele verschiedene Möglichkeiten. Man kann auch die Produktionsrate maximieren (das wäre in unserem Beispiel dann einfach max x1). Oder wie oben angegeben die Umsatzrate. Da die Lösung mit FSQP nicht leicht zu finden ist, können auch andere Programme benutzt werden, allerdings funktioniert es einigermassen mit den oben angegebenen Dateien. Man bekommt als Ergebnis eine optimale Flussrate von u0 = 0.133.