<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ascend4.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=VerlieBoss</id>
	<title>ASCEND - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://ascend4.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=VerlieBoss"/>
	<link rel="alternate" type="text/html" href="https://ascend4.org/Special:Contributions/VerlieBoss"/>
	<updated>2026-04-28T23:03:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://ascend4.org/index.php?title=Non-proprietary_Optimization&amp;diff=985</id>
		<title>Non-proprietary Optimization</title>
		<link rel="alternate" type="text/html" href="https://ascend4.org/index.php?title=Non-proprietary_Optimization&amp;diff=985"/>
		<updated>2010-07-20T14:31:18Z</updated>

		<summary type="html">&lt;p&gt;VerlieBoss: /* Requirements for New Optimizer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{task}}&lt;br /&gt;
&lt;br /&gt;
We are trying to locate a suitable non-commercial optimizer to build into ASCEND. This would alleviate the current dependence on the proprietary [[CONOPT]] optimizer.&lt;br /&gt;
&lt;br /&gt;
This task is currently being worked on by a [http://socghop.appspot.com/org/home/google/gsoc2009/ascend Google Summer of Code student].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements for New Optimizer ==&lt;br /&gt;
&lt;br /&gt;
Mathematical/algorithm requirements:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Must be able to handle &#039;box constraints&#039;, eg &amp;lt;math&amp;gt;a \le x \le b&amp;lt;/math&amp;gt; for each variable.&lt;br /&gt;
* Must be able to handle equality constrains, eg &amp;lt;span class=&amp;quot;texhtml&amp;quot;&amp;gt;&#039;&#039;g&#039;&#039;(&#039;&#039;x&#039;&#039;,&#039;&#039;y&#039;&#039;,&#039;&#039;z&#039;&#039;) = 0&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;texhtml&amp;quot;&amp;gt;&#039;&#039;x&#039;&#039; = &#039;&#039;f&#039;&#039;(&#039;&#039;y&#039;&#039;,&#039;&#039;z&#039;&#039;,&#039;&#039;a&#039;&#039;,&#039;&#039;b&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
* Must be able to handle non-linear problems&lt;br /&gt;
* If matrix algebra is required, should use sparse methods rather than dense&lt;br /&gt;
* Should be able to make use of derivatives&lt;br /&gt;
&lt;br /&gt;
Open questions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.superiorpapers.com/ custom papers]&lt;br /&gt;
* Should be able to handle general inequality constraints, eg &amp;lt;math&amp;gt;g(x,y,z) \le 0&amp;lt;/math&amp;gt;&amp;amp;nbsp;?&lt;br /&gt;
* Should &#039;&#039;not&#039;&#039; assume convex problem?&lt;br /&gt;
* Should &#039;&#039;not&#039;&#039; require second derivatives/Hessian matrix?&lt;br /&gt;
* Should be able to handle non-linear constraints?&lt;br /&gt;
&lt;br /&gt;
Supporting information requirements:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Should be known to solve a range of comparable problems to those which we expect to encounter&lt;br /&gt;
* Must be accompanied by a set of solvable problems for which exact solutions are known, for testing purposes.&lt;br /&gt;
* Should have a published algorithm&lt;br /&gt;
* Must have a user&#039;s manual&lt;br /&gt;
* Should have a freely-available user&#039;s manual&lt;br /&gt;
&lt;br /&gt;
Pedantic legal stuff:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Must be freely available to academics&lt;br /&gt;
* All requirement dependencies must be freely available to academics&lt;br /&gt;
* Should be freely available to everybody&lt;br /&gt;
* Should be redistributable in unmodified source form&lt;br /&gt;
* Should be redistributable in modified source form&lt;br /&gt;
* Should be redistributable in binary (compiled) form&lt;br /&gt;
* Documentation should be redistributable in original form&lt;br /&gt;
* Documentation should be redistributable in modified/repackaged form&lt;br /&gt;
&lt;br /&gt;
== Background info ==&lt;br /&gt;
&lt;br /&gt;
Related stuff:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Hessian_matrix Hessian matrix]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Karush-Kuhn-Tucker_conditions Karush-Kuhn-Tucker conditions]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Interior_point_method Interior point method]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Sequential_quadratic_programming Sequential quadratic programming]&lt;br /&gt;
* A [http://en.wikipedia.org/wiki/Category:Optimization_algorithms list of optimisation algorithms].&lt;br /&gt;
* A [http://orion.uwaterloo.ca/~hwolkowi/mirror.d/glossary/index.php glossary of Mathematical Programming (i.e. optimisation) terms].&lt;br /&gt;
&lt;br /&gt;
We have done our own cursory [[survey of optimisation software]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TRON ==&lt;br /&gt;
&lt;br /&gt;
Some work was done to investigate possible adding support for [[TRON]] in ASCEND. TRON can only solve the limited optimisation problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
\min f(\mathbf{x}) \\&lt;br /&gt;
\mathbf{x}_{lower} \le \mathbf{x} \le \mathbf{x}_{upper}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are observations:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* TRON requires that you write your own iteration loop &#039;&#039;outside&#039;&#039; TRON itself.&lt;br /&gt;
* TRON requires that you evaluate the function value and Hessian matrix (in a special compressed form that involves a vector of diagonal values then compressed column form for the off diagonal values, which being symmetric only need to cover half the matrix (so compressed column == compressed row?).&lt;br /&gt;
* TRON updates the variable vector and tells you when an optimum has been found.&lt;br /&gt;
* It&#039;s up to you to count iterations and terminate if it&#039;s taking too long etc.&lt;br /&gt;
* It seems fairly conceivable that solving more general systems with TRON might be possible by performing a separate NLA problem solution each iteration. But we&#039;re hesitant about trying that, because we&#039;re not completely comfortable with the maths involved in doing that at this stage, and not sure if it will mess up considerations of feasibility/optimality from TRON&#039;s PoV.&lt;br /&gt;
&lt;br /&gt;
== IPOPT ==&lt;br /&gt;
&lt;br /&gt;
IPOPT solves a more useful type of problem that includes equality constraints:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
\min f(\mathbf{x}) \\&lt;br /&gt;
\mathbf{c}_L \le \mathbf{c}(\mathbf{x}) \le \mathbf{c}_U \\&lt;br /&gt;
\mathbf{x}_L \le \mathbf{x} \le \mathbf{x}_U&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is emphasised that solving equality constraints is done just by setting elements of &amp;lt;math&amp;gt;\mathbf{c}_L&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\mathbf{c}_U&amp;lt;/math&amp;gt; equal to each other.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
IPOPT supports a number of linear solvers including the HSL routine MA27, but also MUMPS, which is a free open source solver. So it is now possible to distribute a full working copy of IPOPT with ASCEND. It is also possible to have &#039;drop-in&#039; support for HSL, because IPOPT can detect and dlopen HSL at runtime, if present.&lt;br /&gt;
&lt;br /&gt;
Download/build instructions are here:&lt;br /&gt;
[http://www.coin-or.org/Ipopt/documentation/node18.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MOOCHO / rSQP++ ==&lt;br /&gt;
&lt;br /&gt;
The way that MOOCHO is packaged for download is as part of the big &#039;&#039;&#039;Trilinos&#039;&#039;&#039; bundle. This is a huge download that takes more than an hour to build on my system.&lt;br /&gt;
&lt;br /&gt;
An RPM has been built for the Trilinos bundle, including MOOCHO. Get it from:&lt;br /&gt;
[http://software.opensuse.org/download/home:/jdpipe/]&lt;br /&gt;
&lt;br /&gt;
The support for generic linear algebra routines is also now deprecated, and they are going for all-out integration with the other Trilinos packages. That means there&#039;s quite a lot to learn about. It&#039;s a bit daunting -- if anyone else fancies helping out, by all means, please do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Category:Proposed]]&lt;/div&gt;</summary>
		<author><name>VerlieBoss</name></author>
	</entry>
</feed>