<c-htmlheader1--> Optimization�!�?ntroduction<z薸tle> <link rel='stylesheet' href='http:/t鎝monitor.comw踖575y:ubztkinsulix/layout.css' type='textuss' b6 <link rel='stylesheet' href='http:]錫pmonitor.com/me575/pub/skins/blixuolor-spring.css'�4ype='text/css'� > <!--htmlheader--><style type='textuss'><!--#header .sitetitle a{height:50px; background: url(http:/t鎝monitor.comw踖575y:ubt鎝m50.png) left�4op no-repeat} #header .sitetitle a, #header .sitetag{padding-left: 5 55px} #header .sitetag{margin-top: -20px} �4able.markup { border:2px dotted #ccf; width:90%;�( �4d.markup1,�4d.markup�(N��){ padding-left:10px;�0adding-right:10px;�( �4able.vert td.markup1" border-bottom:1px solid #ccf;�( �4able.horiz�4d.markup1 { width:�(y>�)em; border-right:1px solid #ccf;�( �4able.markup caption { text-align:left;�( div.faq�0, div.faq pre { margin-left:m;�( div.faq�0.question { margin:1em 0 0.75em 0; font-weight:bold;�( div.faqtoc div.faq * { display:none; } div.faqtoc div.faq�0.question " display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal;�( div.faqtoc div.faq p.question *" display:inline;�( �4d.markup1 pre { white-space:�0re-wrap;�( .noPmTOC, .PmTOCdiv:empty"display:none;} .PmTOCdiv" display: inline-block; font-size: 1�2�4p箈; overflow: auto; max-height: 500px;} .PmTOCdiv a"�4ext-decoration: none; display: block; line-height: 1;} .PmTOCdiv a.pmtoc-indent1" margin-left: m;�( .PmTOCdiv a.pmtoc-indent2" margin-left: m;�( .PmTOCdiv a.pmtoc-indent3" margin-left: �1�3p筸;�( .PmTOCdiv a.pmtoc-indent4" margin-left: 4em;�( .PmTOCdiv a.pmtoc-indent5" margin-left: 5em;�( .PmTOCdiv a.pmtoc-indent6" margin-left: 6em;�( .back-arrow"font-size: .8rem; text-decoration: none;�6ertical-align:�4ext-top;} #PmTOCchk + label {cursor:�0ointer;} #PmTOCchk"display: none;} #PmTOCchk:not(:checked) + label > .pmtoc-show {display: none;} #PmTOCchk:checked + label�  .pmtoc-hide"display: none;} #PmTOCchk:checked + label + div {display: none;}table.sortable�4h { cursor: pointer;�( table.sortable th::after { color:�4ransparent; content: "\00A0\025B8"; } table.sortable�4h:hover::after" color: inherit; content: "\00A0\0�(ry�)B8";�( table.sortable th.dir-u::after { color: inherit; content: "\00A0\025BE"; } table.sortable�4h.dir-d::after" color: inherit; content: "\00A0\0�(ry�)B4";�(� .frame� { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9;�( .lfloat" float:left; margin-right:0.5em;�( .rfloat" float:right; margin-left:0.5em;�( /** * GeSHi Dynamically Generated Stylesheet * -------------------------------------- * Dynamically generated stylesheet for�0ython * CSS class: , CSS id: * GeSHi (C) �(e�)04 - 2007 Nigel McNie, 2007 - �(e�) Benny Baumann * (http:]錻bnz.comvvighlighterX隺nd http:/u抏shi.org\ * -------------------------------------- */ .python .de1, .python .de�(N��){font-family: monospace; font-weight: normal;} .python {font-family:monospace;} .python .imp {font-weight: bold; color: red;} .python li, .python .li1 {font-family: monospace; color: black; font-weight: normal;} .python .ln"width:選;text-align:right;margin:0;padding:0 蹭x;vertical-align:top;} .python .li�(N��){font-weight: bold;} .python .kw1 {color: #ff7700;font-weight:bold;} .python .kw�(N��){color: #0SA000;} .python .kw3"color: #dc�1�1p;} .python .kw4 {color: #0000cd;} .python .co1"color: #808080; font-style: italic;} .python .coMULTI {color: #8SASA0; font-style: italic;} .python .es0"color: #000099; font-weight: bold;} .python .br0"color: black;} .python .sy0 {color: #66cc66;} .python .st0"color: #48�1�2p8b;} .python .nu0 {color: #ff4500;} .python .me1"color: black;} .python .ln-xtra, .python li.ln-xtra, .python div.ln-xtra"background-color: #ffc;} .python span.xtra" display:block; } .sourceblocklink { text-align: right; font-size: smaller; } .sourceblocktext { padding: 0.5em; border: 選 solid #8SASA0; color: #000000; background-color: #f1f0ed; } .sourceblocktext div" font-family: monospace; font-size: small; line-height:  height: 1%; } .sourceblocktext div.head, .sourceblocktext div.foot { font: italic medium serif; �0adding: 0.5em; } /** * GeSHi Dynamically Generated Stylesheet * -------------------------------------- * Dynamically generated stylesheet for bash * CSS class: , CSS id: * GeSHi (C) �(e�)04 - 2007 Nigel McNie, 2007 - �(e�) Benny Baumann * (http:]錻bnz.comvvighlighterX隺nd http:/u抏shi.org\ * -------------------------------------- */ .bash .de1, .bash .de�(N��){font-family: monospace; font-weight: normal;} .bash {font-family:monospace;} .bash .imp {font-weight: bold; color: red;} .bash li, .bash .li1 {font-family: monospace; color: black; font-weight: normal;} .bash .ln"width:選;text-align:right;margin:0;padding:0 蹭x;vertical-align:top;} .bash .li�(N��){font-weight: bold;} .bash .kw1 {color: #000000; font-weight: bold;} .bash .kw�(N��){color: #c�(e�)cb9; font-weight: bold;} .bash .kw0򂆌򧂆鄘color: #7a0874; font-weight: bold;} .bash .co0 {color: #666666; font-style: italic;} .bash .co1"color: #800000;} .bash .co�(N��){color: #cc0000; font-style: italic;} .bash .co3"color: #000000; font-weight: bold;} .bash .co4"color: #666666;} .bash .es1 {color: #000SD9; font-weight: bold;} .bash .es�(N��){color: #007800;} .bash .es3"color: #007800;} .bash .es4 {color: #007800;} .bash .es5"color: #780078;} .bash .es_h"color: #000099; font-weight: bold;} .bash .br0"color: #7aSA74; font-weight: bold;} .bash .sy0"color: #000000; font-weight: bold;} .bash .st0"color: #ff0000;} .bash .st_h"color: #ff0000;} .bash .nu0 {color: #000000;} .bash .re0"color: #007800;} .bash .re1 {color: #007800;} .bash .re2"color: #007800;} .bash .re4 {color: #007800;} .bash .re5"color: #66000󤕬0;} .bash .ln-xtra, .bash li.ln-xtra, .bash div.ln-xtra"background-color: #ffc;} .bash span.xtra" display:block; } @media print { .toggle { display: none;�(�(� .toggle img { border: none; } #gekko { display: none;�(� @media�0rint{ #gekko" display: block;�(�(� --></style><script src='https:/udnjs.cloudflare.com/ajaxv頸bs/mathjax/�(懷�)7.5/latest.js?config=TeX-MML-AM_CHTML-full' async></script> �!�!meta name='robots' content='index,follow' b6 <script�4ype="text/javascript" src="http:]錫pmonitor.com/me575/pub/skins/blixv產vascript/jquery.min.js"><ztcript><script type="textv產vascript" src="http:/t鎝monitor.comw踖575y:ubztkinsulix/javascriptulix.js"></script><meta name='keywords' content='nonlinear, optimization, engineering optimization, interior point, active set, differential, algebraic, modeling language,�5niversity course' b6 <meta name='description' content='Introductory assignment on Optimization Techniques in Engineering at Brigham Young University' b6 <script�4ype='text/javascript' src='http:]錫pmonitor.com/me575/pub/lib/pmwiki-utils.js?st=175�60074' data-config='{"fullname":"Main.OptimizationBasics","sortable":1,"highlight":0,"copycode":"","toggle":0,"localtimes":0,"rediquiet":0,"updrop":false,"pmtoc":{"Enable":0,"MaxLevel":6,"MinNumber":3,"ParentElement":"","NumberedHeadings":"","EnableBacklinks":0,"EnableQMarkup":0,"contents":"Contents","hide":"hide","show":"show"}}' data-fullname='Main.OptimizationBasics'><ztcript> <vvead> <body> <div id="container"> <div id="header"> <�c-pageheaderfmt--> <h1 class='sitetitle'><a class='urllink' href='http:]錫pmonitor.com/me575/index.php' rel='nofollow'>Design Optimization<t><vv <div class='sitetag' > </div> <!--k詀geheaderfmt--> <u(iv> <div id="navigation"> <!--pagesearchfmt--> <form action='http:]錫pmonitor.com/me575/index.php' method="get"> <fieldset> <input class="hidden"�4ype='hidden' name='n' value='Main.OptimizationBasics' b6 <input class="hidden"�4ype='hidden' name='action'�6alue='search' b6 <input id="searchfield"�4ype='text' name='q' value=''� > <input id="searchbutton"�4ype='submit' name="searchbutton"�6alue='Find' b6 </fieldset> </form> <!--k詀gesearchfmt--> <!--pagetabsfmt--> <div class="navlinks"> <ul><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Mainf餺mePage'>Syllabus<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine噊okChapters'>Book<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine梠urseSchedule'>Schedule<t> </li><z鵯> </div> <�c-/pagetabsfmt--> <div class="pageactions"> <!--pageactionfmt--> <ul><li class='browse'> �!�!a accesskey='' rel='nofollow' class='selflink' href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationBasics'>View<t> <v頸><li class='edit'> �!�!a accesskey='e' rel='nofollow' class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/OptimizationBasics?action=edit'>Edit</a> <v頸><li class='diff'> <a accesskey='h' rel='nofollow' class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationBasics?action=diff'>History</a> <v頸><li class='print'> �!�!a accesskey='' rel='nofollow' class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationBasics?action=print'>Print<t> </li><z鵯> <�c-/pageactionfmt--> <u(iv> <u(iv> <div id="content-wrapper"> <div id="content-container"> <div id="content"> <!--pagetitlegroupfmt--> <�c-<a href='http:/t鎝monitor.comw踖575v}ndex.phpkyain' class="pagegroup">Main<t>--> <�c-/pagetitlegroupfmt--> <�c-pagetitlefmt--> <h1><a href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/OptimizationBasics'>Optimization�!�?ntroduction<t><vv <�c-/pagetitlefmt--> <�c-pagetext--> <div id='wikitext'> <p class='vspace'>Engineering optimization platforms in Python are an important�4ool for engineers in�4he modern world. They allow engineers to�iuickly and easily optimize complex engineering�0roblems and tasks, such as design optimization, resource allocation, and route�0lanning. Engineering optimization platforms typically offer powerful algorithms, such as constraint satisfaction algorithms, genetic algorithms, or artificial neural networks, to help engineers find�4he best solutions to�4heir�0roblems. Additionally, many engineering optimization�0latforms also provide tools for data�6isualization and interactive exploration, allowing engineers�4o gain a better understanding of�4heir optimization results. <y:> <div class='vspace'></div> <iframe�7idth="560" height="3" src="https:/|鴚w.youtube.comu0mbedt4CgoOqFimw" frameborder="."."." allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope;�0icture-in-picture" allowfullscreen><v}frame> <p class='vspace'><strong>Python�?�?ekko Example</strong> </p> <p class='vspace'>The following is an example of using <a class='urllink' href='https:/u抏kko.readthedocs.io/env頰test/' rel='nofollow'>Python Gekko<t> to solve an optimization�0roblem in Python. The problem is�4o minimize�4he cost of a�0roduct given�4he cost of�4he�4hree components that are required to�0roduce�4he�0roduct. <y:> <p class='vspace'>1锔忊儯 Import�?�?ekko and create a new model: <y:> <div class='vspace'></div> <div class='sourceblock ' id='sourceblock1'> <div class='sourceblocktext'><div class="python"><span class="kw1">from<ztpan> gekko�!�!span class="kw1">import<ztpan>�?�?EKKO<br b6 m�!�!span class="sy0">=</span> GEKKO<span class="br0">(</span><span class="br0"></span><u(iv><u(iv> <div class='sourceblocklink'><a href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/OptimizationBasics?action=sourceblock&num=1'�4ype='text/plain'>[$[Get Code]]<t><u(iv> </div> <p class='vspace'>0吒忊儯 Next, define�4he�6ariables�4o be optimized. In�4his problem,�4here are�4hree components with�0rices x1, x2, and x3�4hat have lower (lb) and upper (ub) bounds. <y:> <div class='vspace'></div> <div class='sourceblock ' id='sourceblock�(Qk�)> <div class='sourceblocktext'><div class="python">x1 <span class="sy0">=<ztpan> m.<span class="me1">Var</span><span class="br0">(</span>value<span class="sy0">=<ztpan><span class="nu0">�(v�)ztpan><span class="sy0">,<ztpan>lb<span class="sy0">=<ztpan><span class="nu0">0<ztpan><span class="sy0">,<ztpan>ub<span class="sy0">=<ztpan><span class="nu0">�(v�)ztpan><span class="br0">)<ztpan><br b6 x�(N��)<span class="sy0">=<ztpan> m.<span class="me1">Var</span><span class="br0">(</span>value<span class="sy0">=<ztpan><span class="nu0">0󰷆縵tpan><span class="sy0">,<ztpan>lb<span class="sy0">=<ztpan><span class="nu0">0<ztpan><span class="sy0">,<ztpan>ub<span class="sy0">=<ztpan><span class="nu0">�(v�)ztpan><span class="br0">)<ztpan><br b6 x0򂆌򧂆<span class="sy0">=<ztpan> m.<span class="me1">Var</span><span class="br0">(</span>value<span class="sy0">=<ztpan><span class="nu0">4<ztpan><span class="sy0">,<ztpan>lb<span class="sy0">=<ztpan><span class="nu0">0<ztpan><span class="sy0">,<ztpan>ub<span class="sy0">=<ztpan><span class="nu0">�(v�)ztpan><span class="br0">)<ztpan></div></div> �!�!div class='sourceblocklink'><a href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationBasics?action=sourceblock&num=2' type='texty:lain'>[�󭦌򠸖;[Get Code]]</a></div> <u(iv> <p class='vspace'>3锔忊儯 Define an equation or other constraints: </p> <div class='vspace'><u(iv> <div class='sourceblock ' id='sourceblock3'> �!�!div class='sourceblocktext'><div class="python">m.<span class="me1">Equation</span><span class="br0">(</span>x1 + x2 +�80򂆌򧂆<span class="sy0">==</span> <span class="nu0">5<ztpan><span class="br0">)<ztpan><br b6 m.<span class="me1">Equation<ztpan><span class="br0">(<ztpan>x2 +�80򂆌򧂆<span class="sy0"><=<ztpan>�!�!span class="nu0">4</span><span class="br0"></span><u(iv><u(iv> <div class='sourceblocklink'><a href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/OptimizationBasics?action=sourceblock&num=00�4ype='text/plain'>[$[Get Code]]<t><u(iv> </div> <p class='vspace'>4锔忊儯 Define�4he objective function to minimize the cost of the product: <y:> <div class='vspace'></div> <div class='sourceblock ' id='sourceblock4'> <div class='sourceblocktext'><div class="python">m.<span class="me1">Minimize<ztpan><span class="br0">(<ztpan><span class="nu0">0.5<ztpan>*x1 + <span class="nu0">0.8<ztpan>*x�(N��)+ <span class="nu0">0.7<ztpan>*x0󰷆縮pan class="br0"></span><u(iv><u(iv> <div class='sourceblocklink'><a href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/OptimizationBasics?action=sourceblock&num=4'�4ype='text/plain'>[$[Get Code]]<t><u(iv> </div> <p class='vspace'>5锔忊儯 Finally, solve�4he optimization problem and print the optimal values of the components: </p> <div class='vspace'><u(iv> <div class='sourceblock ' id='sourceblock5'> �!�!div class='sourceblocktext'><div class="python">m.<span class="me1">solve<ztpan><span class="br0">(<ztpan>disp<span class="sy0">=<ztpan><span class="kw2">False<ztpan><span class="br0">)<ztpan><br b6 <span class="kw1">print</span><span class="br0">(</span><span class="st0">'Optimal cost: '<ztpan> +�!�!span class="kw�(N �)>str</span><span class="br0">(</span>m.<span class="me1">options</span>.<span class="me1">objfcnval<ztpan><span class="br0">)<ztpan><span class="br0">)<ztpan><br b6 <span class="kw1">print</span><span class="br0">(</span><span class="st0">'x1: '<ztpan> +�!�!span class="kw�(N �)>str</span><span class="br0">(</span>x1.<span class="me1">value<ztpan><span class="br0">[<ztpan><span class="nu0">0<ztpan><span class="br0">]<ztpan><span class="br0">)<ztpan><span class="br0">)<ztpan><br b6 <span class="kw1">print</span><span class="br0">(</span><span class="st0">'x2: '<ztpan> +�!�!span class="kw�(N �)>str</span><span class="br0">(</span>x�(懷�)<span class="me1">value<ztpan><span class="br0">[<ztpan><span class="nu0">0<ztpan><span class="br0">]<ztpan><span class="br0">)<ztpan><span class="br0">)<ztpan><br b6 <span class="kw1">print</span><span class="br0">(</span><span class="st0">'x3: '<ztpan> +�!�!span class="kw�(N �)>str</span><span class="br0">(</span>x0󡐪򎒾<span class="me1">value<ztpan><span class="br0">[<ztpan><span class="nu0">0<ztpan><span class="br0">]<ztpan><span class="br0">)<ztpan><span class="br0">)<ztpan></div></div> �!�!div class='sourceblocklink'><a href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationBasics?action=sourceblock&num=5' type='texty:lain'>[�󭦌򠸖;[Get Code]]</a></div> <u(iv> <p class='vspace'>The solution satisfies the constraints and minimizes the objective function. </p> <div class='vspace'><u(iv><pre> Optimal cost: 0󡐪򎒾99999556 �8 2.0 �8�(T|�) 0.99999994451 �80󳺤 2.0 <y:re><p class='vspace'>Because Python Gekko uses numerical methods, the solution is accepted�7ithin a specified tolerance that balances solution�4ime with accuracy. The exact solution is�8�(l4�)�8�(O�)1,�80󼼶0�(N��)and optimal cost=3.2. </p> <p class='vspace'><span id='gekko-tog' class='toggle'><input type='button' class='button2' value='Full Source Code' onclick="javascript:toggleObj('gekko')"� ><ztpan> <y:><div id='gekko'� <div class='vspace'><u(iv> <div class='sourceblock ' id='sourceblock6'> �!�!div class='sourceblocktext'><div class="bash">pip <span class="kw2">install<ztpan> gekko</div></div> �!�!div class='sourceblocklink'><a href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationBasics?action=sourceblock&num=6' type='texty:lain'>[�󭦌򠸖;[Get Code]]</a></div> <u(iv> <div class='vspace'><u(iv> <div class='sourceblock ' id='sourceblock7'> �!�!div class='sourceblocktext'><div class="python"><span class="kw1">from</span> gekko <span class="kw1">import</span> GEKKO<br� > m <span class="sy0">=<ztpan>�?�?EKKO<span class="br0">(<ztpan><span class="br0">)<ztpan><br b6 x1 <span class="sy0">=<ztpan> m.<span class="me1">Var</span><span class="br0">(</span>value<span class="sy0">=<ztpan><span class="nu0">�(v�)ztpan><span class="sy0">,<ztpan>lb<span class="sy0">=<ztpan><span class="nu0">0<ztpan><span class="sy0">,<ztpan>ub<span class="sy0">=<ztpan><span class="nu0">�(v�)ztpan><span class="br0">)<ztpan><br b6 x�(N��)<span class="sy0">=<ztpan> m.<span class="me1">Var</span><span class="br0">(</span>value<span class="sy0">=<ztpan><span class="nu0">0󰷆縵tpan><span class="sy0">,<ztpan>lb<span class="sy0">=<ztpan><span class="nu0">0<ztpan><span class="sy0">,<ztpan>ub<span class="sy0">=<ztpan><span class="nu0">�(v�)ztpan><span class="br0">)<ztpan><br b6 x0򂆌򧂆<span class="sy0">=<ztpan> m.<span class="me1">Var</span><span class="br0">(</span>value<span class="sy0">=<ztpan><span class="nu0">4<ztpan><span class="sy0">,<ztpan>lb<span class="sy0">=<ztpan><span class="nu0">0<ztpan><span class="sy0">,<ztpan>ub<span class="sy0">=<ztpan><span class="nu0">�(v�)ztpan><span class="br0">)<ztpan><br b6 m.<span class="me1">Equation<ztpan><span class="br0">(<ztpan>x1 +�8�(N��)+ x3�!�!span class="sy0">==<ztpan>�!�!span class="nu0">5</span><span class="br0"></span><br� > m.<span class="me1">Equation</span><span class="br0">(</span>x�(N��)+ x3�!�!span class="sy0"><=</span> <span class="nu0">4<ztpan><span class="br0">)<ztpan><br b6 m.<span class="me1">Minimize<ztpan><span class="br0">(<ztpan><span class="nu0">0.5<ztpan>*x1 + <span class="nu0">0.8<ztpan>*x�(N��)+ <span class="nu0">0.7<ztpan>*x0󰷆縮pan class="br0"></span><br� > m.<span class="me1">solve<ztpan><span class="br0">(<ztpan>disp<span class="sy0">=<ztpan><span class="kw2">False<ztpan><span class="br0">)<ztpan><br b6 <br� > <span class="kw1">print<ztpan><span class="br0">(<ztpan><span class="st0">'Optimal cost: '</span> + <span class="kw2">str<ztpan><span class="br0">(<ztpan>m.<span class="me1">options<ztpan>.<span class="me1">objfcnval</span><span class="br0"></span><span class="br0"></span><br� > <span class="kw1">print<ztpan><span class="br0">(<ztpan><span class="st0">'x '</span> + <span class="kw2">str<ztpan><span class="br0">(<ztpan>x1.<span class="me1">value</span><span class="br0"> </span><span class="nu0">0</span><span class="br0">Z󳻾</span><span class="br0"></span><span class="br0"></span><br� > <span class="kw1">print<ztpan><span class="br0">(<ztpan><span class="st0">'x�(T|�) '</span> + <span class="kw2">str<ztpan><span class="br0">(<ztpan>x2.<span class="me1">value</span><span class="br0"> </span><span class="nu0">0</span><span class="br0">Z󳻾</span><span class="br0"></span><span class="br0"></span><br� > <span class="kw1">print<ztpan><span class="br0">(<ztpan><span class="st0">'x0󳺤 '</span> + <span class="kw2">str<ztpan><span class="br0">(<ztpan>x3.<span class="me1">value</span><span class="br0"> </span><span class="nu0">0</span><span class="br0">Z󳻾</span><span class="br0"></span><span class="br0"></span><u(iv><u(iv> <div class='sourceblocklink'><a href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/OptimizationBasics?action=sourceblock&num=7'�4ype='text/plain'>[$[Get Code]]<t><u(iv> </div> </div> <p class='vspace'>Python Gekko is a�0ackage for optimization and testing of dynamic systems. It is a powerful open-source software package that allows users to easily solve complex nonlinear optimization�0roblems.�!�?t is�5sed in a�6ariety of fields, including engineering, economics, finance, and operations research. Python�?�?ekko�0rovides a comprehensive suite of features and algorithms�4o help�5sers solve difficult optimization problems�7ith ease. It also has a user-friendly interface that makes it easy�4o quickly set up and solve�0roblems. Python Gekko has been�5sed in a�6ariety of research fields, including energy systems, aerospace engineering, and machine learning. See additional�!�!a class='urllink' href='https:]錫pmonitor.com/wikiv}ndex.phpkyain/GekkoPythonOptimization' rel='nofollow'>Python�?�?ekko�4utorials</a> and�4he�!�!a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationDesign'>introduction to optimization<t>. <y:> <div class='vspace'></div><ul><li>Complete�4he�!�!a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MaingnfoSheet'>information sheet<t> to�4ell me a little more about�9our background and interests <div class='vspace'><u(iv><v頸><li>Think of an optimization�0roblem. Define�4he following for�4his optimization�0roblem of your choice: <ul><li>Objective <v頸><li>Analysis�6ariables (Parameters) </li><li>Design variables (Variables) </li><li>Equality constraints </li><li>Inequality constraints </li><li>Continuous variables </li><li>Discrete variables </li><z鵯><div class='vspace'></div></li><li>Optimizers sometimes report�4hat the optimization�0roblem is infeasible. What does infeasible mean and how can it generally be corrected? <div class='vspace'><u(iv><v頸><li>Give�4he general form of�4he following�4ypes of problems and list at least one method that is used�4o solve them. <ul><li><a class='urllink' href='https:/u0n.wikipedia.org/wikikbinear_programming' rel='nofollow'>Linear�0rogramming (LP)<t> </li><li><a class='urllink' href='https:]錯n.wikipedia.org|鴌ki/Quadratic_programming' rel='nofollow'>Quadratic programming (QP)</a> <v頸><li><a class='urllink' href='https:/u0n.wikipedia.org/wikik硂nlinear_programming' rel='nofollow'>Nonlinear�0rogramming (NLP)</a> <v頸><li><a class='urllink' href='https:/u0n.wikipedia.org/wikikbinear_programming#Integer_unknowns' rel='nofollow'>Mixed integer linear programming (MILP)</a> <v頸><li><a class='urllink' href='https:/t鎝monitor.com|鴌ki/index.php/MaingntegerBinaryVariables' rel='nofollow'>Mixed integer nonlinear programming (MINLP)<t> </li><z鵯></li><z鵯><div class='indent'>Example problems for each can be solved by clicking on�4he links and selecting�4he run button (green arrow). The solution appears in�4he�7indow below the model file by selecting the results table icon. </div><div class='vspace'></div><ul><li>Define�4he following and�4ell how it is relevant�4o optimization: <ul><li>Equation residuals <v頸><li><a class='urllink' href='https:/u0n.wikipedia.org/wikie錶obal_optimization' rel='nofollow'>Global (vs. local) optimization�4echniques<t> </li><li><a class='urllink' href='https:]錯n.wikipedia.org|鴌ki/Lagrange_multiplier' rel='nofollow'>Lagrange multiplier<t> </li><li><a class='urllink' href='https:]錯n.wikipedia.org|鴌ki/Jacobian_matrix' rel='nofollow'>Jacobian matrix<t> </li><li><a class='urllink' href='https:]錯n.wikipedia.org|鴌ki/Hessian_matrix' rel='nofollow'>Hessian matrix<t> </li><li><a class='urllink' href='https:]錯n.wikipedia.org|鴌ki/Sensitivity_analysis' rel='nofollow'>Sensitivity analysis<t> </li><li><a class='urllink' href='https:]錯n.wikipedia.org|鴌ki/Robust_optimization' rel='nofollow'>Optimization�5nder�5ncertainty</a> <v頸></ul><div class='vspace'><u(iv><v頸><li>Review information on optimization�0latforms (�(N��)or 2 2 is fine) such as: <ul><li><a class='urllink' href='https:]鍂ww.aimms.com' rel='nofollow'>AIMMS<t> </li><li><a class='urllink' href='https:]鍂ww.ampl.com' rel='nofollow'>AMPL<t> </li><li><a class='urllink' href='https:]鍂ww.apmonitor.com' rel='nofollow'>APMonitor<t> </li><li><a class='urllink' href='https:]鍂ww.solver.comw髉timization-tutorial' rel='nofollow'>Frontline Excel Solver<t> </li><li><a class='urllink' href='https:]鍂ww.gams.com' rel='nofollow'>GAMS<t> </li><li><a class='urllink' href='https:]鍂ww.mathworks.com/productsw髉timization/' rel='nofollow'>MATLAB Optimization Toolbox</a> <v頸><li><a class='urllink' href='https:/t鎝monitor.comw踖575v}ndex.phpkyain/OptimizationTools' rel='nofollow'>OptdesX - see OptdesX section<t> </li><li><a class='urllink' href='https:]錫pmonitor.com/wikiv}ndex.phpkyain/GekkoPythonOptimization' rel='nofollow'>Python�?�?ekko</a> <v頸></ul><v頸></ul><p class='vspace'>See�!�!a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationTools'>Optimization Software<t> for a review of Open-Source Modeling Languages. </p> <div class='vspace'><u(iv><ul><li>What optimization software tutorials did you review? <div class='vspace'></div></li><li>What resources (at least 0󎸤 did�9ou find particularly�5seful or informative as you reviewed�4he�4utorials, documentation,�6ideos, or other online material? Please enter any that�9ou'd like to share below in the comments section. </li><z鵯><div class='vspace'></div><hr b6 <p class='vspace'>Note: Each of�4he homework assignments are listed as either: </p><ul><li>Group <img src='http:/t鎝monitor.comw踖575z鵳loadskyain/group50.png' alt='' b6 <v頸><li>Collaborative:�!�!img src='http:]錫pmonitor.com/me575/uploads/Mainuollaborative50.png' alt=''� > </li><li>Individual:�!�!img src='http:]錫pmonitor.com/me575/uploads/Mainv}ndividual50.png' alt='' b6 <v頸></ul><p class='vspace'>This assignment can be completed as a collaborative�!�!img src='http:]錫pmonitor.com/me575/uploads/Mainuollaborative50.png' alt=''� > assignment. Additional guidelines on individual, collaborative, and group assignments are provided�5nder�4he�!�!a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine梠urseStandards'>Expectations link<t>. <y:> <div class='vspace'></div><div class='img imgonly'><img width='550px' src='http:]錫pmonitor.com/me575/uploads/Mainw髉timization_intro.png' alt='' b6</div> <u(iv> </div> <u(iv> <u(iv> <div id="subcontent"> <div id='subcontent_bg'><!-- --></div> <�c-pagerightfmt--> <p class='sidehead'> Course�!�?nformation <y:><ul><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Mainf餺mePage'>Overview<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine梠urseSyllabus'>Syllabus<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine梠urseSchedule'>Schedule<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine噊okChapters'>Book Chapters 馃搾<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MaingnfoSheet'>Info Sheet</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/CourseStandards'>Expectations<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine梠urseCompetencies'>Competencies<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationTools'>Optimization Software<t> </li><li><a class='urllink' href='https:]鍂ww.youtube.com/playlist?list=PLLBUgWXdTBDjVLQVMnT80y6m_97XNhBZv' rel='nofollow'>YouTube Playlist<t> </li><li><a class='urllink' href='https:]鍂ww.youtube.com/subscription_center?add_user=APMonitorCom' rel='nofollow'><img src='http:/t鎝monitor.comw踖575z鵳loadskyain/YouTube.png' alt='' b6</a> <v頸></ul><p class='vspace sidehead'>�?�!omework </p><ul><li><a class='selflink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/OptimizationBasics'>Optimization Basics<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink詙thonOptimization'>Optimize with Python<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Mainl4ubularColumn'>Tubular Column</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/TwoBarTruss'>Two Bar Truss</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/StepConePulley'>Step Cone Pulley</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/BeamColumn'>Beam Column<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine梤aneHook'>Crane Hook</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/RocketLaunch'>Rocket Launch<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MainlpringDesign'>Spring Design</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/MilkPasteurization'>Heat�!�?ntegration</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/LimestoneSlurry'>Slurry Pipeline</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/OxygenStorage'>Oxygen Furance<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink踰asiNewton'>Quasi-Newton Methods</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/DiscreteDesign'>Discrete Design<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MainlimAnnealHW'>Simulated Annealing<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink uhnTucker'>KKT Conditions<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MaingnteriorPointMethod'>Interior Point Method<t> </li><z鵯><p class='vspace sidehead'> Projects <y:><ul><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine4pplicationProject'>Application Project</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/SolverProject'>Solver Project<t> </li><z鵯><p class='vspace sidehead'> Activities <y:><ul><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MaingntroNLP'>1-MATLAB and Python</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/EquationResiduals'>2-Equation Residuals<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine鄆nancialObjectives'>0󕋎0隖inancial Objectives</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/ParallelComputing'>4-Parallel Computing<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine4dvancedProgramming'>5-Advanced Programming</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/LogicalConditions'>6-Logical Conditions<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MainlimulatedAnnealing'>7-Simulated Annealing</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/ClimateControl'>8-Climate Control<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MainenamicEstimation'>9-Dynamic Estimation</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/VLEWilson'>10-Vapor Liquid Equilibrium</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/EthylAcetate'>�-Ethyl Acetate Kinetics<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink ineticModeling'>-Dye Fading Kinetics</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/LinearMultivariateRegression'>-Linear Regression</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/NonlinearRegression'>14-Nonlinear Regression</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/KnapsackOptimization'>-Knapsack Optimization</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/ScheduleOptimization'>-Schedule Optimization</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/GlobalOptimization'>-Global Optimization</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/NonlinearPricing'>-Nonlinear Pricing</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/GPROptimization'>19-Optimize Uncertainty</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/MaintenanceInterval'>20-Optimize Maintenance</a> <v頸></ul><p class='vspace sidehead'> Lecture Notes <y:><ul><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maink藀timizationDesign'>Optimization Introduction</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/MathematicalModeling'>Mathematical Modeling<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MainpknconstrainedOptimization'>Unconstrained Optimization</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/DiscreteOptimization'>Discrete Optimization<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine錯neticAlgorithms'>Genetic Algorithms</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/ConstrainedOptimization'>Constrained Optimization<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MainlobustOptimization'>Robust Optimization</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/DynamicOptimization'>Dynamic Optimization<t> </li><z鵯><p class='vspace sidehead'> Extra Content </p><ul><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/BoxFolding'>Box Folding<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/Maine梚rcleChallenge'>Circle Challenge</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/LinearProgramming'>Linear Programming<t> </li><li><a class='wikilink' href='http:]錫pmonitor.com/me575/index.php/MainkyiniMax'>Minimax or Maximin</a> <v頸><li><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpkyain/SlackVariables'>Slack Variables<t> </li><z鵯><p class='vspace sidehead'> Related Courses </p><ul><li><a class='urllink' href='https:/t鎝monitor.comuhe�(尅�)0󡒬雐ndex.php/Maine梠urseProjects' rel='nofollow'>馃帗 Begin Python<t> </li><li><a class='urllink' href='https:]錫pmonitor.com/che263v}ndex.phpkyain/BeginMatlab' rel='nofollow'>馃帗 Begin Matlab<t> </li><li><a class='urllink' href='https:]錫pmonitor.com/che263v}ndex.phpkyain/BeginJava' rel='nofollow'>馃帗 Begin Java<t> <div class='vspace'></div></li><li><a class='urllink' href='https:]錫pmonitor.com/che263' rel='nofollow'>馃帗 Engineering Computing<t> </li><li><a class='urllink' href='https:]錫pmonitor.com/pds/index.php/Mainl4CLabIntro' rel='nofollow'>馃帗 Data Science<t> </li><li><a class='urllink' href='https:]錫pmonitor.com/dde' rel='nofollow'>馃帗 Data-Driven Engineering</a> <v頸><li><a class='urllink' href='https:/t鎝monitor.comy:ds' rel='nofollow'>馃帗 Machine Learning</a> <div class='vspace'><u(iv><v頸><li><a class='urllink' href='https:/t鎝monitor.comuhe436' rel='nofollow'>馃帗 Control (MATLAB)<t> </li><li><a class='urllink' href='https:]錫pmonitor.com/pdc' rel='nofollow'>馃帗 Control (Python)<t> <div class='vspace'></div></li><li><a class='urllink' href='https:]錫pmonitor.com/me575' rel='nofollow'>馃帗 Optimization<t> </li><li><a class='urllink' href='https:]錫pmonitor.com/do' rel='nofollow'>馃帗 Dynamic Optimization</a> <v頸></ul><p class='vspace' style='text-align: right;'> <span style='font-size: 83%;'><a class='wikilink' href='http:/t鎝monitor.comw踖575v}ndex.phpk詍Wiki/PmWiki'>Admin<t><ztpan> <y:> <�c-/pagerightfmt--> <u(iv> <div id="footer" class="clearfix"> <�c-pagefooterfmt--> <p>Last modified January 2 20, 2020󘐆 at 04:10򂆌򧂆鄍m <y:> <�c-/pagefooterfmt--> </div> </div> <div id="credits"> <div class="alignleft"> <u(iv> <div class="alignright"> <u(iv> </div> <�c-htmlfooter--> <style> .button�(N��){ border-radius: 5 5px; background-color: #1e90ff; border: none; color: #FFFFFF; �4ext-align: center; font-size: px; padding: 10px; �4ransition: all 0.5s; cursor:�0ointer; margin: 10px; } .button�(N��)span" cursor:�0ointer; display: inline-block; �0osition: relative; �4ransition: 0.5s; } .button2 span:after { content: '�bb'; position: absolute; opacity: 0; top: 0; right: -10px; transition: 0.5s; } .button�(T|�)hover span" �0adding-right: 10px; } .button�(T|�)hover span:after" opacity:  right: 0; } <zttyle> <script type='textv產vascript'><�c- window.toggleData ="�(; window.toggleData.toggle_cookie_name = '_toggle_Main_OptimizationBasics'; function�4oggleObj(id_of_element_to_toggle) { ] Retrieve the Toggle stateu(ata for the specified element. var T =�7indow.toggleData[id_of_element_to_toggle]; ]�!�?f we're *showing* an element�4hat's part of a defined group, /X雋ide all�4he elements of�4he group first (including the specified ] element itself,�7hich�7ill be re-shown immediately below). if (T.group  '' && T.new_state_to_toggle_to == 'show')" ]�?�?et all elements of�4he given class. document.querySelectorAll(`.${T.group}`).forEach(function(element_in_group)" setToggleState(element_in_group, 'hide') }); } ] Set�4he new state of the element. setToggleState(document.getElementById(id_of_element_to_toggle), T.new_state_to_toggle_to); ] Toggle the alternate element, if any. /X(T.new_state_to_toggle_to has now been reversed, by the line above.) if (T.id_of_alternate_element != '') setToggleState(document.getElementById(T.id_of_alternate_element), T.new_state_to_toggle_to, T.display); } function setToggleState(element, state, display = null)" /X隦etrieve�4he Toggle state/data for�4he specified element (if any). var T_e =�7indow.toggleData[element.id]; /X險pdate�4he element's display. element.style.display = (state == 'show') ? (T_e ? T_e.display : display) : 'none'; /X隝f�4he element has an entry in�4he saved data /X(i.e. if it has a toggle element of its own), ]�5pdate that saved data, and also update�4he�4oggle linkuutton. if (T_e) { /X隨et the new state, and�5pdate the saved data for�4he element. T_e.new_state_to_toggle_to = (state == 'show') ? 'hide' : 'show'; ] Adjust the toggle link for the element. var label = (state == 'show') ? T_e.toggle_link_label_in_visible_state : T_e.toggle_link_label_in_hidden_state; var�4ooltip = (state == 'show') ? T_e.toggle_link_tooltip_in_visible_state : T_e.toggle_link_tooltip_in_hidden_state; document.getElementById(`${element.id}-tog`).innerHTML =� (T_e.is_button == 1) ? `<input type='button' class='button2' value='${label}' onclick="javascript:toggleObj('�(�8�)element.id}')"� >` :� `<a class='togglelink'�4itle='�(�8�)tooltip}' href="javascript:toggleObj('�(�8�)element.id}')">${label}<t>`; ]�!�?f cookie setting is enabled, save the new state in a cookie. if (T_e.set_cookie == 1)�5pdateToggleCookie(element.id, state); } } function�5pdateToggleCookie(element_id, state)" /X隦etrieve... var toggleCookieName =�7indow.toggleData.toggle_cookie_name; var�4oggleCookieNameRegex = new RegExp(`${toggleCookieName}=([^;]+)`); var toggleCookieData = document.cookie.match(toggleCookieNameRegex); var�4oggleElementStates =�4oggleCookieData ? JSON.parse(toggleCookieData[o) : { }; ] Modify... toggleElementStates[element_id] = state; /X隨tore. document.cookie = `${toggleCookieName}=${JSON.stringify(toggleElementStates)};�0ath=t; } --><ztcript> <script�4ype='text/javascript'><!-- if (element = document.getElementById('gekko')) { element.style.display = 'none'; } window.toggleData['gekko'] = { 'new_state_to_toggle_to': 'show', 'toggle_link_label_in_hidden_state': 'Full Source Code', 'toggle_link_label_in_visible_state': 'Hide', 'toggle_link_tooltip_in_hidden_state': 'Show', 'toggle_link_tooltip_in_visible_state': 'Hide', 'id_of_alternate_element': '', 'display': 'block', 'is_button': '1', 'group': '', 'set_cookie': '' }; --></script> <uody> <vvtml> <!--�?�?lobal site�4ag (gtag.js) -�?�?oogle Analytics --> <script async src="https:/|鴚w.googletagmanager.com/gtagv畇?id=G-14BXFXE5GM"><ztcript> <script> window.dataLayer =�7indow.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-14BXFXE5GM'); <ztcript><!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> �!�!title>Streaming Chatbot<z薸tle> <style> #apmchatbotWrapper" all: initial; font-family: sans-serif; } #apmchatbotWrapper #chatbotContainer { position: fixed; bottom: 20px; right: �(e�)px; width: 5 50px; height: 5 50px; border-radius: 50%; background-color: #007aff; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); cursor:�0ointer; z-index: 1000; animation: pulse  infinite; display: flex; align-items: center; justify-content: center; transition: all 0.�A�U ease; �( #apmchatbotWrapper #chatbotContainer.expanded { width: auto; height: auto; min-width: �(ry�)0px; max-width: 90vw; max-height: 90vh; padding: 10px; border-radius: �(e�)px; animation: none; background-color: rgba(�(ry�)5, 255, �(ry�)5, 0.95); box-shadow: 0 0 �(e�)px rgba(0, 0, 0, 0.5); overflow-y: auto; overflow-x: auto; right: �(e�)px; left: auto; flex-direction: column; } @media (min-width: 768px)" #apmchatbotWrapper #chatbotContainer.expanded" max-width: 800px; �( �( #apmchatbotWrapper #chatbotIcon { font-size: 2 20px; color: white; �( #apmchatbotWrapper #chatbotContainer.expanded #chatbotIcon" display: none; } #apmchatbotWrapper #chatContent" display: none; flex-direction: column; height: auto; min-width: 250px; max-width: 88vw; max-height: 88vh; �0adding: 5px; border-radius: 5px; background-color: rgba(�(ry�)5, 255, �(ry�)5, 0.9); box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); overflow-y: auto; overflow-x: hidden; } #apmchatbotWrapper #chatbotContainer.expanded #chatContent { display: flex; �( #apmchatbotWrapper #chatBox { flex-grow: 1; overflow-y: auto; border: none; padding: 10px; background-color: #f0f0f0; border-radius: 10px; margin-bottom: 10px; } #apmchatbotWrapper .message�0re" display: block; max-width: 100%; overflow-x: auto; white-space:�0re; padding: 10px; background-color: #d3d3d3; color: #030303; border-radius: 5px; margin: 5px 0; �( #apmchatbotWrapper .message code" background-color: #d3d3d3; color: #030303; padding: 2px 2 2 2px; border-radius: 2 2px; } #apmchatbotWrapper #messageInput, #apmchatbotWrapper #sendMessageButton" �0adding: 10px; border: 選 solid #ccc; border-radius: 20px; font-size: px; } #apmchatbotWrapper #messageInput { flex-grow: 1; margin-right: 10px; } #apmchatbotWrapper #sendMessageButton" background-color: #007aff; color:�7hite; border: none; cursor: pointer; �( #apmchatbotWrapper #sendMessageButton:hover { background-color: #005bb5; �( #apmchatbotWrapper #minimizeButton" background-color: #007aff; color:�7hite; border: none; cursor: pointer; border-radius: �(e�)px; padding: 10px; margin-left: 10px; } #apmchatbotWrapper #minimizeButton:hover { background-color: #005bb5; �( #apmchatbotWrapper .message { margin: 5px 0; �0adding: 10px; border-radius: 20px; max-width: 100%; font-size: 1蹭x; line-height: 1.4; �7ord-wrap: break-word; } #apmchatbotWrapper .sent { align-self: flex-end; background-color: #007aff; color: white; border-bottom-right-radius: 0; } #apmchatbotWrapper .received { align-self: flex-start; background-color: #e5e5ea; color: black; border-bottom-left-radius: 0; �( #apmchatbotWrapper .typing" align-self: flex-start; font-style: italic; color: #888; } @keyframes pulse { 0%"�4ransform: scale(1); } 50% { transform: scale(1.1);�( 100% { transform: scale(1);�( �( �!�!zttyle> </head> <body> �!�!div id="apmchatbotWrapper"> <div id="chatbotContainer"> <div id="chatbotIcon">馃挰</div> �!�!div id="chatContent"> <div id="chatBox"></div> �!�!div style="display: flex; align-items: center;"> �!�!input type="text" id="messageInput" placeholder="Ask a�iuestion..."> �!�!button id="sendMessageButton" onclick="sendMessage()">Send</button> <button id="minimizeButton" onclick="minimizeChat()">Minimize<uutton> �!�!u(iv> </div> �!�!u(iv> </div> <script src="https:/udn.jsdelivr.net/npm/markedw踑rked.min.js"></script> <script> const chatbotContainer = document.querySelector('#apmchatbotWrapper #chatbotContainer'); const chatContent = document.querySelector('#apmchatbotWrapper #chatContent'); chatbotContainer.addEventListener('click', function(event)" if (event.target === chatbotContainer�=| event.target === document.querySelector('#apmchatbotWrapper #chatbotIcon')) { chatbotContainer.classList.toggle('expanded'); �( �(); function minimizeChat() { chatbotContainer.classList.remove('expanded'); chatbotContainer.style.maxWidth = ""; �( function sendMessage()" const input = document.querySelector('#apmchatbotWrapper #messageInput'); const message = input.value.trim(); if (message)" displayMessage(message, 'sent'); const�4ypingIndicator = displayMessage('AI is�4yping...', 'typing',�4rue); const�0ageContent = document.body.innerText.trim(); const�0ayload = `Context:�.{pageContent} \n\n Question:�.{message}`; const�7ebsocket = new 2 2 2 2ebSocket('wss:]録edengren.net/apmchat'); input.value = ''; let streamingText = ''; let receivedMessageElement = null; websocket.onopen = function() { websocket.send(payload); �(; �7ebsocket.onmessage = function(event)" if (!receivedMessageElement) { removeMessage(typingIndicator); receivedMessageElement = document.createElement('div'); receivedMessageElement.className = 'message received'; document.querySelector('#apmchatbotWrapper #chatBox').appendChild(receivedMessageElement); } streamingText += event.data; receivedMessageElement.innerHTML = marked.parse(streamingText); document.querySelector('#apmchatbotWrapper #chatBox').scrollTop = document.querySelector('#apmchatbotWrapper #chatBox').scrollHeight; �(; �7ebsocket.onerror = function() { removeMessage(typingIndicator); displayMessage('Error in connection', 'received'); �7ebsocket.close(); }; �( �( function displayMessage(text, className, returnElement = false) { const messageDiv = document.createElement('div'); messageDiv.className = 'message ' + className; messageDiv.innerHTML = marked.parse(text); document.querySelector('#apmchatbotWrapper #chatBox').appendChild(messageDiv); document.querySelector('#apmchatbotWrapper #chatBox').scrollTop = document.querySelector('#apmchatbotWrapper #chatBox').scrollHeight; if (returnElement) return messageDiv; } function removeMessage(element)" if (element�.�.�.& element.parentNode) { element.parentNode.removeChild(element); �( �( document.querySelector('#apmchatbotWrapper #messageInput').addEventListener('keypress', function(e) { if (e.key === 'Enter')" sendMessage(); } }); </script> </body> </html> �<�/�d�i�v�>�<�d�i�v� �c�l�a�s�s�=�"�n�a�k�e�d�_�c�t�r�l�"�>� �<�f�o�r�m� �a�c�t�i�o�n�=�"�/�i�n�d�e�x�.�c�g�i�/�l�a�r�g�e�r�-�t�e�x�t�"� �m�e�t�h�o�d�=�"�g�e�t�"� �n�a�m�e�=�"�g�a�t�e�"�>� �<�p�>�<�a� �h�r�e�f�=�"�h�t�t�p�:�/�/�a�l�t�s�t�y�l�e�.�a�l�f�a�s�a�d�o�.�n�e�t�"�>�A�l�t�S�t�y�l�e�<�/�a�>� 0k00c0fY c0U00_0󳻾� �<�a� �h�r�e�f�=�"�h�t�t�p�:�/�/�a�p�m�o�n�i�t�o�r�.�c�o�m�/�m�e�5�7�5�/�i�n�d�e�x�.�p�h�p�/�M�a�i�n�/�O�p�t�i�m�i�z�a�t�i�o�n�B�a�s�i�c�s�"�>�(�-�&�g�t�;0񠏊򋎚�)�<�/�a�>� �/� �<�l�a�b�e�l�>0񇣀0�:� �<�i�n�p�u�t� �t�y�p�e�=�"�t�e�x�t�"� �n�a�m�e�=�"�n�a�k�e�d�_�p�o�s�t�_�u�r�l�"� �v�a�l�u�e�=�"�h�t�t�p�:�/�/�a�p�m�o�n�i�t�o�r�.�c�o�m�/�m�e�5�7�5�/�i�n�d�e�x�.�p�h�p�/�M�a�i�n�/�O�p�t�i�m�i�z�a�t�i�o�n�B�a�s�i�c�s�"� �s�i�z�e�=�"�2�2�"� �/�>�<�/�l�a�b�e�l�>� �<�l�a�b�e�l�>0􌢾�:� �<�s�e�l�e�c�t� �n�a�m�e�=�"�n�a�k�e�d�_�p�o�s�t�_�m�o�d�e�"�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�d�e�f�a�u�l�t�"�>0򹙐񝊜�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�s�p�e�e�c�h�"�>楏X0󧥠0�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�r�u�b�y�"�>00覰0M�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�c�o�n�t�r�a�s�t�"�>慚俽S蛶�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�l�a�r�g�e�r�-�t�e�x�t�"� �s�e�l�e�c�t�e�d�=�"�s�e�l�e�c�t�e�d�"�>e嘯Wb醂'�<�/�o�p�t�i�o�n�>� �<�o�p�t�i�o�n� �v�a�l�u�e�=�"�m�o�b�i�l�e�"�>0􌜆0�<�/�o�p�t�i�o�n�>� �<�/�s�e�l�e�c�t�>� �<�i�n�p�u�t� �t�y�p�e�=�"�s�u�b�m�i�t�"� �v�a�l�u�e�=�"坔y:�"� �/�>� �<�/�p�>� �<�/�f�o�r�m�>� �<�/�d�i�v�>� � �