Modellierung und Optimierung einer extraktiven Trennwandkolonne
Transcrição
Modellierung und Optimierung einer extraktiven Trennwandkolonne
Institut für Chemie Masterstudiengang Chemie Forschungsbericht Chemische Verfahrensentwicklung Modellierung und Optimierung einer extraktiven Trennwandkolonne Vorgelegt von: Nils Ayral, Enno Gent, Gabriele Tomaschun Betreuender Gutachter: Hon.-Prof. Dr. Jürgen Rarey Oldenburg, 19. Juli 2015 Inhaltsverzeichnis 1 Einleitung und Motivation 1 2 Grundlagen 2.1 Thermische Trennverfahren – Rektifikation . . . . . . . . . . 2.2 Trennung binärer Azeotrope und eng siedender Gemische . . 2.3 Realisierung der extraktiven Rektifikation . . . . . . . . . . 2.3.1 Industrielles Beispiel: Aromaten-Aliphaten-Trennung 2.4 Das vorliegende Trennproblem . . . . . . . . . . . . . . . . . 3 3 4 6 7 8 . . . . . . . . . . . . . . . . . . . . . . . . . 3 Simulation 11 3.1 Direkte Sequenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 Trennwandkolonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4 Optimierung der Trennwandkolonne 4.1 Scans . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Vorgehen . . . . . . . . . . . . . . . . . 4.1.2 Ergebnisse . . . . . . . . . . . . . . . . . 4.2 Optimierung mittels evolutionärem Algorithmus 4.2.1 Vorgehen . . . . . . . . . . . . . . . . . 4.2.2 Arbeitsweise evolutionärer Algorithmen . 4.2.3 Ergebnisse . . . . . . . . . . . . . . . . . 4.3 Vergleich zwischen Scan und Solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 18 18 20 24 24 26 28 30 5 Zusammenfassung und Ausblick 33 A Programmcode Scan 35 B Programmcode Solver 43 C Übersicht Solveroptionen 49 Literaturverzeichnis 53 Erklärung 55 Kapitel 1 Einleitung und Motivation Die extraktive Rektifikation ist ein Verfahren zur Trennung von eng siedenden Stoffgemischen und Azeotropen. Dabei wird die Trennung mit Hilfe einer Zusatzkomponente, dem sogenannten Extraktions- oder Schleppmittel, welches jedoch in einer zweiten Rektifikationskolonne regeneriert werden muss, ermöglicht. Um die Kosten einer solchen Anlage zu minimieren, können die Extraktions- und die Regeneratorkolonne zu einer Trennwandkolonne vereinigt werden. Ziel dieses Design-Projects ist die Optimierung einer in Aspen Plus simulierten extraktiven Trennwandkolonne (engl. EDWC, extractive devided wall column) mit Hilfe des in Microsoft Excel implementierten evolutionären Algorithmus (EA) der Firma Frontline Systems. Diese Aufgabenstellung enthält drei wesentliche Teilprobleme: (i) die Simulation einer extraktiven Trennwandkolonne in Aspen Plus, (ii) das Schaffen einer Schnittstelle zwischen Aspen Plus und Excel mit Hilfe der Programmiersprache Visual Basic und (iii) die systematische Variation sowie eine gezielte Optimierung kostenrelevanter Betriebsparameter der Simulation aus Excel heraus. Letztendlich soll – unter der Randbedingung von Produktreinheiten > 99 % – der Betriebspunkt mit den geringsten Energiekosten gefunden werden. Abbildung 1 fasst die Motivation des vorliegenden Design-Projects grafisch zusammen. Ziel des vorliegenden Design-Projects ist hingegen nicht die bis ins kleinste Detail ausgearbeite Simulation einer extraktiven Trennwandkolonne. Im Fokus dieser Arbeit stehen vielmehr die Teilprobleme (ii) und (iii), die in letzter Konsequenz auf die Anwendung des evolutionären Algorithmus als Optimierungsverfahren abzielen. In diesem Sinne ist das zugrunde liegende Trennproblem auch keins von brennender wissenschaftlicher Aktualität. Es handelt sich um die Separation eines azeotropen BenzolCyclohexan-Gemisches (als Modellsystem für eine Aromaten-Aliphaten-Trennung) mit Hilfe des Schleppmittels N -Formylmorpholin (NFM). Dieser Prozess findet auch 2 c im technischen Maßstab Anwendung und ist als Morphylane Prozess der Firma Krupp Uhde GmbH patentrechtlich geschützt. Abbildung 1: Problemstellung im vorliegenden Design-Project. Kapitel 2 Grundlagen Die Trennung von Stoffgemischen gehört zu den wichtigsten verfahrenstechnischen Grundoperationen. Dabei ist die Isolierung möglichst reiner Komponenten für anschließende chemische Reaktionen das Ziel. Im Allgemeinen können Stoffgemische thermisch oder mechanisch getrennt werden. Letztere Trennverfahren sind nicht Gegenstand der vorliegenden Arbeit und werden nicht weiter erläutert. 2.1 Thermische Trennverfahren – Rektifikation[1,2] Bei thermischen Trennverfahren erfolgt die Trennung des Stoffgemisches entweder durch Zufuhr von Energie oder durch Zugabe eines Schleppmittels (engl. entrainer), welches mit einer der Komponenten bevorzugt wechselwirkt. Ein Beispiel für ein Trennverfahren mit Energie als Trennhilfsmittel ist die Rektifikation, die als Hintereinanderschaltung vieler Destillationsschritte in einer aus Einbauten (z.B. Glockenböden oder andere Füllkörper) zusammengesetzten Kolonne zu verstehen ist. Durch die große Dichtedifferenz auf jeder darin verbauten Trennstufe können der Dampf und die Flüssigkeit leicht voneinander getrennt werden. Im Gegensatz zu einer Kaskade von Einfachdestillationen hat die Rektifikationskolonne den Vorteil, dass der Dampf direkt in die Flüssigkeit der darüber liegenden Stufe eingeleitet wird und somit ein intensiverer Stoff- und Wärmeaustausch ermöglicht wird. Weitere Vorteile der Rektifikation sind die kontinuierliche Durchführbarkeit sowie der Umstand, dass ausschließlich Fluide auftreten, welche mechanisch vergleichsweise einfach handhabbar sind. Darüber hinaus hilft die gute Expertise im Umgang mit Dampf-Flüssig-Gleichgewichten (VLEs) – an dieser Stelle seien das McGabe-ThieleVerfahren und andere Shortcut-Methoden genannt – ganz erheblich bei der Auslegung von Rektifikationskolonnen. 4 2.2 Trennung binärer Azeotrope und eng siedender Gemische Im Folgenden soll die Arbeitsweise einer Rektifikationskolonne anhand von Abbildung 2 erläutert werden. Abbildung 2: Prinzipieller Aufbau einer Rektifikationskolonne.[3] Zunächst wird der Zulauf, auch Feedstrom oder kurz Feed genannt, in einen der mittleren Böden der Kolonne eingespeist. Der Kolonnenteil unterhalb dieses Feedbodens wird als Abtriebsteil bezeichnet und in ihm wird die schwer flüchtige Komponente angereichert. In dem Teil oberhalb des Feedbodens, dem sogenannten Verstärkungsteil, ist die leichtflüchtige Komponente in entsprechend höherem Anteil enthalten. Insgesamt bildet sich ein Temperaturgradient vom Sumpf (heißer) bis zum Kopf (kälter) der Kolonne aus. Da auf jedem Kolonnenboden ein intensiver Austausch zwischen der kälteren herabfließenden Flüssigkeit und dem heißeren aufsteigenden Wärmestrom erfolgt, wird die Einstellung des Dampf-Flüssig-Gleichgewichts kontinuierlich gestört, was letztlich die Triebkraft für die Stofftrennung darstellt.[4] 2.2 Trennung binärer Azeotrope und eng siedender Gemische[2,3] Das Auftreten azeotroper Punkte, in denen zwei oder mehrere Komponenten die gleiche Flüssig- und Dampfphasenzusammensetzung haben und der Trennfaktor α12 = 1 ist, stellt ein Problem bei der Stofftrennung dar. Aber auch eng siedende 5 2 Grundlagen Systeme, in denen der Trennfaktor nur wenig von eins abweicht, sind ohne Weiteres kaum rektifikativ zu trennen. Denn je näher α12 am Wert 1 liegt, desto mehr theoretische Böden werden für die gleiche Stofftrennung benötigt. Im azeotropen Grenzfall α12 = 1 bedürfe es sogar unendlich vieler Böden. Da jeder zusätzliche Boden aber zusätzlichen Materialkosten entspricht, wird eine solche Stofftrennung schnell unwirtschaftlich. Daher bedient man sich Sonderverfahren, um Azeotrope und eng siedende Systeme durch Rektifikation aufzutrennen. α12 = γ1 P1S K1 = K2 γ2 P2S (1) Wie Gleichung 1 zu entnehmen ist, hängt α12 von den Sättigungsdampfdrücken PiS PS und Aktivitätskoeffizienten γi ab. Folglich stellt die Veränderung des Verhältnisses P1S , 2 welches beispielsweise durch Druckänderungen erzielt werden kann, eine Möglichkeit dar, das azeotrope Verhalten zu beeinflussen oder sogar ganz zum Verschwinden zu bringen. Beispiele für solch eine Azeotropentrennung sind die Vakuumrektifikation und die Zweidruckrektifikation. Eine elegantere Möglichkeit zur Trennung von azeotropen Gemischen ist die Azeotropentrennung unter Verwendung eines Schleppmittels (häufig auch als Entrainer oder Solvent bezeichnet), welches bevorzugt mit einer der beiden Komponenten im Gemisch wechselwirkt und auf diese Weise das Verhältnis der Aktivitätskoeffizienten γγ12 beeinflusst. Beispiele für solch eine Azeotropentrennung sind die azeotrope und die extraktive Rektifikation. Bei der azeotropen Rektifikation bildet das Schleppmittel mit einer der Komponenten ein leichter siedendes und leichter zu trennendes Azeotrop (oft ein Heteroazeotrop). Bei der extraktiven Rektifikation erhöht das schwersiedende Schleppmittel/der Entrainer die Flüchtigkeit einer Komponente relativ zur anderen, indem es mit dieser einen Komponente bevorzugt wechselwirkt. Konkret bedeutet dies, dass die eine Komponente in den Sumpf der Kolonne mitgeschleppt wird und die andere am Kopf abgezogen werden kann. In einem zweiten Rektifikationsprozess muss die mitgeschleppte Komponente vom Entrainer abgetrennt werden. Um diesen Trennprozess ohne großen Aufwand durchführen zu können, sollte der Siedepunktsunterschied mindestens 40 K betragen. Weiterhin sollte der Entrainer kostengünstig und thermisch stabil sein sowie keine weiteren Azeotrope ausbilden. 6 2.3 Realisierung der extraktiven Rektifikation 2.3 Technische Realisierung der extraktiven Rektifikation[5] Es existieren mehrere Möglichkeiten eine extraktive Rektifikation technisch zu realisieren. Drei im Hinblick auf das vorliegende Trennproblem nennenswerte Kolonnenanordnungen werden im Folgenden kurz vorgestellt. Abbildung 3: Kolonnenkonfigurationen bei der extraktiven Rektifikation. Abbildungen modifiziert nach Referenz [6]. Direkte Sequenz (siehe Abb. 3, ¶). Das zu trennende Gemisch und der Entrainer (Solvent) werden in eine erste Kolonne eingespeist, an deren Kopf die nicht mitgeschleppte Komponente A entnommen wird. Das Gemisch aus der mitgeschleppten Komponente B und dem Entrainer wird im Sumpf dieser Extraktionskolonne abgezogen und in eine zweite Kolonne, die sogenannte Regeneratorkolonne, eingespeist. Hier lässt es sich aufgrund der deutlichen Siedepunktsunterschiede relativ einfach trennen, sodass B als Kopfprodukt erhalten und der Entrainer im Sumpf regeneriert wird. Schließlich wird der Entrainer in die erste Kolonne zurückgeführt. Dies ist die konventionelle Anordnung für eine extraktive Rektifikation. Thermisch gekoppelte Anordnung (Abb. 3, Ë). Im Gegensatz zur direkten Sequenz, bei der das Gemisch aus B und Entrainer im Sumpf der Extraktionskolonne entnommen wird, wird es bei der thermisch gekoppelten Anordnung an der Seite entnommen. Es wird nun auch nicht mehr in einen mittleren Boden, sondern in den Sumpf der zweiten Kolonne eingespeist. In dieser zweiten Kolonne wird B als Kopfpro- 7 2 Grundlagen dukt und ein entsprechend um B verarmtes B-Entrainer-Gemisch im Sumpf erhalten. Letzteres wird in die erste Kolonne zurückgeführt. Will man die thermisch gekoppelte Anordnung mit der direkten Sequenz vergleichen, so entspricht der Kolonnenteil oberhalb der Seitenentnahme der linken Extraktionskolonne aus Ê und die zweite Kolonne plus dem Teil unterhalb der Seitenentnahme der rechten Regeneratorkolonne. Bei gleicher Trennleistung ist die thermisch gekoppelte Anordnung energiesparender als die direkte Sequenz und benötigt einen Verdampfer weniger. Extraktive Trennwandkolonne (Abb. 3, Ì). In dieser Anordnung ist die zweite Kolonne, die genau wie in Ë der Aufreinigung von B dient, in die große Kolonne eingefasst, aber mittels einer Trennwand räumlich von dieser getrennt. Auch die übrige Funktionsweise ist identisch mit der thermisch gekoppelten Anordnung, sodass von einer thermisch gekoppelten, integrierten Trennwandkolonne gesprochen werden kann. Die Trennwandkolonne bietet den Vorteil von noch weiter verringerten Energieund Materialkosten. Ihr entscheidender Nachteil besteht allerdings darin, dass zusätzliche kostenrelevante Betriebsparameter berücksichtigt werden müssen, welcheseine effiziente Auslegung und praktische Anwendung dieses Kolonnentyps bis etwa zur Jahrtausendwende unmöglich machten. Frühe erfolgversprechende Untersuchungen gehen auf die Firma Krupp Uhde GmbH zurück. Ihr gelang es unter Verwendung eines evolutionären Algorithmus (EA), möglichst kostengünstige Kombinationen von Betriebsparametern in einer entsprechenden Prozesssimulation aufzuspüren und diese mit einer kleinen Testanlage zu verifizieren.[5] Das diesem Bericht zugrunde liegende Desgin-Project k basiert auf ebenjenen Untersuchungen. 2.3.1 Industrielles Beispiel: Aromaten-Aliphaten-Trennung[5] extraktive Seit circa 15 Jahren werden erste Trennwandkolonnen in der Industrie eingesetzt. Pionier auf diesem Gebiet ist Krupp Uhde, die zusammen mit Aral Aromatics (inzwischen: Arsol Aromatics) eine erste Trennwandkolonne entwickelten. Sie basiert c auf dem patentrechtlich geschützten Morphylane Prozess – einer direkten Sequenz zur Trennung von Aromaten und Aliphaten mit Hilfe von N -Formylmorpholin als Entrainer. Die zunächst noch als Pilot Plant konstruierte und ausgelegte Anlage zeigte schnell vielversprechende Ergebnisse, die den Weg zu einer großtechnischen Anwendung von extraktiven Trennwandkolonnen ebnen. Die folgende Grafik stellt c den klassischen Morphylane Prozess und die darauf basierte Trennwandkolonne auf Basis von Daten aus dem Jahre 2005 gegenüber. 8 2.4 Das vorliegende Trennproblem Abbildung 4: Vergleich der Konzepte der extraktiven Rektifikation.[6] Hervorhebenswert ist die beeindruckende Energieersparnis von 16 % gegenüber der direkten Trennsequenz. Ebenfalls von Vorteil sind die geringeren Materialkosten, da weniger Bauteile benötigt werden, sowie die Platzersparnis von 60-80 %. Unterm Strich bietet die Trennwandkolonne somit immense Investitions- und Betriebskosteneinsparungen. 2.4 Das vorliegende Trennproblem Das diesem Bericht zugrunde liegende Trennproblem ist die Trennung eines AliphatenAromaten-Gemisches, welches durch das Modellsystem Cyclohexan-Benzol repräsentiert sein soll. Der Siedepunktsunterschied beider Komponenten beträgt lediglich 0.7 K, sodass eine schleppmittelfreie, rektifikative Trennung wirtschaftlich unmöglich ist. Die extraktive Rektifikation unter Verwendung des Schleppmittels N -Formylmorpholin eignet sich hingegen hervorragend zur Trennung dieses Stoffgemisches. Dieser Umstand soll kurz anhand der beiden in Abbildung 5 gezeigten T-x,y-Diagramme erläutert werden. Ihnen ist zu entnehmen, dass ein Gemisch aus Cyclohexan und 2 Grundlagen 9 Benzol bei 77.3 ◦ C ein Azeotrop von der ungefähren Zusammensetzung 1:1 (eher 9:11) aufweist, wohingegen das Benzol-NFM-Gemisch kein Azeotrop bildet und aufgrund der großen Siedepunktsdifferenz von 156 K leicht zu trennen ist. Folglich stellt N -Formylmorpholin ein geeignetes Schleppmittel zur extraktiven Rektifikation eines Cyclohexan-Benzol-Gemisches dar. Abbildung 5: Mit UNIFAC berechnete T-x,y-Diagramme der binären Gemische C6 C6 /C6 C12 und C6 C6 /NFM. Kapitel 3 Simulation Alle im Folgenden beschriebenen Simulationen wurden mit Hilfe von Aspen Plus in der Programmversion 8.6 realisiert. Als Rechenmethode wurde UNIFAC ausgewählt. Als Feedstrom wurden 200 kmol/h Benzol und 100 kmol/h Cyclohexan vorgegeben. Als Energiepreise wurden die in Aspen defaultmäßig eingestellten 1.77939 · 10−8 US$/cal für Wärme und 8.87502 · 10−10 US$/cal für Wasser verwendet. 3.1 Direkte Sequenz Zunächst wurde die direkte Sequenz simuliert. In Abbildung 6 sind das zugrunde liegende Schema sowie das Flowsheet der fertigen Aspen Plus Simulation gegenüber gestellt. Abbildung 6: Schematische (links)[6] und simulierte Darstellung (rechts) der direkten Sequenz. 12 3.2 Trennwandkolonne Dabei sind die einander entsprechenden Kolonnen gleichfarbig hervorgehoben. In der ersten kolonne (grün) wird Cyclohexan am Kopf erhalten und das Benzol-NFMGemisch dem Sumpf entnommen. Es wird anschließend in die Regeneratorkolonne (rot) eingespeist und getrennt. Das Sumpfprodukt NFM wird in die erste Kolonne zurückgeführt. Durch Simulation der direkten Sequenz konnte bereits ein gutes Gefühl für sinnvolle Betriebsparameter erhalten werden, welches sich als hilfreich bei der Auslegung der im nächsten Abschnitt beschriebenen Trennwandkolonne erweisen sollte. Eine Kostenoptimierung wurde jedoch nicht vergenommen. 3.2 Trennwandkolonne Nachdem die relativ einfache direkte Trennsequenz erfolgreich simuliert werden konnte, erfolgte die Simulation der deutlich anspruchsvolleren extraktiven Trennwandkolonne. Abbildung 7 zeigt eine Gegenüberstellung des zugrunde liegenden Schemas und des dazugehörigen, jedoch noch stark vereinfachten Flowsheets der Aspen Plus Simulation. Erneut sind einander entsprechende Kolonneteile gleichfarbig hervorgehoben. Abbildung 7: Schematische (links)[6] und simulierte Darstellung (rechts) der extraktiven Trennwandkolonne. 13 3 Simulation Das Benzol-Cyclohexan-Gemisch wird in einen mittleren Boden und der NFMStrom in einen höheren Boden der grün unterlegten Kolonne („COLLEFT“) eingespeist. Das leichtersiedende Cyclohexan wird direkt am Kopf abgezogen und das mitgeschleppte Benzol fließt zusammen mit dem NFM in die blau unterlegte Stripperkolonne („STRIP“) hinab, in dessen Sumpf das Löungsmittel regeneriert und an „COLLEFT“ zurückgeführt wird. Am Kopf der Stripperkolonne wird der mit Benzol angereicherte Benzol-NFM-Dampf auf die Kolonnen „COLLEFT“ und „COLRIGHT“ aufgeteilt. In der letztgenannten wird das Benzol vom restlichen NFM abgetrennt und als Kopfprodukt erhalten, während das NFM in die Stripperkolonne hinabfließt. Das finale Flowsheet, welches neben der vollständigen Kolonnenanordnung auch die Namen aller Stoff- und Wärmeströme enthält, ist in der folgenden Abbildung dargestellt. Abbildung 8: Finales Flowsheet Trennwandkolonne. Im Vergleich zur vereinfachten Darstellung aus Abbildung 7 sind der Mixer „MIXSOLV“ für den Makeup-Strom sowie der Wärmetauscher „EXC“ nach der Stripperkolonne hinzugekommen. Letzerer kühlt den regenerierten NFM-Strom auf 85 ◦ C ab, ehe er „COLLEFT“ zugeführt wird. In einer realen Kolonne sollten die beim Abkühlen aufgenommene Energiemenge „QEXC“ sowie die beim Kondensieren der Kopfprodukte freigesetzten Wärmemengen „QCLEFT“ und „QCRIGHT“ zur 14 3.2 Trennwandkolonne Deckung des Energiebedarfs „QRSTRIP“ im Verdampfer genutzt werden. Eine entsprechende Modifikation des Flowsheets gelang uns jedoch nicht. Von entscheidender Bedeutung für die angestrebte Kostenminimierung dieser Trennwandkolonne sind die Energiekosten, deren Betrag unmittelbar mit den Wärmeströmen – allen voran dem des Verdampfers „QRSTRIP“ – zusammenhängt. Aufgrund technischer Schwierigkeiten konnten nämlich weder Gesamtjahreskosten noch Betriebs- und Materialkosten berücksichtigt werden (für Details siehe Anmerkung S. 20). Kostenrelevante Betriebsparameter. Weiterhin enthält Abbildung 8 eine Übersicht der kostenrelevanten Betriebsparameter. Sie werden in verschiedenen Kästchen aufgeführt, die entsprechend ihrem zugehörigen Kolonnenbauteil grün, blau oder rot eingefärbt sind. So wirken sich für „COLLEFT“ beispielsweise die Bodenzahl nstages COLLEFT, der Zulaufboden des Entrainers stage NFMIN, der Feedboden stage FEED und die Flowrate des Entrainers flowrate NFMIN auf die Kosten aus. Nimmt man die Bodenzahlen der beiden übrigen Kolonnen nstages STRIP und nstages COLRIGHT hinzu, ergeben sich bereits sechs kostenrelevante Parameter. Dazu kommen noch drei weitere, namentlich die Rücklaufverhältnisse der beiden Kolonnen reflux ratio COLLEFT und reflux ratio COLRIGHT sowie das Verhältnis der Dampfströme VLEFT/VRIGHT, die vom Stripper auf diese beiden Kolonnen aufgeteilt werden. Insgesamt handelt es sich bei der Kostenminimierung der simulierten Trennwandkolonne also um ein neundimensionales Problem, das dem Auffinden des globalen Minimums einer neundimensionalen Hyperfläche entspricht. Das Lösen einer solchen Aufgabenstellung erfordert jedoch das Erzeugen enormer Datenmengen, die ihrerseits nur nach einer immensen Rechenzeit erhalten werden können. Weiterhin gilt es zu bedenken, dass jeder Satz dieser neun Parameter nicht nur seine eigenen Kosten besitzt, sondern auch über seine eigenen Produktreinheiten verfügt, was sich als problematisch im Hinblick auf die Vergleichbarkeit der Ergebnisse auswirkt. Das Problem der nicht vergleichbaren Produktreinheiten kann allerdings dadurch umgangen werden, dass zunächst einmal nur die ersten sechs genannten Parameter an Aspen Plus übergeben werden. Sobald die Simulation gestartet wird, ist es intern mit Hilfe von DesignSpecs möglich, die Rücklaufverhältnisse von „COLLEFT“ und „COLRIGHT“ so einzuregeln, dass die gewünschte Produktreinheit von >99 % sichergestellt ist. Da aus den angepassten Rücklaufverhältnissen auch noch das Verhältnis VLEFT/VRIGHT berechnet werden kann, lässt sich das ursprünglich neundimensionale Problem auf ein sechsdimensionales reduzieren, indem drei Parameter in jeder Simulation „on the fly“ berechnet werden. 3 Simulation 15 Aufgrund ihrer Sonderstellung werden diese 3 Parameter auch verblasst in einer grauen Box dargestellt. Aber auch das Aufspüren des globalen Minimums einer nur noch sechsdimensionalen Hyperfläche ist an das Erzeugen großer Datenmengen geknüpft. Es bedarf einer vollständig automatisierten Vorgehensweise, die in diesem Fall über eine Verzahnung mit Microsofts Excel realisiert wird. Mit Hilfe der beiden Strategien a) systematische Variation in Form eines Scans und b) gezielte Optimierung der kostenrelevanten Betriebsparameter unter Anwendung eines evolutionären Algorithmus soll die Kostenoptimierung im folgenden Kapitel vorgenommen werden. Kapitel 4 Optimierung der Trennwandkolonne Das Finden des globalen Minimums einer sechsdimensionalen Hyperfläche erfordert eine vollständig automatisiere Vorgehensweise. Sie sollte sicherstellen, dass ausreichend viele (und dazu noch möglichst gute) Kombinationen aus den sechs Parametern identifiziert werden. Im Idealfall sollte sie sogar in der Lage sein, die zum globalen Kostenminimum gehörende Kombination zu finden. Bewerkstelligt wird dies mit Hilfe eines selbstgeschriebenen Computerprogramms, das auf der einen Seite verschiedene Parameterkombinationen durchspielt und diese als Input an Aspen Plus übermittelt, wo auf der anderen Seite die Simulation stattfindet und relevante Größen wie Kosten, Wärmemengen, Produktreinheiten, Fehlermeldungen etc. als Output zurückgegeben werden. Weiterhin müssen die so erzeugten Daten verwaltet und gesammelt werden. Aufgrund der guten Dokumentation in der Literatur bietet sich zur Variation des Inputs und Verwaltung des Outputs Microsofts Tabellenkalkulationssoftware Excel an. Die notwendige Schnittstelle zwischen Aspen Plus und Excel wird mit Hilfe der in Microsoft Office Produkten implementierten Programmiersprache Visual Basic (kurz VBA, engl. für Visual Basic for Applications) hergestellt. Abbildung 9 fasst die soeben erläuterte, programmiertechnische Herausforderung dieses Design-Projects grafisch zusammen. Abbildung 9: Programmiertechnische Herausforderung. 18 4.1 Scans Ein weiterer Vorteil von Excel ist der darin implementierte evolutionäre Algorithmus (EA) der Firma Frontline Systems. Er ist für die Optimierung vieldimensionaler Probleme ausgelegt und soll daher zur gezielten Optimierung der Trennwandkolonne herangezogen werden. Neben diesem gezielten Verfahren enthält dieses Kapitel ebenfalls die Ergebnisse einer systematischen Variation der Betriebsparameter in Form eines Scans. Er wird in Unterkapitel 4.1 erläutert und dient im Wesentlichen dem „Kennenlernen“ der Simulation (kosteneffiziente Punkte, Anteil fehlerhafter Simulationen, sinnvolle Parameterkombinationen) sowie als Referenz für die in 4.2 vorgestellten Ergebnisse unter Anwendung des evolutionären Algorithmus. In Abschnitt 4.3 werden die Ergebnisse des Scans und des EA schließlich verglichen. 4.1 Scans 4.1.1 Vorgehen Nachdem die Trennwandkolonne erfolgreich simuliert werden konnte, musste eine Schnittstelle zwischen Aspen Plus und Excel geschaffen werden. Es wurde ein Programm geschrieben, welches zunächst nur einen Satz aus sechs Betriebsparametern aus Excel einliest, diesen als Input an Aspen übergibt und nach erfolgter Simulation die gewünschten Outputgrößen zusammen mit dem dazugehörigen Input in ein ExcelArbeitsblatt überträgt. Dieses Programm stellt den Kern des Scans dar. Sobald es stabil funktionierte, wurde es auf beliebig viele Sätze erweitert, indem nun für jeden Parameter Ober- und Untergrenzen sowie dazugehörige Inkremente vorgegeben und diese mit Hilfe einer Schleifenkonstruktion im Programm eingelesen und abgearbeitet wurden. Anmerkung: Da die Anwendung des evolutionären Algorithmus in Kapitel 4.2 wesentliche Teile vom Programmcode des Scans übernimmt und darüber hinaus um einige weitere ergänzt werden muss, wurde zunächst der Scan programmiert. Weil er weiterhin als Referenz für die Ergebnisse des EA dient und die damit verbundene Erzeugung einer repräsentativen Datenmenge für einen Teilbereich der Hyperfläche (insgesamt wurden 29025 Kombinationen gerechnet) eine Woche dauerte, konnte in der Zwischenzeit am Programmcode für die Anwendung des EA gearbeitet werden. Im Folgenden wird die Arbeitsweise des Scans knapp anhand eines Flussdiagramms erläutert. Der kommentierte, vollständige Programmcode ist inklusive einem exemplarischen Output in Anhang A ab Seite 35 aufgeführt. 4 Optimierung der Trennwandkolonne 19 Abbildung 10: Flussdiagramm Scan. Abbildung 11: Gewählte Scanparameter. Zunächst müssen im Excel-Arbeitsblatt die gewünschten Scanparameter vorgegeben werden (siehe Abb. 11). Danach wird durch Klicken auf die Schaltfläche „Run Scan“ ein Programm ausgeführt, welches prüft, ob die Simulation geladen wurde und sie gegebenenfalls lädt (zu diesem Zweck sind der Dateipfad und -name oben links im Arbeitsblatt eingetragen). Anschließend werden die Ober- und Untergrenzen sowie Inkremente eines jeden Parameters eingelesen und eine Schleifenkonstruktion ausgeführt, in der alle vorgegebenen Kombinationen berücksichtigt werden. Innerhalb dieser Schleifen werden stets die Parameter an Aspen übergeben, die Simulation zurückgesetzt und danach ausgeführt, der Konvergenzstatus der Simulation überprüft und zusammen mit den Inputparametern und Outputgrößen in das Excel-Arbeitsblatt 20 4.1 Scans geschrieben (Abb. 23 auf S. 36 zeigt ein Beispiel). Nachdem auf diese Weise alle Kombinationen abgearbeitet wurden, wird der Scan gestoppt. Anmerkung: Aufgrund eines technischen Problems (wir vermuten es lag an der uns zugänglichen Programmversion von Aspen Plus) konnten weder die Betriebsnoch die Materialkosten aus der fertigen Simulation an Excel übergeben werden. Sie konnten zwar mit Hilfe des Aspen Process Economic Analyzers berechnet werden, wurden jedoch nicht im „Variable Explorer“ gelistet, demjenigen Verzeichnis, dem sämtliche anderen relevanten Outputgrößen entnommen wurden. In der Folge konnten keine für Optimierungen gebräuchlichen Gesamtjahreskosten (engl. total annualized costs, TACs) berechnet werden. Auch die Berücksichtigung aktueller Preise für die verwendeten Chemikalien oder Bauteile wurde damit hinfällig. Letztendlich konnten nur die Energiekosten an Excel übergeben werden, was eine merkliche Verkürzung der Rechenzeit mit sich brachte, da der Aspen Process Economic Analyzer deaktiviert werden konnte. Mit der Begründung jedoch, dass die Energiekosten einem signifikanten Anteil der Betriebskosten entsprechen und dass sich die vorliegende Arbeit für die Optimierung unter Anwendung des EA und nicht einer möglichst realistisch ausgearbeiteten Simulation verschrieben sieht, soll die Verwendung von Energiekosten als Grundlage der Optimierung gerechtfertigt sein. 4.1.2 Ergebnisse Die gewählten Scanparameter sind Abbildung 11 zu entnehmen. Insgesamt wurden 29025 Kombinationen verschiedener Betriebsparameter (= 5 · 3 · 3 · 5 · 3 · 43, Spalte G) gerechnet. Die Rechenzeit betrug dabei circa 7 Tage. Mit Ausnahme der NFMFlowrate, für die insgesamt 43 Werte berücksichtigt wurden, wurden für die übrigen Parameter relativ schmale Grenzen von lediglich 3 bis 5 Werten eingesetzt. Die Auswahl der Parameter erfolgte dabei nicht willkürlich, sondern auf Basis fehlerfrei konvergierter Simulationen wie beispielsweise der Folgenden: 4 Optimierung der Trennwandkolonne 21 1. nstages COLLEFT = 50 2. stage NFMIN = 6 3. stage FEED = 24 4. nstages COLRIGHT = 5 5. nstages STRIP = 6 6. flowrate NFMIN = 535 kmol/h Fehlerbehaftete Simulationen. Abbildung 12 zeigt den Anteil nicht konvergierter, fehlerbehafteter Simulationen. Mit 69.3% (linkes Diagramm.) werden etwa zwei von drei Simulationen nicht korrekt beendet. Der Anteil fehlerfrei konvergierter Simulationen scheint mit 30.7% verhältnismäßig hoch, würde aber sicherlich deutlich kleiner ausfallen sobald der Scanbereich weniger schmal um fehlerfreie Simulationen gefasst wäre. Im rechten Diagramm ist aufgeschlüsselt, an welcher Stelle der Simulation keine Konvergenz erreicht werden konnte. Dies betrifft hauptsächlich den „$OLVER01“ und nur in geringerem Maße die Blöcke „COLLEFT“, „MIXSOLV“ und „SPLITTER“. Abbildung 12: Anteil nicht konvergierter Simulationen. Expemplarischer Ausschnitt der Hyperfläche. Abbildung 13 zeigt die Energiekosten in Abhängigkeit der NFM-Flowrate und der Bodenzahl von „COLLEFT“. Hohe Kosten entsprechen dabei einer blassgelben und niedrige einer tiefvioletten Färbung. Erwartungsgemäß führen hohe Flowrates auch zu hohen Energiekosten, da größere Mengen N -Formylmorpholin im Verdampfer erhitzt werden müssen. Zu geringe Flowrates führen zu ebenfalls zu hohen Energiekosten, da sie mit schlechteren 22 4.1 Scans Abbildung 13: Zweidimensionaler Ausschnitt der Hyperfläche. Trennleistungen verbunden sind, die wiederum mit erhöhten Rücklaufverhältnissen ausgeglichen werden, was schließlich zu einem größerem Energiebedarf vom Verdampfer führt. Auf diese Weise gibt es zu jeder Bodenzahl eine optimale Flowrate. Bei mehr als 45 Böden beträgt sie 460 kmol/h (roter Rahmen in Abb. 13). Bei weniger als 45 Böden nimmt die Trennleistung rapide ab, was letztlich zu einem starken Anstieg der Energiekosten führt (Pfeil in Abb. 13). Nicht in der Abbildung dargestellt sind die Energiekosten für Ströme < 450 kmol/h. Sie steigen so rapide an (für 440 kmol/h sind es bereits doppelte Kosten von > 9 · 106 US$/Jahr), dass sie nicht sinnvoll in der Farbcodierung berücksichtigt werden können. Die Ergebnisse der zugrunde liegenden Simulationen sind ohnehin fragwürdig, da sie nicht zur Konvergenz gebracht werden konnten. Im Gegensatz dazu konvergierten alle 21 · 21 = 441 in der Abbildung aufgeführten Simulationen, sodass das qualitative Verhalten der Trennwandkolonne als richtig wiedergegeben anzusehen ist. Übersicht der Ergebnisse. Abbildung 14 zeigt die Scanergebnisse in Form eines Histogramms. Parameterkombinationen, die zu geringen Energiekosten führen sind links angesiedelt und Kombinationen mit höheren Kosten entsprechend weiter rechts. Zur besseren Übersichtlichkeit sind alle Simulationen mit Energiekosten > 4.55 · 106 US$/Jahr zu einem Balken zusammengefasst. Tatsächlich setzen sie sich aus vielen Intervallen geringer Intensität und zum Teil hoher Kosten zusammen. Grundlage des Histogramms sind die 8908 fehlerfrei konvergierten Simulationen. Die fehlerhaften 69.3% wurden nicht berücksichtigt. 4 Optimierung der Trennwandkolonne 23 Unter den 8908 Kombinationen befinden sich lediglich 0.45% im kostengünstigsten Intervall. Die 10 besten Parameterkombinationen sind in Abb. 15 aufgeführt. Sie weisen alle fast identische Energiekosten von 4 479 193 ± 3 US$/Jahr auf und zeigen die Bevorzugung einer NFM-Flowrate von 460 kmol/h, 7 Böden in der rechten Kolonne und einem Zulaufboden von 7 bzw. 25 für NFM bzw. das Benzol-Cyclohexan-Gemisch (vgl. Flowsheet der Simulation auf S. 13). Die Bodenzahl der Stripper- sowie der Extraktionskolonne (zumindest ab 45 Böden, siehe Abb. 13) wirken sich hingegen weniger stark auf die Energiekosten aus. Unter den 10 gezeigten Kombinationen führt vermutlich die letzte zu den geringsten Gesamtjahreskosten, da sie die wenigsten Trennböden benötigt. Abbildung 14: Histogramm Scanergebnisse. Abbildung 15: Die 10 besten Sätze von Betriebsparametern im Scan. 24 4.2 Optimierung mittels evolutionärem Algorithmus 4.2 Optimierung mittels evolutionärem Algorithmus Zur gezielten Optimierung der Betriebsparameter wurde der in Excel integrierte Solver der Firma Frontline Systems genutzt. Dieser bietet die Möglichkeit mittels unterschiedlicher Optimierungsalgorithmen den Wert einer Zielzelle (die Energiekosten) in Abhängigkeit anderer Zellen (den Betriebsparametern) zu optimieren. Neben dem verwendeten evolutionären Algorithmus gibt es weiterhin die Optimierungsverfahren GRG Nonlinear und Simplex-LP. Beide Verfahren wurden nicht auf das vorliegende Problem angewendet. Da der Solver ausschließlich innerhalb von Excel arbeitet und der Programmcode nicht eingesehen werden kann, musste eine Schnittstelle zwischen dem Solver und Aspen geschaffen werden, die das Abgreifen von Zwischenergebnissen zu Analysezwecken ermöglicht. Konkret bedeutet dies, dass bei beispielsweise 20 gewünschten Optimierungsschritten, 20 einzelne Solveriterationen durchzuführen sind und nach jeder einzelnen die Ergebnisse in das Excel-Arbeitsblatt übertragen werden. Die vielen internen Parametervariationen, die dabei in einer einzelnen Solveriteration durchgeführt werden, konnten jedoch nicht nachvollzogen werden. Es ist ohnehin davon auszugehen, dass das Nachvollziehen der exakten Arbeitsweise des EA seitens Frontline Systems auch gar nicht erwünscht ist. 4.2.1 Vorgehen Im Folgenden wird die Optimierung mittels EA anhand des in Abbildung 16 dargestellten Flussdiagramms erläutert. Der kommentierte, vollständige Programmcode ist inklusive einem exemplarischen Output in Anhang B ab Seite 43 aufgeführt. Nach dem Eingeben der Betriebsparameter und ihrer jeweiligen Ober- und Untergrenzen, welche für die Nutzung des EA zwingend erforderlich sind, wird die Optimierung durch Betätigen der Schaltfläche „Solve“ gestartet (siehe Abb. 17). Es wird ein VBA-Programm ausgeführt und eine Schleife gestartet, die von 1 bis zur gewünschten Anzahl der Optimierungsschritte „#“ läuft. Zu Beginn eines jeden Optimierungsschrittes wird der Solver zurückgesetzt. Anschließend werden die be- 4 Optimierung der Trennwandkolonne 25 Abbildung 16: Flussdiagramm zur Anwendung des EA. Abbildung 17: Gewählte Solverparameter und -grenzen. nötigten Solveroptionen1 sowie Ober- und Untergrenzen an den Solver übergeben und der Optimierungsalgorithmus über eine einzelne Solveriteration gestartet. Dabei ist zu beachten, dass mit Ausnahme der NFM-Flowrate alle übrigen Parameter ganzzahlige Größen sind und dass dies dem Solver entsprechend mitgeteilt wird. Abschließend werden die Ergebnisse dieser einen internen Solveriteration tabellarisch aufgetragen (siehe dazu Abb. 26 auf S. 44), die erhaltenen Parameter für den nächsten Optimierungsschritt in Spalte B eingetragen und der nächste Optimierungsschritt gestartet. 1 Excels Solver verfügt über eine ganze Reihe von Optionen. Diese sind auf der Homepage https://msdn.microsoft.com/de-de/library/office/ff195446.aspx dokumentiert und der Vollständigkeit halber in Anhang C aufgelistet. Eine systematische Untersuchung, inwiefern sich die Veränderung einer jeden Solveroption auf die Optimierung auswirkt, wurde nicht durchgeführt. 26 4.2 Optimierung mittels evolutionärem Algorithmus Die Schnittstelle zwischen Aspen und dem Solver bildet die Zelle E11. Ihr ist die benutzerdefinierte Funktion „cost“ zugewiesen, die dem in B4–B9 aufgeführten Satz von Betriebspsarametern seine jeweiligen Energiekosten zuordnet. „Cost“ aktualisiert sich bei jeder Veränderung der Parameter, indem ein VBA-Code aufgerufen wird (siehe Anhang B), welcher den Inhalt der Zellen B4–B9 an Aspen übergibt, die Simulation durchführt und das Ergebnis in Form von jährlichen Energiekosten als Funktionswert ausgibt. Im Falle einer fehlerhaften Simulation wird eine Straffunktion aktiviert, die E11 den Wert 1 · 1011 zuordnet. Dieser immens hohe Wert bewirkt, dass der dazugehörige Satz an Betriebsparametern bei einer Optimierung nicht weiter berücksichtigt wird oder zumindest nur eine geringe Priorität erhält. 4.2.2 Arbeitsweise evolutionärer Algorithmen Die grundsätzliche Funktionsweise evolutionärer Algorithmen ist in Abbildung 18 dargestellt. Da sie an Vorgänge aus der biologischen Evolution angelehnt ist, werden entsprechende biologische Termini wie Generation, Population, Individuen, Mutation, etc. verwendet. Abbildung 18: Arbeitsweise eines evolutionären Algorithmus.[7] In der Initialisierung wird die erste Generation von Lösungskandidaten/Individuen innerhalb der angegebenen Grenzwerte erzeugt. Diese Generation enthält 4 Optimierung der Trennwandkolonne 27 neben den vorgegebenen Startwerten weitere zufällige oder nach bestimmten Kriterien erzeugte Lösungskandidaten. Jedes Individuum besitzt seine eigenen Eigenschaften (hier die 6 Betriebsparameter) und die Gesamtheit aller Individuen wird als Population bezeichnet. Im Schritt Evaluation werden die Individuen mit Hilfe einer Fitnessfunktion beurteilt, die Individuen mit erhöhter Fitness auch eine höhere Fortpflanzungswahrscheinlichkeit zusichert. Bewertungsgrundlage der Fitnessfunktion ist im vorliegenden Fall ein kleiner Wert Zielfunktion „cost“. Im Schritt Rekombination werden die Eigenschaften guter Lösungskandidaten kombiniert und in Mutation werden diese Eigenschaften (mehr oder weniger stark) per Zufall verändert. Nach diesen vier Schritten wird eine weitere Generation von Lösungskandidaten erzeugt und die Schritte Evaluation, Rekombination und Mutation so lange wiederholt bis entweder eine geeignete Lösung gefunden oder die maximale Iterationsanzahl erreicht wurde. Generelle Anmerkungen: (i) Durch die Arbeitsweise eines EA erhöht sich gegenüber linearen Optimierungsalgorithmen die Wahrscheinlichkeit, das globale Optimum zu finden anstatt in ein Lokales zu laufen. (ii) EA liefern meist nicht die besten, aber häufig sehr gute Ergebnisse nahe dem globalen Minimum und das in kurzer Zeit. Ein auf diese Ergebnisse aufgesetztes lineares Optimierungsverfahren sollte die erhaltenen Resultate weiter optimieren. (iii) EA verschiedener Hersteller sind in der Regel auch verschieden umgesetzt, sodass sie auf unterschiedlichen Wegen zum Ziel führen. Ihnen liegen beispielsweise nicht äquivalente Mutations- und Rekombinationsoperatoren zugrunde. Mathematische Details der jeweiligen Vorgehensweise sind dabei Firmengeheimnis. (iv) Oft werden EA auch mit künstlichen neuronalen Netzen oder lokaler Suche kombiniert. (v) Es gibt eine ganze Reihe von Solveroptionen in Excel, die der Übersicht halber in Anhang C aufgeführt sind. Die im nächsten Abschnitt vorgestellten Ergebnisse wurden teilweise für verschiedene Optionen erhalten. Eine systematische Untersuchung, inwiefern sich die Veränderung einer jeden Solveroption auf die Optimierung auswirkt, wurde nicht durchgeführt. 28 4.2 Optimierung mittels evolutionärem Algorithmus 4.2.3 Ergebnisse Abbildung 19 zeigt die Ergebnisse von fünf Optimierungen und dem besten Scanergebnis. Dargestellt sind die Energiekosten in Abhängigkeit des jeweiligen Optimierungsschrittes. Zur besseren Übersichtlichkeit wurden die einzelnen Graphen gemäß dem Erstelldatum benannt und auf die Angabe der dazugehörigen Grenzen, Startwerte und Solveroptionen verzichtet. Sie werden mitunter im Fließtext erwähnt. Ferner sind die Ergebnisse nur bis zum 13ten Optimierungsschritt aufgeführt, da danach keine Verbesserung der Ergebnisse mehr beobachtet werden konnte. Abbildung 19: Ergebnisse EA. Die Blindprobe vom 15.04.2015 liefert bereits ein adäquates Ergebnis innerhalb von 11 Iterationen (etwa 30 Minuten Rechenzeit pro Iteration). Die nach den Iterationen 9 bis 11 erhaltenen Energiekosten sind bereits niedriger als bei 98.6% der fehlerfrei konvergierten Simulationen aus dem Scan. Die optimierten Parameter liegen außerhalb des Scanintervalls. Der Versuch vom 21.04.2015 zeigt exemplarisch den Nachteil eines nicht linearen Optimierungsverfahrens: bei einem schlechten Startwert, zu groß gefassten Randbedingungen und einer zu kleinen Populationsgröße kann die Optimierung starken Schwankungen ausgesetzt sein. Die hohen Energiekosten weit außerhalb des dargestellen Bereichs (Iteration 7–11) sind Ergebnisse der Straffunktion bei fehlerhaft 4 Optimierung der Trennwandkolonne 29 konvergierten Simulationen. Trotzdem wurde in der 12ten Iteration eine einigermaßen kostengünstige Kombination gefunden. Der Versuch vom 24.04.2015 zeigt das Verhalten des Algorithmus bei engen Grenzen und einem bereits recht guten Wert nach der Initialisierung. Auf der einen Seite gibt es zwar kaum Schwankungen, dafür kann das Finden einer besseren Lösung auf der anderen Seite einige Zeit in Anspruch nehmen. So wurde nach der 10ten Iteration keine Änderung der Betriebsparameter mehr beobachtet, obwohl insgesamt ganze 79 Iterationen durchgeführt wurden. Dieser Umstand spricht für eine bereits sehr gute Lösung. Im Übrigen sind die Energiekosten ab Iteration 10 schon günstiger als alle fehlerfrei konvergierten Simulationen aus dem Scan, was für die gute Performance des Solvers spricht. Die optimierten Parameter liegen auch hier außerhalb des Scanintervalls. Der Versuch vom 27.05.2015, bei dessen Kriterienauswahl unsere bis dahin gesammelten Erfahrungen eingeflossen ist, liefert nach 11 Iterationen den insgesamt besten Wert. Für diese Optimierung wurde eine mäßig gute Initialisierung erhalten und deutlich größere Grenzen als bei 24.04.2015 vorgegeben. Infolgedessen waren stärkere Schwankungen der Energiekosten zu erwarten, welche auch beobachtet wurden. Aufgrund einer kleineren Populationsgröße im Vergleich zur Blindprobe dauerten die Iterationen nur circa 15 statt 30 Minuten. Auch hier liegen optimierten Parameter außerhalb des Scanbereichs. Die zugehörigen Energiekosten sind mit 4 468 587 US$/Jahr die geringsten, die in der vorliegenden Arbeit erzielt werden konnten. Die Randbedingungen bzw. Solverparameter, die dieser Optimierung zugrunde liegen, sind in Anhang B in Abb. 25 bzw. dem Programmcode ab Z. 26 aufgeführt. Die optimierten Betriebsparameter sind zusammen mit dem besten Scanergebnis Abbildung 20 zu entnehmen. Der Versuch 29.05.2015 zeigt eine Optimierung innerhalb der Grenzen des Scans. In diesem Test sollte herausgefunden werden, ob der Solver auch hier bessere Ergebnisse erzielen kann als der einigermaßen hochaufgelöste Scan. Tatsächlich gelang dieses Vorhaben nach einigen erfolglosen Versuchen erst mit Hilfe der Solveroptionen vom 27.05.2015 und nach der 13ten Iteration. Dieses Resultat unterstreicht erneut die Performance des EA als Optimierungstool. 30 4.3 Vergleich zwischen Scan und Solver 4.3 Vergleich zwischen Scan und Solver Abbildung 20 zeigt das Flowsheet der Aspen-Simulation zusammen mit den besten Ergebnissen des Scans und des Solvers. Abbildung 20: Gegenüberstellung der besten Scan- und Solverergebnisse. Zeigt der Vergleich der Energiekosten lediglich marginale Unterschiede mit einem leichten Preisvorteil für die Solverergebnisse, so sind die Unterschiede für Materialkosten relevante Parameter umso deutlicher. Denn hier ist die mittels EA optimierte Trennwandkolonne klar im Vorteil: die Bodenzahl aller drei Kolonnensegmente ist 4 Optimierung der Trennwandkolonne 31 geringer als beim Scan und auch die NFM-Flowrate ist merklich kleiner. Bedenkt man zudem den Zeitfaktor – zur Erinnerung: das Abscannen eines Bereich mit kleinen Parametervariationen dauerte circa eine Woche und die Optimierung mit geschickt gewählten Solveroptionen lediglich drei Stunden – wird der Vorteil eines EA zur Optimierung der extraktiven Trennwandkolonne noch offensichtlicher. Nichtsdestotrotz sind auch die mittels Solver erhaltenen Resultate ausbaufähig. Da davon auszugehen ist, dass der Solver bereits ein Ergebnis nahe des globalen Minimus gefunden hat, könnte dieses im Folgenden durch Anwendung eines linearen, gradientenbasierten Optimierungsverfahrens genauer identifiziert werden. Ferner muss erwähnt werden, dass die der Optimierung zugrunde liegende Simulation noch nicht detailliert ausgearbeitet worden ist und dass nach wie vor das Problem der optimierten Energiekosten und nicht das der optimierten Gesamtjahreskosten behandelt wurde. Kapitel 5 Zusammenfassung und Ausblick Ziel des Design-Projectsk war die Simulation und Kostenoptimierung einer extraktiven Trennwandkolonne zur Trennung eines Benzol-Cyclohexan-Gemisches mit Hilfe eines evolutionären Algorithmus (EA). Zur Simulation wurde Aspen Plus und zur Optimierung der in Microsoft Excel implementierte, evolutionäre Algorithmus der Firma Frontline Systems verwendet. Das Design-Project basiert auf 2004 publizierten Untersuchungen der Krupp Uhde GmbH. Zunächst wurde die einfacher zu realisierende direkte Trennsequenz simuliert. Die dabei gesammelten Erfahrungen über sinnvolle Betriebsparameter erwiesen sich als äußerst hilfreich bei der Auslegung der komplizierter realisierbaren Trennwandkolonne. Die Simulation der Trennwandkolonne selbst erfolgte mittels zweier Rektifikationskolonnen und einer Stripperkolonne. Für die Optimierung wurden 9 kostenrelevante Betriebsparameter berücksichtigt, von denen 3 unter der Maßgabe einer mindestens 99%igen Produktreinheit in Aspen und die übrigen 6 aus Excel heraus variiert wurden. Die Schnittstelle zwischen der Simulation auf der einen Seite und Excel auf der anderen wurde mit Hilfe der Programmiersprache Visual Basic geschaffen. Während die Übergabe der Betriebsparameter von Excel zu Aspen problemlos funktionierte, war es nicht möglich die Betriebs- und Materialkosten in automatisierter Weise aus Aspen in Excel zu übertragen. Für die anstehenden Untersuchungen musste stattdessen auf die Energiekosten zurückgegriffen werden. Noch bevor der evolutionäre Algorithmus zum Einsatz kam, wurde ein kleiner Bereich um eine fehlerfrei konvergierende Simulation herum abgescannt. Die erhaltenen Daten dienten in erster Linie als Referenz für die Optimierung mittels EA, gaben allerdings auch Aufschluss über den Anteil fehlerhafter Simulationen sowie 34 über generelle Trends kostengünstiger Kombinationen der Betriebsparameter. Ferner wurde gezeigt, dass im untersuchten Bereich weniger als 1% aller Simulationen zu kosteneffizienten Punkten führte. Die Optimierung mittels EA erfolgte für verschiedene Randbedingungen und Solveroptionen. Dabei konnte gezeigt werden, dass die Anwendung des EA gegenüber dem Scan deutlich schneller zu kostengünstigeren Ergebnissen führt (führen kann) und sich hervorragend zum Aufspüren von Betriebsparametern nahe des globalen Kostenminimums eignet. Es wurde aber auch gezeigt, dass bei einer ungeschickten Wahl der Randbedingungen und Solveroptionen weniger gute Ergebnisse erzielt werden können. Das beste Solverergebnis ist sowohl im Hinblick auf die Energiekosten als auch im Hinblick auf die mutmaßlichen Materialkosten günstiger als das beste Scanresultat. Zusammenfassend lässt sich sagen, dass die Optimierung einer extraktiven Trennwandkolonne unter Anwendung eines evolutionären Algorithmus prinzipiell möglich ist und bereits in einem Zeitraum von 1-2 Monaten durchgeführt werden kann. Sie erfordert Erfahrung im Umgang mit den Programmen Aspen Plus und Excel sowie elementare Kenntnisse der Programmiersprache Visual Basic. Dass die Qualität der erhaltenen Resultate maßgeblich von der Qualität der zugrunde liegenden Simulation abhängt, liegt zwar auf der Hand; dennoch galt das Hauptaugenmerk dem Erstellen eines Programms zur externen Optimierung und nicht einer bis ins letzten Detail ausgearbeiteten Simulation. In künftigen Studien könnte jedoch an diesem Defizit gearbeitet werden. Zunächst sollte aber dafür Sorge getragen werden, dass die Simulation hinsichtlich der Gesamtjahreskosten anstelle von Energiekosten optimiert werden kann. Sofern geschehen, stünden schon alle Tools bereit, um das vorliegende Trennproblem eingehender zu bearbeiten oder sich einem anderen, chemisch relevanteren und aktuelleren Problem zu widmen. Darüber hinaus könnte geprüft werden, ob sich die Simulationen auch parallel starten lassen, was, wenn es denn ginge, zu einer erheblichen Verkürzung der Rechenzeit führen würde und somit die Ausarbeitung einer noch detaillierten Simulation erlauben sollte. Im Rahmen einer fundierten und tiefergehenden Studie von tatsächlicher technischer Relevanz könnte auch die kommerziell erhältliche Version von Frontline Systems’ EA erworben werden und zum Einsatz kommen. Ferner könnten bei einem Trennproblem, das von mehr als 6 Betriebsparametern abhängt, Scans in Abhängigkeit ausgewählter Parameter durchgeführt werden, um neuronale Netze hinsichtlich der Kostenfunktion anzulernen und so die Optimierung mittels EA zu erleichtern. Ein entsprechendes Vorgehen wurde von Ge et al. berichtet. [8] Anhang A Programmcode Scan Auf den folgenden Seiten ist der kommentierte Programmcode für die Scans aufgeführt. Der Übersichtlichkeit halber sind das dazugehörige Flussdiagramm (mit Verweisen auf die jeweiligen Programmzeilen, Abb. 21) und ein Ausschnitt aus der ExcelArbeitsmappe (Abb. 22) abgebildet. Darüber hinaus enthält dieser Anhang einen Screenshot, der beispielhaft die in Excel verwalteten Daten eines Scans zeigt (Abb. 23). Abbildung 21: Flussdiagramm zur Erläuterung des Programmcodes. Abbildung 22: Ausschnitt Arbeitsmappe mit Scanparametern (gehören zu Abb. 13). 36 Abbildung 23: Verwaltete Daten bei einem Scan. A Programmcode Scan Es folgt der Programmcode: Option Explicit Global APsim As IHapp Global ws As Worksheet 5 10 15 20 Sub Main() Dim APsim As IHapp Set APsim = OpenSimulation() End Sub Public Sub runscan() ’declarations Dim start(5), fin(5), incr(5) As Double Dim i As Integer Dim ws As Worksheet Set ws = ActiveSheet ’simulation loaded? If APsim Is Nothing Then Call OpenSimulation End If a = 20 ’a is the line the results should be written in niter = ws.Cells(5, 11) 25 ’read upper limit and increments For i = 0 To 5 fin(i) = ws.Cells(i + 4, 5) incr(i) = ws.Cells(i + 4, 6) Next 30 35 40 45 50 55 60 ’loop over all parameters i = 1 start(0) = ws.Cells(4, 4) Do While start(0) <= fin(0) start(1) = ws.Cells(5, 4) Do While start(1) <= fin(1) start(2) = ws.Cells(6, 4) Do While start(2) <= fin(2) start(3) = ws.Cells(7, 4) Do While start(3) <= fin(3) start(4) = ws.Cells(8, 4) Do While start(4) <= fin(4) start(5) = ws.Cells(9, 4) Do While start(5) <= fin(5) ws.Cells(6, 11) = i ’check for old results (very helpful if the scan has broken) If ws.Cells(a, 8) = ““ _ Or ws.Cells(a, 9) = ““ _ Or ws.Cells(a, 10) = ““ _ Or ws.Cells(a, 11) = ““ _ Or ws.Cells(a, 12) = ““ _ Or ws.Cells(a, 13) = ““ _ Or ws.Cells(a, 14) = ““ _ Or ws.Cells(a, 15) = ““ _ Or ws.Cells(a, 16) = ““ _ Or ws.Cells(a, 17) = ““ _ Or ws.Cells(a, 18) = ““ Then ’************the “heart“ of the scan************ Call ExcelToAspenScan(start()) APsim.reinit Application.Wait (Now + TimeValue("00:00:05")) APsim.run Call CheckSimStat(a, APsim) Call PrintInputScan(i, a, start()) 37 38 65 70 75 80 85 90 95 100 105 110 115 120 Call PrintOutputScan(a) ’******************************************** End If start(5) = start(5) + incr(5) a = a + 1 i = i + 1 Loop start(4) = start(4) + incr(4) Loop start(3) = start(3) + incr(3) Loop start(2) = start(2) + incr(2) Loop start(1) = start(1) + incr(1) Loop start(0) = start(0) + incr(0) Loop MsgBox “Scan finished successfully ;-)“ End Sub Sub OpenSimulation() Dim path As String Dim file As String Set ws = ActiveSheet path = ws.Cells(1, 2) file = ws.Cells(2, 2) Set APsim = GetObject(path + file) End Sub Sub ExcelToAspenScan(start()) ’nstages COLLEFT APsim.Tree.Data.Blocks.COLLEFT.Input.Elements("NSTAGE").Value = start(0) APsim.Tree.Data.Blocks.COLLEFT.Input.PROD_STAGE.Elements("LLEFT").Value = start(0) APsim.Tree.Data.Blocks.COLLEFT.Input.PROD_STAGE.Elements("C6H12").Value = 1 APsim.Tree.Data.Blocks.COLLEFT.Input.FEED_STAGE.Elements("VLEFT").Value = start(0) ’stage NFMIN APsim.Tree.Data.Blocks.COLLEFT.Input.FEED_STAGE.Elements("NFMIN").Value = start(1) ’stage FEED APsim.Tree.Data.Blocks.COLLEFT.Input.FEED_STAGE.Elements("FEED").Value = start(2) ’nstages COLRIGHT APsim.Tree.Data.Blocks.COLRIGHT.Input.Elements("NSTAGE").Value = start(3) APsim.Tree.Data.Blocks.COLRIGHT.Input.PROD_STAGE.Elements("LRIGHT").Value = start(3) APsim.Tree.Data.Blocks.COLRIGHT.Input.PROD_STAGE.Elements("C6H6").Value = 1 APsim.Tree.Data.Blocks.COLRIGHT.Input.FEED_STAGE.Elements("VRIGHT").Value = start(3) ’nstages STRIP APsim.Tree.Data.Blocks.STRIP.Input.Elements("NSTAGE").Value = start(4) APsim.Tree.Data.Blocks.STRIP.Input.PROD_STAGE.Elements("NFMHOT").Value = start(4) APsim.Tree.Data.Blocks.STRIP.Input.PROD_STAGE.Elements("VSTRIP").Value = 1 APsim.Tree.Data.Blocks.STRIP.Input.FEED_STAGE.Elements("LLEFT").Value = 1 APsim.Tree.Data.Blocks.STRIP.Input.FEED_STAGE.Elements("LRIGHT").Value = 1 ’flowrate NFMIN APsim.Tree.Data.Streams.NFMIN.Input.TOTFLOW.Elements("MIXED").Value = start(5) APsim.Tree.Data.Blocks.STRIP.Input.Elements("BASIS_B").Value = start(5) End Sub A Programmcode Scan Public Sub CheckSimStat(a, APsim) Dim ihn, tmp As IHNode Dim tmp1, tmp2, tmp3, tmp4, tmp5 As String 125 130 135 140 145 150 155 160 165 170 175 180 tries = 0 tryagain: Set ihn = APsim.Tree.Data ’- - - - - - - - - - - ’avoid Runtime Error 91 If ihn Is Nothing Then Application.Wait (Now + TimeValue("00:00:01")) tries = tries + 1 If tries < 5 Then GoTo tryagain Else tryagain2: APsim.reinit APsim.run Application.Wait (Now + TimeValue("00:00:05")) GoTo tryagain End If End If ’- - - - - - - - - - - Set ihn = ihn.Elements("Results Summary") Set ihn = ihn.Elements("Run-Status") Set ihn = ihn.Elements(“Output“) Set ihn = ihn.Elements("PER_ERROR") errstat = ihn.Value If errstat = 0 Then ws.Cells(a, 24) = ““ ws.Cells(a, 25) = ““ ElseIf errstat = 1 Then ’write the error dialogue of Aspen Plus ws.Cells(a, 24) = "Problem(s):" Set tmp = ihn.Elements("1") tmp1 = tmp.Value Set tmp = ihn.Elements("2") tmp2 = tmp.Value Set tmp = ihn.Elements("3") tmp3 = tmp.Value Set tmp = ihn.Elements("4") tmp4 = tmp.Value tmp5 = tmp1 + tmp2 + tmp3 + tmp4 ws.Cells(a, 25) = tmp5 End If End Sub Sub PrintInputScan(i, a, start()) Dim ws As Worksheet Set ws = ActiveSheet ws.Cells(6, ws.Cells(a, ws.Cells(a, ws.Cells(a, ws.Cells(a, ws.Cells(a, ws.Cells(a, ws.Cells(a, End Sub 11) = i 1) = i 2) = start(0) 3) = start(1) 4) = start(2) 5) = start(3) 6) = start(4) 7) = start(5) 39 40 185 190 195 200 205 210 215 220 225 230 235 240 245 250 Public Sub PrintOutputScan(a) Dim ws As Worksheet Dim ihn As IHNode Set ws = ActiveSheet ’RR COLLEFT & RR COLRIGHT ws.Cells(a, 8) = APsim.Tree.Data.Blocks.COLLEFT.Output.Elements("RR").Value ws.Cells(a, 9) = APsim.Tree.Data.Blocks.COLRIGHT.Output.Elements("RR").Value tries = 0 ’VLEFT/VRIGHT tryagain: Set ihn = APsim.Tree.Data ’- - - - - - - - - - - ’avoid Runtime Error 91 If ihn Is Nothing Then Application.Wait (Now + TimeValue("00:00:01")) tries = tries + 1 If tries < 5 Then GoTo tryagain Else APsim.reinit APsim.run Application.Wait (Now + TimeValue("00:00:05")) GoTo tryagain End If End If ’- - - - - - - - - - - Set ihn = ihn.Elements("Flowsheeting Options") Set ihn = ihn.Elements("Calculator") Set ihn = ihn.Elements("CALCULAT") Set ihn = ihn.Elements(Öutput") Set ihn = ihn.Elements("WRITE_VAL") Set ihn = ihn.Elements("3") ’- - - - - - - - - - - ’avoid Runtime Error 91 If ihn Is Nothing Then Application.Wait (Now + TimeValue("00:00:01")) tries = tries + 1 If tries < 5 Then GoTo tryagain Else APsim.reinit APsim.run Application.Wait (Now + TimeValue("00:00:05")) GoTo tryagain End If End If ’- - - - - - - - - - - ws.Cells(a, 10) = ihn.Value ’Purity C6H12 [%] tryagain2: TOTFLOW = APsim.Tree.Data.Streams.C6H12.Output.Elements("TOT_FLOW").Value ’- - - - - - - - - - - ’avoid Runtime Error 91 If TOTFLOW = Leer Then Application.Wait (Now + TimeValue("00:00:01")) tries = tries + 1 If tries < 5 Then GoTo tryagain2 Else APsim.reinit APsim.run Application.Wait (Now + TimeValue("00:00:05")) GoTo tryagain2 End If End If A Programmcode Scan ’- - - - - - - - - - - tmp = APsim.Tree.Data.Streams.C6H12.Output.MOLEFLOW.MIXED.Elements("C6H12").Value ws.Cells(a, 11) = (tmp / TOTFLOW) * 100 255 ’Purity C6H6 [%] TOTFLOW = APsim.Tree.Data.Streams.C6H6.Output.Elements("TOT_FLOW").Value tmp = APsim.Tree.Data.Streams.C6H6.Output.MOLEFLOW.MIXED.Elements("C6H6").Value ws.Cells(a, 12) = (tmp / TOTFLOW) * 100 260 ’Purity NFM [%] TOTFLOW = APsim.Tree.Data.Streams.NFMHOT.Output.Elements("TOT_FLOW").Value tmp = APsim.Tree.Data.Streams.NFMHOT.Output.MOLEFLOW.MIXED.Elements("NFM").Value ws.Cells(a, 13) = (tmp / TOTFLOW) * 100 265 ’Temp NFMHOT [K] ws.Cells(a, 14) = APsim.Tree.Data.Streams.NFMHOT.Output.TEMP_OUT.Elements("MIXED").Value 270 275 280 285 ’Heat duties [Gcal/h] ws.Cells(a, 15) = APsim.Tree.Data.Streams.QRSTRIP.Output.Elements("QCALC").Value ws.Cells(a, 16) = APsim.Tree.Data.Streams.QEXC.Output.Elements("QCALC").Value ws.Cells(a, 17) = APsim.Tree.Data.Streams.QCLEFT.Output.Elements("QCALC").Value ws.Cells(a, 18) = APsim.Tree.Data.Streams.QCRIGHT.Output.Elements("QCALC").Value ’Energy costs [US$/year] tryagain3: Set ihn = APsim.Tree.Data If ihn Is Nothing Then Application.Wait (Now + TimeValue("00:00:01")) tries = tries + 1 If tries < 20 Then GoTo tryagain3 End If End If Set ihn = ihn.Elements(“Results Summary“) Set ihn = ihn.Elements(“Utility-Sum“) Set ihn = ihn.Elements(“Output“) Set ihn = ihn.Elements(“NET_COST“) ws.Cells(a, 19) = ihn.Value * 24 * 365.25 290 ’Operating costs [US$/year] –> not accessible :-( ’supposed path in variable exporer: ’“Data.Sizing and Costing.ExecutiveSummary.INVESTMENT:.Total Operating Cost“ ’ws.Cells(a, 20) = 295 ’Capital costs [US$] –> not accessible :-( ’supposed path in variable exporer: ’“Data.Sizing and Costing.ExecutiveSummary.INVESTMENT:.Total Project Capital Cost“ ’ws.Cells(a, 21) = 300 ’Total annualized costs [US$] –> not accessible :-( ’Formula: ’TAC = (Capital cost)/(payback period) + energy costs ’payback period = 5 years ’ws.Cells(a, 22) = 305 ’Date and time ws.Cells(a, 23) = Now End Sub 41 Anhang B Programmcode Solver Auf den folgenden Seiten ist der kommentierte Programmcode für die Anwendung des evolutionären Algorithmus aufgeführt. Der Übersichtlichkeit halber sind das dazugehörige Flussdiagramm mit Verweisen auf die jeweiligen Programmzeilen (Abb. 24) und ein Ausschnitt aus der Excel-Arbeitsmappe (Abb. 25) abgebildet. Darüber hinaus enthält dieser Anhang einen Screenshot, der beispielhaft die in Excel verwalteten Daten einer Optmierung mit dem Solver zeigt (Abb. 26). Die darin aufgeführten Daten gehören zu dem besten Ergebnis, das mit Hilfe des Solvers erzielt wurde (27.04.2015 in Abb. 20). Die dazugehörigen Solveroptionen sind dem Programmcode ab Zeile 26 zu entnehmen. Anmerkung: Beim Betrachen des Programmcodes fällt auf, dass in jedem Optimierungsschritt erneut die selben Solveroptionen (ab Z. 26) und Randbedingungen (ab Z. 45) vorgegeben werden. Diese Vorgaben sind jedoch nicht redundant und können nicht außerhalb der Optimierungsschleife gemacht werden, da der Solver in jedem Optimierungsschritt zurückgesetzt wird und diese Informationen benötigt, ehe er gestartet werden kann. 44 Abbildung 24: Flussdiagramm zur Erläuterung des Programmcodes. Abbildung 25: Ausschnitt der Arbeitsmappe mit den Start- und Randbedingungen. Abbildung 26: Verwaltete Daten bei der Verwendung des Solvers. 45 B Programmcode Solver Es folgt der Programmcode: Option Explicit Global APsim As IHapp Global ws As Worksheet 5 10 15 20 Sub Main() Dim APsim As IHapp Set APsim = OpenSimulation() End Sub Sub Solverer() Dim ws As Worksheet Set ws = ActiveSheet Dim niter, again, Iter, maxiter As Integer niter = 1 again = 1 maxiter = 50 For i = 1 To maxiter ws.Cells(13, 5) = niter ws.Cells(14, 5) = Now again = 1 SolverReset Iter = 1 25 30 35 40 45 50 55 60 ’Set solver options SolverOptions Iterations:=Iter, _ Precision:=“0,000001“, _ Convergence:=“0,0001“, _ StepThru:=True, _ Scaling:=False, _ Derivatives:=1, _ SolveWithout:=False, _ MutationRate:=“0,1“, _ RandomSeed:=0, _ PopulationSize:=15, _ MaxTimeNoImp:=1 SolverOk SetCell:=“$E$11“, _ MaxMinVal:=2, _ ValueOf:=0, _ ByChange:=“$B$4:$B$9“, _ Engine:=3, _ EngineDesc:=“Evolutionary“ ’Set boundary conditions SolverAdd CellRef:=“$B$4“, SolverAdd CellRef:=“$B$4“, SolverAdd CellRef:=“$B$4“, SolverAdd CellRef:=“$B$5“, SolverAdd CellRef:=“$B$5“, SolverAdd CellRef:=“$B$5“, SolverAdd CellRef:=“$B$6“, SolverAdd CellRef:=“$B$6“, SolverAdd CellRef:=“$B$6“, SolverAdd CellRef:=“$B$7“, SolverAdd CellRef:=“$B$7“, SolverAdd CellRef:=“$B$7“, SolverAdd CellRef:=“$B$8“, SolverAdd CellRef:=“$B$8“, SolverAdd CellRef:=“$B$8“, SolverAdd CellRef:=“$B$9“, SolverAdd CellRef:=“$B$9“, ActiveWorkbook.Save Relation:=4, Relation:=1, Relation:=3, Relation:=4, Relation:=1, Relation:=3, Relation:=4, Relation:=1, Relation:=3, Relation:=4, Relation:=1, Relation:=3, Relation:=4, Relation:=1, Relation:=3, Relation:=1, Relation:=3, FormulaText:=“Ganzzahlig“ FormulaText:=“$E$4“ FormulaText:=“$D$4“ FormulaText:=“Ganzzahlig“ FormulaText:=“$E$5“ FormulaText:=“$D$5“ FormulaText:=“Ganzzahlig“ FormulaText:=“$E$6“ FormulaText:=“$D$6“ FormulaText:=“Ganzzahlig“ FormulaText:=“$E$7“ FormulaText:=“$D$7“ FormulaText:=“Ganzzahlig“ FormulaText:=“$E$8“ FormulaText:=“$D$8“ FormulaText:=“$E$9“ FormulaText:=“$D$9“ 46 65 70 75 80 SolverSolve UserFinish:=True, ShowRef:=“showdown“ SolverFinish KeepFinal:=1 Call PrintInpSolver(niter) ws.Cells(13, 5) = niter ws.Cells(14, 5) = Now niter = niter + 1 Next If MsgBox(“Iterations finished, continue?“, vbYesNo) = vbYes Then GoTo continue i = 1 Else again = 0 End If End Sub Sub PrintInpSolver(niter) Dim ws As Worksheet Set ws = ActiveSheet 85 a = niter + 16 90 ws.Cells(a, ws.Cells(a, ws.Cells(a, ws.Cells(a, ws.Cells(a, ws.Cells(a, ws.Cells(a, 1) 2) 3) 4) 5) 6) 7) = = = = = = = niter ws.Cells(4, ws.Cells(5, ws.Cells(6, ws.Cells(7, ws.Cells(8, ws.Cells(9, 2) 2) 2) 2) 2) 2) 95 Costs = ws.Cells(11, 5) ws.Cells(a, 8) = Costs ws.Cells(a, 9) = Now End Sub 100 Sub Costs() Dim ws As Worksheet Set ws = ActiveSheet Dim a As Double 105 a = Cost(a) End Sub 110 115 120 125 Function Cost(a) Dim ws As Worksheet Dim para1, para2, para3, para4, para5 As Integer Dim para6 As Double Set ws = ActiveSheet If APsim Is Nothing Then Call OpenSimulation End If Call ReadPara(para1, para2, para3, para4, para5, para6) Call ExcelToAspen(para1, para2, para3, para4, para5, para6) APsim.reinit APsim.run ’***************************************************** ’*****check simulation status and determine costs***** Dim ihn As IHNode Set ihn = APsim.Tree.Data Set ihn = ihn.Elements(“Results Summary“) Set ihn = ihn.Elements(“Run-Status“) Set ihn = ihn.Elements(“Output“) B Programmcode Solver 130 135 140 145 150 Set ihn = ihn.Elements(“PER_ERROR“) errstat = ihn.Value If errstat = 0 Then ’energy costs tryagain: Set ihn = APsim.Tree.Data If ihn Is Nothing Then Application.Wait (Now + TimeValue("00:00:01")) tries = tries + 1 If tries < 50 Then GoTo tryagain End If End If Set ihn = ihn.Elements(“Results Summary“) Set ihn = ihn.Elements(“Utility-Sum“) Set ihn = ihn.Elements(“Output“) Set ihn = ihn.Elements(“NET_COST“) Cost = ihn.Value * 24 * 365.25 ElseIf errstat = 1 Then ’penalty function! Cost = 100000000000# End If ’***************************************************** End Function 155 Sub ReadPara(para1, para2, para3, para4, para5, para6) Dim ws As Worksheet Set ws = ActiveSheet 160 165 170 175 180 185 190 para1 para2 para3 para4 para5 para6 End Sub = = = = = = ws.Cells(4, ws.Cells(5, ws.Cells(6, ws.Cells(7, ws.Cells(8, ws.Cells(9, 2) 2) 2) 2) 2) 2) Sub ExcelToAspen(para1, para2, para3, para4, para5, para6) ’nstages COLLEFT APsim.Tree.Data.Blocks.COLLEFT.Input.Elements("NSTAGE").Value = start(0) APsim.Tree.Data.Blocks.COLLEFT.Input.PROD_STAGE.Elements("LLEFT").Value = start(0) APsim.Tree.Data.Blocks.COLLEFT.Input.PROD_STAGE.Elements("C6H12").Value = 1 APsim.Tree.Data.Blocks.COLLEFT.Input.FEED_STAGE.Elements("VLEFT").Value = start(0) ’stage NFMIN APsim.Tree.Data.Blocks.COLLEFT.Input.FEED_STAGE.Elements("NFMIN").Value = start(1) ’stage FEED APsim.Tree.Data.Blocks.COLLEFT.Input.FEED_STAGE.Elements("FEED").Value = start(2) ’nstages COLRIGHT APsim.Tree.Data.Blocks.COLRIGHT.Input.Elements("NSTAGE").Value = start(3) APsim.Tree.Data.Blocks.COLRIGHT.Input.PROD_STAGE.Elements("LRIGHT").Value = start(3) APsim.Tree.Data.Blocks.COLRIGHT.Input.PROD_STAGE.Elements("C6H6").Value = 1 APsim.Tree.Data.Blocks.COLRIGHT.Input.FEED_STAGE.Elements("VRIGHT").Value = start(3) ’nstages STRIP APsim.Tree.Data.Blocks.STRIP.Input.Elements("NSTAGE").Value = start(4) APsim.Tree.Data.Blocks.STRIP.Input.PROD_STAGE.Elements("NFMHOT").Value = start(4) APsim.Tree.Data.Blocks.STRIP.Input.PROD_STAGE.Elements("VSTRIP").Value = 1 APsim.Tree.Data.Blocks.STRIP.Input.FEED_STAGE.Elements("LLEFT").Value = 1 APsim.Tree.Data.Blocks.STRIP.Input.FEED_STAGE.Elements("LRIGHT").Value = 1 ’flowrate NFMIN APsim.Tree.Data.Streams.NFMIN.Input.TOTFLOW.Elements("MIXED").Value = start(5) APsim.Tree.Data.Blocks.STRIP.Input.Elements("BASIS_B").Value = start(5) End Sub 47 Anhang C Übersicht Solveroptionen Auf der Homepage https://msdn.microsoft.com/de-de/library/office/ff195446.aspx dokumentierte Solveroptionen: SolverOptions (MaxTime, Iterationen, Precision, AssumeLinear, StepThru, Schätzungen, Ableitungen, SearchOption, IntTolerance, Skalierung, Konvergenz, AssumeNonNeg, PopulationSize, RandomSeed, Mehrfachstart, RequireBounds, MutationRate, MaxSubproblems, MaxIntegerSols, SolveWithout, MaxTimeNoImp) MaxTime. Optionaler Variant-Wert. Der maximale Zeitaufwand (in Sekunden), den Solver zur Lösung des Problems aufwendet. Der Wert muss eine positive ganze Zahl sein. Iterations. Optionaler Variant-Wert. Die maximale Anzahl Iterationen, die Solver bei der Lösung des Problems aufwendet. Der Wert muss eine positive ganze Zahl sein. Precision. Optionaler Variant-Wert. Eine Zahl zwischen 0 (Null) und 1, die den Grad an Genauigkeit angibt, mit der Nebenbedingungen (einschließlich ganzzahliger Nebenbedingungen) erfüllt werden müssen. Die Standardgenauigkeit beträgt 0.000001. Eine geringere Genauigkeit wird durch weniger Dezimalstellen angezeigt, beispielsweise 0.0001. Im Allgemeinen benötigt Solver um so mehr Zeit zur Lösung von Problemen, je höher die angegebene Genauigkeit ist (je kleiner die Zahl). AssumeLinear. Optionaler Variant-Wert. Falls True, wird von Solver ein lineares Modell zu Grunde gelegt. Diese Option beschleunigt zwar den Lösungsvorgang, sollte jedoch nur verwendet werden, wenn alle Beziehungen in dem Modell linear sind. Der Standardwert ist False. 50 StepThru. Optionaler Variant-Wert. Falls True, hält Solver bei jedem Lösungsversuch an. Sie können ein Makro an Solver übergeben, das bei jeder Pause ausgeführt wird. Verwenden Sie dazu das Argument ShowRef der Funktion SolverSolve. Wenn False, hält Solver nicht bei jedem Lösungsversuch an. Der Standardwert ist False. Estimates. Optionaler Variant-Wert. Bestimmt den Ansatz, nach welchem anfängliche Schätzwerte für die Grundvariablen bei jeder eindimensionalen Suche ermittelt werden: 1 steht für lineare Schätzungen, 2 für quadratische Schätzungen. Bei einer linearen Schätzung wird eine lineare Extrapolation, ausgehend von einem tangentialen Vektor, vorgenommen. Bei der quadratischen Schätzung wird eine quadratische Extrapolation vorgenommen; dies führt bei nichtlinearen Problemen u.U. zu besseren Ergebnissen. Der Standardwert ist 1 (lineare Schätzung). Derivatives. Optionaler Variant-Wert. Bestimmt Vorwärtsdifferenzierung oder zentrale Differenzierung bei Schätzungen für partielle Ableitungen der gesuchten Funktion und Nebenbedingungsfunktionen: 1 stellt die Vorwärtsdifferenzierung dar, 2 stellt die zentrale Differenzierung dar. Die zentrale Differenzierung erfordert mehr TabellenNeuberechnungen. Möglicherweise können jedoch Probleme gelöst werden, bei denen Ihnen zuvor mitgeteilt wurde, dass Solver die Lösung nicht weiter verbessern kann. Die Option der zentralen Differenzierung sollten Sie bei Nebenbedingungen wählen, deren Werte sich in der Nähe der Grenzwerte schnell ändern. Der Standardwert ist 1 (Vorwärtsdifferenzierung). SearchOption. Optionaler Variant-Wert. Geben Sie mit den Search-Optionen den Suchalgorithmus an, der bei jeder Iteration verwendet wird, um die Suchrichtung zu bestimmen: 1 repräsentiert das Newton-Suchverfahren, 2 das Gradient-Suchverfahren. Die Variante Newton, bei der ein Quasi-Newton-Verfahren eingesetzt wird, ist die Standardeinstellung. IntTolerance. Optionaler Variant-Wert. Eine Dezimalzahl zwischen 0 (Null) und 100, mit der prozentuale Toleranz der Ganzzahloptimalität angegeben wird. Dieses Argument ist nur gültig, wenn ganzzahlige Nebenbedingungen definiert wurden. Es gibt an, dass Solver beendet werden kann, wenn eine machbare ganzzahlige Lösung gefunden wurde, deren Ziel innerhalb dieses Prozentsatzes des bekannten Grenzwerts für das Ziel der erfüllten ganzzahligen optimalen Lösung liegt. Eine größere prozentuale Toleranz beschleunigt tendenziell den Lösungsvorgang. C Übersicht Solveroptionen 51 Scaling. Optionaler Variant-Wert. Wenn das Ziel oder die Nebenbedingungen sich um mehrere Größenordnungen unterscheiden, z. B. beim Maximieren des prozentualen Gewinns bei Multimillionen-Investitionen, legen Sie diese Option als True fest, damit Solver die Werte für Ziel und Nebenbedingung während der Berechnung intern auf ähnliche Größenordnungen angleicht. Wenn diese Option False ist, führt Solver seine Berechnungen mit den ursprünglichen Werten für Ziel und Nebenbedingungen aus. Der Standardwert ist True. Convergence. Optionaler Variant-Wert. Eine Zahl zwischen 0 (Null) und 1, mit der die Konvergenztoleranz für die Methoden GRG Nonlinear Solving und Evolutionary Solving angegeben wird. Bei der GRG-Methode wird Solver beendet, wenn die relative Änderung im Wert der Zielzelle für die letzten fünf Iterationen kleiner als diese Toleranz ist. Bei der Evolutionary-Methode wird Solver beendet, wenn mindestens 99% der Mitglieder der Grundgesamtheit „Passwerte“ aufweisen, deren relative, d.h. prozentuale Differenz kleiner als diese Toleranz ist. In beiden Fällen zeigt Solver die Nachricht an „Solver hat die aktuelle Lösung durch Konvergieren erreicht. Alle Nebenbedingungen wurden eingehalten“. AssumeNonNeg. Optionaler Variant-Wert. Wenn True gilt, geht Solver von einem unteren Grenzwert von 0 (Null) für alle anpassbaren (veränderbaren) Zellen aus, für die im Listenfeld Nebenbedingung nicht explizit untere Grenzwerte angegeben wurden (die Zellen müssen nicht negative Werte enthalten). Wenn False gilt, werden von Solver nur die im Listenfeld Nebenbedingung angegebenen Grenzwerte verwendet. PopulationSize. Optionaler Variant-Wert. True, wenn Solver von einem unteren Grenzwert von 0 (Null) für alle Entscheidungsvariablenzellen ausgehen soll, für die kein expliziter unterer Grenzwert im Listenfeld Nebenbedingungen festgelegt ist (die Zellen müssen nicht-negative Werte enthalten). False, wenn Solver nur die im Listenfeld Nebenbedingung angegebenen Grenzwerte verwenden soll. RandomSeed. Optionaler Variant-Wert. Eine positive ganze Zahl gibt einen festen Ausgangswert für den Zufallszahlengenerator an, der von der Evolutionary SolvingMethode und der Mehrfachstartmethode für die globale Optimierung angewendet wird. Dies bedeutet, dass Solver bei jeder Ausführung für ein unverändertes Modell die gleiche Lösung findet. Der Wert Null gibt an, dass Solver bei jeder Ausführung einen anderen Ausgangswert für den Zufallszahlengenerator verwenden soll, wodurch sich bei einem unveränderten Modell für jede Ausführung unterschiedliche Lösungen ergeben können. 52 MultiStart. Optionaler Variant-Wert. True, wenn Solver eine Mehrfachstart-Methode für die globale Optimierung bei der GRG Nonlinear Solving-Methode verwenden soll, wenn SolverSolve aufgerufen wird. False, wenn Solver die Methode GRG Solving nur einmal ausführen soll, ohne Mehrfachstart beim Aufruf von SolverSolve. RequireBounds. Optionaler Variant-Wert. True, wenn die Evolutionary SolvingMethode und die Mehrfachstart-Methode nach einem Aufruf von SolverSolve sofort einen Wert von 18 zurückgeben soll, wenn für eine der Variablen entweder der obere oder der untere Grenzwert nicht definiert ist. False, wenn diese Methoden eine Problemlösung ohne Grenzwerte für alle der Variablen versuchen sollen. MutationRate. Optionaler Variant-Wert. Eine Zahl zwischen 0 (Null) und 1 zur Angabe der Rate, mit der die Evolutionary Solving-Methode „Mutationen“ an den vorhandenen Elementen der Grundgesamtheit vornimmt. Durch eine höhere Mutationsrate wird tendenziell die Verschiedenheit (1-Alpha) der Grundgesamtheit erhöht, und möglicherweise ergeben sich bessere Lösungen. MaxSubproblems. Optionaler Variant-Wert. Die maximale Anzahl Teilprobleme, die Solver in Problemen mit ganzzahligen Nebenbedingungen und Problemen, die mit der Evolutionary Solving-Methode gelöst werden, untersucht. Der Wert muss eine positive ganze Zahl sein. MaxIntegerSols. Optionaler Variant-Wert. Die maximale Anzahl der machbaren (oder ganzzahlig machbaren) Lösungen, die Solver in Problemen mit ganzzahligen Nebenbedingungen und Problemen, die mit der Evolutionary Solving-Methode gelöst werden, in Erwägung zieht. Der Wert muss eine positive ganze Zahl sein. SolveWithout. Optionaler Variant-Wert. True, wenn Solver alle ganzzahligen Nebenbedingungen ignorieren und die „Relaxation“ des Problems lösen soll. False, wenn Solver die ganzzahligen Nebenbedingungen beim Lösen des Problems verwenden soll. MaxTimeNoImp. Optionaler Variant-Wert. Bei Verwendung der Evolutionary Solving-Methode die maximale Zeitspanne (in Sekunden), für die Solver Lösungsversuche fortsetzt, ohne signifikant verbesserte Lösungen zu finden, die der Grundgesamtheit hinzugefügt werden können. Der Wert muss eine positive ganze Zahl sein. Literaturverzeichnis [1] B. Lohrengel, Einführung in die thermischen Trennverfahren, 2. Aufl., Oldenbourg Verlag, München 2012. [2] M. Baerns, A. Behr, A. Brehm, J. Gmehling, K.-O. Hinrichsen, H. Hofmann, U. Onken, R. Palkovits, A. Renken, Technische Chemie, 2. Aufl., Wiley-VCH, Weinheim 2013. [3] A. Behr, D. W. Agar, J. Jörissen, Einführung in die Technische Chemie, Spektrum Akademischer Verlag, Heidelberg 2010. [4] A. Brehm, Praktikumsskript: Rektifikation, Carl von Ossietzky Universität Oldenburg 2012. [5] B. Kolbe, S. Wenzel, Chem. Eng. Process., 43, 339, 2004. [6] T. Diehl, B. Kolbe, K. Gehrke, ERTC Petrochemical Conference, Prague 2005. [7] J. Ryll, M. Seemann, Diplomarbeit, Fachhochschule Regensburg, 2005. [8] X. Ge, X. Yuan, C. Ao, K.-K. Yu, Comput. Chem. Eng., 68, 38–46, 2014. Erklärung Hiermit versichern wir, dass wir diese Arbeit selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt haben. Außerdem versichern wir, dass wir die allgemeinen Prinzipien wissenschaftlicher Arbeit und Veröffentlichung, wie sie in den Leitlinien guter wissenschaftlicher Praxis der Carl von Ossietzky Universität Oldenburg festgelegt sind, befolgt haben. Oldenburg, den 19. Juli 2015 ————————– Nils Ayral ————————– Enno Gent ————————– Gabriele Tomaschun