diff options
author | Harpreet | 2015-11-26 13:13:46 +0530 |
---|---|---|
committer | Harpreet | 2015-11-26 13:13:46 +0530 |
commit | 2af2dd71492d5485bd921cfe7b832811881947bb (patch) | |
tree | 3b4934f40a140f5ac54046ab3a530798c36708bb | |
parent | 8cf5063387ba60907e8e114b128abe5555922ad7 (diff) | |
download | FOSSEE-Optimization-toolbox-2af2dd71492d5485bd921cfe7b832811881947bb.tar.gz FOSSEE-Optimization-toolbox-2af2dd71492d5485bd921cfe7b832811881947bb.tar.bz2 FOSSEE-Optimization-toolbox-2af2dd71492d5485bd921cfe7b832811881947bb.zip |
lsqlin added
35 files changed, 936 insertions, 65 deletions
diff --git a/demos/lsqlin.dem.sce b/demos/lsqlin.dem.sce new file mode 100644 index 0000000..d417bf0 --- /dev/null +++ b/demos/lsqlin.dem.sce @@ -0,0 +1,49 @@ +mode(1) +// +// Demo of lsqlin.sci +// + +//A simple linear least square example +C = [0.9501 0.7620 0.6153 0.4057 +0.2311 0.4564 0.7919 0.9354 +0.6068 0.0185 0.9218 0.9169 +0.4859 0.8214 0.7382 0.4102 +0.8912 0.4447 0.1762 0.8936]; +d = [0.0578 +0.3528 +0.8131 +0.0098 +0.1388]; +A = [0.2027 0.2721 0.7467 0.4659 +0.1987 0.1988 0.4450 0.4186 +0.6037 0.0152 0.9318 0.8462]; +b = [0.5251 +0.2026 +0.6721]; +[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b) +halt() // Press return to continue + +C = [0.9501 0.7620 0.6153 0.4057 +0.2311 0.4564 0.7919 0.9354 +0.6068 0.0185 0.9218 0.9169 +0.4859 0.8214 0.7382 0.4102 +0.8912 0.4447 0.1762 0.8936]; +d = [0.0578 +0.3528 +0.8131 +0.0098 +0.1388]; +A =[0.2027 0.2721 0.7467 0.4659 +0.1987 0.1988 0.4450 0.4186 +0.6037 0.0152 0.9318 0.8462]; +b =[0.5251 +0.2026 +0.6721]; +Aeq = [3 5 7 9]; +beq = 4; +lb = -0.1*ones(4,1); +ub = 2*ones(4,1); +[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub) +halt() // Press return to continue + +//========= E N D === O F === D E M O =========// diff --git a/demos/qpipopt_mat.dem.sce b/demos/qpipopt_mat.dem.sce deleted file mode 100644 index 0f65036..0000000 --- a/demos/qpipopt_mat.dem.sce +++ /dev/null @@ -1,40 +0,0 @@ -mode(1) -// -// Demo of qpipopt_mat.sci -// - -//Find x in R^6 such that: -halt() // Press return to continue - -Aeq= [1,-1,1,0,3,1; --1,0,-3,-4,5,6; -2,5,3,0,1,0]; -beq=[1; 2; 3]; -A= [0,1,0,1,2,-1; --1,0,2,1,1,0]; -b = [-1; 2.5]; -lb=[-1000; -10000; 0; -1000; -1000; -1000]; -ub=[10000; 100; 1.5; 100; 100; 1000]; -//and minimize 0.5*x'*Q*x + p'*x with -f=[1; 2; 3; 4; 5; 6]; H=eye(6,6); -[xopt,fopt,exitflag,output,lambda]=qpipopt_mat(H,f,A,b,Aeq,beq,lb,ub) -clear H f A b Aeq beq lb ub; -halt() // Press return to continue - -//Find the value of x that minimize following function -// f(x) = 0.5*x1^2 + x2^2 - x1*x2 - 2*x1 - 6*x2 -// Subject to: -// x1 + x2 ≤ 2 -// –x1 + 2x2 ≤ 2 -// 2x1 + x2 ≤ 3 -// 0 ≤ x1, 0 ≤ x2. -H = [1 -1; -1 2]; -f = [-2; -6]; -A = [1 1; -1 2; 2 1]; -b = [2; 2; 3]; -lb = [0; 0]; -ub = [%inf; %inf]; -[xopt,fopt,exitflag,output,lambda] = qpipopt_mat(H,f,A,b,[],[],lb,ub) -halt() // Press return to continue - -//========= E N D === O F === D E M O =========// diff --git a/help/en_US/lsqlin.xml b/help/en_US/lsqlin.xml new file mode 100644 index 0000000..92dbd91 --- /dev/null +++ b/help/en_US/lsqlin.xml @@ -0,0 +1,156 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + * + * This help file was generated from lsqlin.sci using help_from_sci(). + * + --> + +<refentry version="5.0-subset Scilab" xml:id="lsqlin" xml:lang="en" + xmlns="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:ns3="http://www.w3.org/1999/xhtml" + xmlns:mml="http://www.w3.org/1998/Math/MathML" + xmlns:scilab="http://www.scilab.org" + xmlns:db="http://docbook.org/ns/docbook"> + + <refnamediv> + <refname>lsqlin</refname> + <refpurpose>Solves a linear quadratic problem.</refpurpose> + </refnamediv> + + +<refsynopsisdiv> + <title>Calling Sequence</title> + <synopsis> + x = lsqlin(C,d,A,b) + x = lsqlin(C,d,A,b,Aeq,beq) + x = lsqlin(C,d,A,b,Aeq,beq,lb,ub) + x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0) + x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,param) + [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin( ... ) + + </synopsis> +</refsynopsisdiv> + +<refsection> + <title>Parameters</title> + <variablelist> + <varlistentry><term>C :</term> + <listitem><para> a matrix of doubles, represents the multiplier of the solution x in the expression C*x - d. C is M-by-N, where M is the number of equations, and N is the number of elements of x.</para></listitem></varlistentry> + <varlistentry><term>d :</term> + <listitem><para> a vector of doubles, represents the additive constant term in the expression C*x - d. d is M-by-1, where M is the number of equations.</para></listitem></varlistentry> + <varlistentry><term>A :</term> + <listitem><para> a vector of doubles, represents the linear coefficients in the inequality constraints</para></listitem></varlistentry> + <varlistentry><term>b :</term> + <listitem><para> a vector of doubles, represents the linear coefficients in the inequality constraints</para></listitem></varlistentry> + <varlistentry><term>Aeq :</term> + <listitem><para> a matrix of doubles, represents the linear coefficients in the equality constraints</para></listitem></varlistentry> + <varlistentry><term>beq :</term> + <listitem><para> a vector of doubles, represents the linear coefficients in the equality constraints</para></listitem></varlistentry> + <varlistentry><term>LB :</term> + <listitem><para> a vector of doubles, where n is number of variables, contains lower bounds of the variables.</para></listitem></varlistentry> + <varlistentry><term>UB :</term> + <listitem><para> a vector of doubles, where n is number of variables, contains upper bounds of the variables.</para></listitem></varlistentry> + <varlistentry><term>x0 :</term> + <listitem><para> a vector of doubles, contains initial guess of variables.</para></listitem></varlistentry> + <varlistentry><term>param :</term> + <listitem><para> a list containing the the parameters to be set.</para></listitem></varlistentry> + <varlistentry><term>xopt :</term> + <listitem><para> a vector of doubles, the computed solution of the optimization problem.</para></listitem></varlistentry> + <varlistentry><term>fopt :</term> + <listitem><para> a double, the function value at x.</para></listitem></varlistentry> + <varlistentry><term>exitflag :</term> + <listitem><para> Integer identifying the reason the algorithm terminated.</para></listitem></varlistentry> + <varlistentry><term>output :</term> + <listitem><para> Structure containing information about the optimization.</para></listitem></varlistentry> + <varlistentry><term>lambda :</term> + <listitem><para> Structure containing the Lagrange multipliers at the solution x (separated by constraint type).</para></listitem></varlistentry> + </variablelist> +</refsection> + +<refsection> + <title>Description</title> + <para> +Search the minimum of a constrained linear least square problem specified by : +find the minimum of f(x) such that + </para> + <para> +<latex> +\begin{eqnarray} +&\mbox{min}_{x} +& 1/2||C*x - d||_2^2 \\ +& \text{subject to} & A.x \leq b \\ +& & Aeq.x \leq beq \\ +& & lb \leq x \leq ub \\ +\end{eqnarray} +</latex> + </para> + <para> +We are calling IPOpt for solving the linear least square problem, IPOpt is a library written in C++. The code has been written by Andreas Wächter and Carl Laird. + </para> + <para> +</para> +</refsection> + +<refsection> + <title>Examples</title> + <programlisting role="example"><![CDATA[ +//A simple linear least square example +C = [0.9501 0.7620 0.6153 0.4057 +0.2311 0.4564 0.7919 0.9354 +0.6068 0.0185 0.9218 0.9169 +0.4859 0.8214 0.7382 0.4102 +0.8912 0.4447 0.1762 0.8936]; +d = [0.0578 +0.3528 +0.8131 +0.0098 +0.1388]; +A = [0.2027 0.2721 0.7467 0.4659 +0.1987 0.1988 0.4450 0.4186 +0.6037 0.0152 0.9318 0.8462]; +b = [0.5251 +0.2026 +0.6721]; +[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b) + + ]]></programlisting> +</refsection> + +<refsection> + <title>Examples</title> + <programlisting role="example"><![CDATA[ +C = [0.9501 0.7620 0.6153 0.4057 +0.2311 0.4564 0.7919 0.9354 +0.6068 0.0185 0.9218 0.9169 +0.4859 0.8214 0.7382 0.4102 +0.8912 0.4447 0.1762 0.8936]; +d = [0.0578 +0.3528 +0.8131 +0.0098 +0.1388]; +A =[0.2027 0.2721 0.7467 0.4659 +0.1987 0.1988 0.4450 0.4186 +0.6037 0.0152 0.9318 0.8462]; +b =[0.5251 +0.2026 +0.6721]; +Aeq = [3 5 7 9]; +beq = 4; +lb = -0.1*ones(4,1); +ub = 2*ones(4,1); +[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub) + + ]]></programlisting> +</refsection> + +<refsection> + <title>Authors</title> + <simplelist type="vert"> + <member>Harpreet Singh</member> + </simplelist> +</refsection> +</refentry> diff --git a/help/en_US/master_help.xml b/help/en_US/master_help.xml index 66b8e0d..05f5acd 100644 --- a/help/en_US/master_help.xml +++ b/help/en_US/master_help.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book [ <!--Begin Entities--> +<!ENTITY a3d4ec65684b561d91f7a255acd23f51c SYSTEM "/home/harpreet/symphony_work/symphony/help/en_US/lsqlin.xml"> <!ENTITY a6b85f6e0c98751f20b68663a23cb4cd2 SYSTEM "/home/harpreet/symphony_work/symphony/help/en_US/qpipopt.xml"> <!ENTITY a44928acec52adf395379e18fcff06730 SYSTEM "/home/harpreet/symphony_work/symphony/help/en_US/qpipopt_mat.xml"> <!ENTITY a8549a3935858ed104f4749ca2243456a SYSTEM "/home/harpreet/symphony_work/symphony/help/en_US/qpipoptmat.xml"> @@ -81,6 +82,7 @@ <part xml:id='section_19f4f1e5726c01d683e8b82be0a7e910'> <title>Symphony Toolbox</title> +&a3d4ec65684b561d91f7a255acd23f51c; &a6b85f6e0c98751f20b68663a23cb4cd2; &a44928acec52adf395379e18fcff06730; &a8549a3935858ed104f4749ca2243456a; diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS Binary files differindex d5a7298..d7917b0 100644 --- a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS +++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB Binary files differindex 0095d6c..1359fb5 100644 --- a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB +++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS b/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS Binary files differindex 3fdc4c1..ae82060 100644 --- a/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS +++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS b/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS Binary files differindex d69ed8d..a0643a5 100644 --- a/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS +++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA b/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA index c0f76d2..c32f6ae 100644 --- a/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA +++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA @@ -1,2 +1,2 @@ JavaSearch 1.0 -TMAP bs=2048 rt=1 fl=-1 id1=1355 id2=1 +TMAP bs=2048 rt=1 fl=-1 id1=1413 id2=1 diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP b/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP Binary files differindex 39ca223..dd780c5 100644 --- a/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP +++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP diff --git a/help/en_US/scilab_en_US_help/_LaTeX_lsqlin.xml_1.png b/help/en_US/scilab_en_US_help/_LaTeX_lsqlin.xml_1.png Binary files differnew file mode 100644 index 0000000..d89b104 --- /dev/null +++ b/help/en_US/scilab_en_US_help/_LaTeX_lsqlin.xml_1.png diff --git a/help/en_US/scilab_en_US_help/index.html b/help/en_US/scilab_en_US_help/index.html index b1cfd9c..af31f16 100644 --- a/help/en_US/scilab_en_US_help/index.html +++ b/help/en_US/scilab_en_US_help/index.html @@ -32,7 +32,13 @@ <ul class="list-part"><a name="symphony_toolbox_manual"></a><div class="info"></div> <li><a href="section_19f4f1e5726c01d683e8b82be0a7e910.html" class="part">Symphony Toolbox</a> -<ul class="list-chapter"><li><a href="qpipopt.html" class="refentry">qpipopt</a> — <span class="refentry-description">Solves a linear quadratic problem.</span></li> +<ul class="list-chapter"><li><a href="lsqlin.html" class="refentry">lsqlin</a> — <span class="refentry-description">Solves a linear quadratic problem.</span></li> + + + + + +<li><a href="qpipopt.html" class="refentry">qpipopt</a> — <span class="refentry-description">Solves a linear quadratic problem.</span></li> diff --git a/help/en_US/scilab_en_US_help/jhelpmap.jhm b/help/en_US/scilab_en_US_help/jhelpmap.jhm index 47f4429..8950140 100644 --- a/help/en_US/scilab_en_US_help/jhelpmap.jhm +++ b/help/en_US/scilab_en_US_help/jhelpmap.jhm @@ -3,6 +3,7 @@ <map version="1.0"> <mapID target="index" url="index.html"/> <mapID target="section_19f4f1e5726c01d683e8b82be0a7e910" url="section_19f4f1e5726c01d683e8b82be0a7e910.html"/> +<mapID target="lsqlin" url="lsqlin.html"/> <mapID target="qpipopt" url="qpipopt.html"/> <mapID target="qpipopt_mat" url="qpipopt_mat.html"/> <mapID target="qpipoptmat" url="qpipoptmat.html"/> diff --git a/help/en_US/scilab_en_US_help/jhelptoc.xml b/help/en_US/scilab_en_US_help/jhelptoc.xml index 95d4995..5cac88f 100644 --- a/help/en_US/scilab_en_US_help/jhelptoc.xml +++ b/help/en_US/scilab_en_US_help/jhelptoc.xml @@ -3,6 +3,7 @@ <toc version="1.0"> <tocitem target="index" text="Symphony Toolbox"> <tocitem target="section_19f4f1e5726c01d683e8b82be0a7e910" text="Symphony Toolbox"> +<tocitem target="lsqlin" text="lsqlin"/> <tocitem target="qpipopt" text="qpipopt"/> <tocitem target="qpipopt_mat" text="qpipopt_mat"/> <tocitem target="qpipoptmat" text="qpipoptmat"/> diff --git a/help/en_US/scilab_en_US_help/lsqlin.html b/help/en_US/scilab_en_US_help/lsqlin.html new file mode 100644 index 0000000..96c6de1 --- /dev/null +++ b/help/en_US/scilab_en_US_help/lsqlin.html @@ -0,0 +1,153 @@ +<html><head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>lsqlin</title> + <style type="text/css" media="all"> + @import url("scilab_code.css"); + @import url("xml_code.css"); + @import url("c_code.css"); + @import url("style.css"); + </style> + </head> + <body> + <div class="manualnavbar"> + <table width="100%"><tr> + <td width="30%"> + <span class="previous"><a href="section_19f4f1e5726c01d683e8b82be0a7e910.html"><< Symphony Toolbox</a></span> + + </td> + <td width="40%" class="center"> + <span class="top"><a href="section_19f4f1e5726c01d683e8b82be0a7e910.html">Symphony Toolbox</a></span> + + </td> + <td width="30%" class="next"> + <span class="next"><a href="qpipopt.html">qpipopt >></a></span> + + </td> + </tr></table> + <hr /> + </div> + + + + <span class="path"><a href="index.html">Symphony Toolbox</a> >> <a href="section_19f4f1e5726c01d683e8b82be0a7e910.html">Symphony Toolbox</a> > lsqlin</span> + + <br /><br /> + <div class="refnamediv"><h1 class="refname">lsqlin</h1> + <p class="refpurpose">Solves a linear quadratic problem.</p></div> + + +<div class="refsynopsisdiv"><h3 class="title">Calling Sequence</h3> + <div class="synopsis"><pre><span class="default">x</span><span class="default"> = </span><span class="functionid">lsqlin</span><span class="default">(</span><span class="default">C</span><span class="default">,</span><span class="default">d</span><span class="default">,</span><span class="default">A</span><span class="default">,</span><span class="default">b</span><span class="default">)</span> +<span class="default">x</span><span class="default"> = </span><span class="functionid">lsqlin</span><span class="default">(</span><span class="default">C</span><span class="default">,</span><span class="default">d</span><span class="default">,</span><span class="default">A</span><span class="default">,</span><span class="default">b</span><span class="default">,</span><span class="default">Aeq</span><span class="default">,</span><span class="default">beq</span><span class="default">)</span> +<span class="default">x</span><span class="default"> = </span><span class="functionid">lsqlin</span><span class="default">(</span><span class="default">C</span><span class="default">,</span><span class="default">d</span><span class="default">,</span><span class="default">A</span><span class="default">,</span><span class="default">b</span><span class="default">,</span><span class="default">Aeq</span><span class="default">,</span><span class="default">beq</span><span class="default">,</span><span class="default">lb</span><span class="default">,</span><span class="default">ub</span><span class="default">)</span> +<span class="default">x</span><span class="default"> = </span><span class="functionid">lsqlin</span><span class="default">(</span><span class="default">C</span><span class="default">,</span><span class="default">d</span><span class="default">,</span><span class="default">A</span><span class="default">,</span><span class="default">b</span><span class="default">,</span><span class="default">Aeq</span><span class="default">,</span><span class="default">beq</span><span class="default">,</span><span class="default">lb</span><span class="default">,</span><span class="default">ub</span><span class="default">,</span><span class="default">x0</span><span class="default">)</span> +<span class="default">x</span><span class="default"> = </span><span class="functionid">lsqlin</span><span class="default">(</span><span class="default">C</span><span class="default">,</span><span class="default">d</span><span class="default">,</span><span class="default">A</span><span class="default">,</span><span class="default">b</span><span class="default">,</span><span class="default">Aeq</span><span class="default">,</span><span class="default">beq</span><span class="default">,</span><span class="default">lb</span><span class="default">,</span><span class="default">ub</span><span class="default">,</span><span class="default">x0</span><span class="default">,</span><span class="default">param</span><span class="default">)</span> +<span class="default">[</span><span class="default">xopt</span><span class="default">,</span><span class="default">resnorm</span><span class="default">,</span><span class="default">residual</span><span class="default">,</span><span class="default">exitflag</span><span class="default">,</span><span class="default">output</span><span class="default">,</span><span class="default">lambda</span><span class="default">] = </span><span class="functionid">lsqlin</span><span class="default">( ... )</span></pre></div></div> + +<div class="refsection"><h3 class="title">Parameters</h3> + <dl><dt><span class="term">C :</span> + <dd><p class="para">a matrix of doubles, represents the multiplier of the solution x in the expression C*x - d. C is M-by-N, where M is the number of equations, and N is the number of elements of x.</p></dd></dt> + <dt><span class="term">d :</span> + <dd><p class="para">a vector of doubles, represents the additive constant term in the expression C*x - d. d is M-by-1, where M is the number of equations.</p></dd></dt> + <dt><span class="term">A :</span> + <dd><p class="para">a vector of doubles, represents the linear coefficients in the inequality constraints</p></dd></dt> + <dt><span class="term">b :</span> + <dd><p class="para">a vector of doubles, represents the linear coefficients in the inequality constraints</p></dd></dt> + <dt><span class="term">Aeq :</span> + <dd><p class="para">a matrix of doubles, represents the linear coefficients in the equality constraints</p></dd></dt> + <dt><span class="term">beq :</span> + <dd><p class="para">a vector of doubles, represents the linear coefficients in the equality constraints</p></dd></dt> + <dt><span class="term">LB :</span> + <dd><p class="para">a vector of doubles, where n is number of variables, contains lower bounds of the variables.</p></dd></dt> + <dt><span class="term">UB :</span> + <dd><p class="para">a vector of doubles, where n is number of variables, contains upper bounds of the variables.</p></dd></dt> + <dt><span class="term">x0 :</span> + <dd><p class="para">a vector of doubles, contains initial guess of variables.</p></dd></dt> + <dt><span class="term">param :</span> + <dd><p class="para">a list containing the the parameters to be set.</p></dd></dt> + <dt><span class="term">xopt :</span> + <dd><p class="para">a vector of doubles, the computed solution of the optimization problem.</p></dd></dt> + <dt><span class="term">fopt :</span> + <dd><p class="para">a double, the function value at x.</p></dd></dt> + <dt><span class="term">exitflag :</span> + <dd><p class="para">Integer identifying the reason the algorithm terminated.</p></dd></dt> + <dt><span class="term">output :</span> + <dd><p class="para">Structure containing information about the optimization.</p></dd></dt> + <dt><span class="term">lambda :</span> + <dd><p class="para">Structure containing the Lagrange multipliers at the solution x (separated by constraint type).</p></dd></dt></dl></div> + +<div class="refsection"><h3 class="title">Description</h3> + <p class="para">Search the minimum of a constrained linear least square problem specified by : +find the minimum of f(x) such that</p> + <p class="para"><span><img src='./_LaTeX_lsqlin.xml_1.png' style='position:relative;top:41px;width:234px;height:90px'/></span></p> + <p class="para">We are calling IPOpt for solving the linear least square problem, IPOpt is a library written in C++. The code has been written by Andreas Wächter and Carl Laird.</p> + <p class="para"></p></div> + +<div class="refsection"><h3 class="title">Examples</h3> + <div class="programlisting"><table border="0" width="100%"><tr><td width="98%"><pre class="scilabcode"><span class="scilabcomment">//A simple linear least square example</span> +<span class="scilabid">C</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.9501</span> <span class="scilabnumber">0.7620</span> <span class="scilabnumber">0.6153</span> <span class="scilabnumber">0.4057</span> +<span class="scilabnumber">0.2311</span> <span class="scilabnumber">0.4564</span> <span class="scilabnumber">0.7919</span> <span class="scilabnumber">0.9354</span> +<span class="scilabnumber">0.6068</span> <span class="scilabnumber">0.0185</span> <span class="scilabnumber">0.9218</span> <span class="scilabnumber">0.9169</span> +<span class="scilabnumber">0.4859</span> <span class="scilabnumber">0.8214</span> <span class="scilabnumber">0.7382</span> <span class="scilabnumber">0.4102</span> +<span class="scilabnumber">0.8912</span> <span class="scilabnumber">0.4447</span> <span class="scilabnumber">0.1762</span> <span class="scilabnumber">0.8936</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabid">d</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.0578</span> +<span class="scilabnumber">0.3528</span> +<span class="scilabnumber">0.8131</span> +<span class="scilabnumber">0.0098</span> +<span class="scilabnumber">0.1388</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabid">A</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.2027</span> <span class="scilabnumber">0.2721</span> <span class="scilabnumber">0.7467</span> <span class="scilabnumber">0.4659</span> +<span class="scilabnumber">0.1987</span> <span class="scilabnumber">0.1988</span> <span class="scilabnumber">0.4450</span> <span class="scilabnumber">0.4186</span> +<span class="scilabnumber">0.6037</span> <span class="scilabnumber">0.0152</span> <span class="scilabnumber">0.9318</span> <span class="scilabnumber">0.8462</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabid">b</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.5251</span> +<span class="scilabnumber">0.2026</span> +<span class="scilabnumber">0.6721</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabopenclose">[</span><span class="scilabid">xopt</span><span class="scilabdefault">,</span><span class="scilabid">resnorm</span><span class="scilabdefault">,</span><span class="scilabid">residual</span><span class="scilabdefault">,</span><span class="scilabid">exitflag</span><span class="scilabdefault">,</span><span class="scilabid">output</span><span class="scilabdefault">,</span><span class="scilabid">lambda</span><span class="scilabopenclose">]</span> <span class="scilaboperator">=</span> <span class="scilabid">lsqlin</span><span class="scilabopenclose">(</span><span class="scilabid">C</span><span class="scilabdefault">,</span><span class="scilabid">d</span><span class="scilabdefault">,</span><span class="scilabid">A</span><span class="scilabdefault">,</span><span class="scilabid">b</span><span class="scilabopenclose">)</span></pre></td><td valign="top"><a href="scilab://scilab.execexample/"><img src="ScilabExecute.png" border="0"/></a></td><td valign="top"><a href="scilab://scilab.editexample/"><img src="ScilabEdit.png" border="0"/></a></td><td></td></tr></table></div></div> + +<div class="refsection"><h3 class="title">Examples</h3> + <div class="programlisting"><table border="0" width="100%"><tr><td width="98%"><pre class="scilabcode"><span class="scilabid">C</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.9501</span> <span class="scilabnumber">0.7620</span> <span class="scilabnumber">0.6153</span> <span class="scilabnumber">0.4057</span> +<span class="scilabnumber">0.2311</span> <span class="scilabnumber">0.4564</span> <span class="scilabnumber">0.7919</span> <span class="scilabnumber">0.9354</span> +<span class="scilabnumber">0.6068</span> <span class="scilabnumber">0.0185</span> <span class="scilabnumber">0.9218</span> <span class="scilabnumber">0.9169</span> +<span class="scilabnumber">0.4859</span> <span class="scilabnumber">0.8214</span> <span class="scilabnumber">0.7382</span> <span class="scilabnumber">0.4102</span> +<span class="scilabnumber">0.8912</span> <span class="scilabnumber">0.4447</span> <span class="scilabnumber">0.1762</span> <span class="scilabnumber">0.8936</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabid">d</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">0.0578</span> +<span class="scilabnumber">0.3528</span> +<span class="scilabnumber">0.8131</span> +<span class="scilabnumber">0.0098</span> +<span class="scilabnumber">0.1388</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabid">A</span> <span class="scilaboperator">=</span><span class="scilabopenclose">[</span><span class="scilabnumber">0.2027</span> <span class="scilabnumber">0.2721</span> <span class="scilabnumber">0.7467</span> <span class="scilabnumber">0.4659</span> +<span class="scilabnumber">0.1987</span> <span class="scilabnumber">0.1988</span> <span class="scilabnumber">0.4450</span> <span class="scilabnumber">0.4186</span> +<span class="scilabnumber">0.6037</span> <span class="scilabnumber">0.0152</span> <span class="scilabnumber">0.9318</span> <span class="scilabnumber">0.8462</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabid">b</span> <span class="scilaboperator">=</span><span class="scilabopenclose">[</span><span class="scilabnumber">0.5251</span> +<span class="scilabnumber">0.2026</span> +<span class="scilabnumber">0.6721</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabid">Aeq</span> <span class="scilaboperator">=</span> <span class="scilabopenclose">[</span><span class="scilabnumber">3</span> <span class="scilabnumber">5</span> <span class="scilabnumber">7</span> <span class="scilabnumber">9</span><span class="scilabopenclose">]</span><span class="scilabdefault">;</span> +<span class="scilabid">beq</span> <span class="scilaboperator">=</span> <span class="scilabnumber">4</span><span class="scilabdefault">;</span> +<span class="scilabid">lb</span> <span class="scilaboperator">=</span> <span class="scilaboperator">-</span><span class="scilabnumber">0.1</span><span class="scilaboperator">*</span><a class="scilabcommand" href="scilab://ones">ones</a><span class="scilabopenclose">(</span><span class="scilabnumber">4</span><span class="scilabdefault">,</span><span class="scilabnumber">1</span><span class="scilabopenclose">)</span><span class="scilabdefault">;</span> +<span class="scilabid">ub</span> <span class="scilaboperator">=</span> <span class="scilabnumber">2</span><span class="scilaboperator">*</span><a class="scilabcommand" href="scilab://ones">ones</a><span class="scilabopenclose">(</span><span class="scilabnumber">4</span><span class="scilabdefault">,</span><span class="scilabnumber">1</span><span class="scilabopenclose">)</span><span class="scilabdefault">;</span> +<span class="scilabopenclose">[</span><span class="scilabid">xopt</span><span class="scilabdefault">,</span><span class="scilabid">resnorm</span><span class="scilabdefault">,</span><span class="scilabid">residual</span><span class="scilabdefault">,</span><span class="scilabid">exitflag</span><span class="scilabdefault">,</span><span class="scilabid">output</span><span class="scilabdefault">,</span><span class="scilabid">lambda</span><span class="scilabopenclose">]</span> <span class="scilaboperator">=</span> <span class="scilabid">lsqlin</span><span class="scilabopenclose">(</span><span class="scilabid">C</span><span class="scilabdefault">,</span><span class="scilabid">d</span><span class="scilabdefault">,</span><span class="scilabid">A</span><span class="scilabdefault">,</span><span class="scilabid">b</span><span class="scilabdefault">,</span><span class="scilabid">Aeq</span><span class="scilabdefault">,</span><span class="scilabid">beq</span><span class="scilabdefault">,</span><span class="scilabid">lb</span><span class="scilabdefault">,</span><span class="scilabid">ub</span><span class="scilabopenclose">)</span></pre></td><td valign="top"><a href="scilab://scilab.execexample/"><img src="ScilabExecute.png" border="0"/></a></td><td valign="top"><a href="scilab://scilab.editexample/"><img src="ScilabEdit.png" border="0"/></a></td><td></td></tr></table></div></div> + +<div class="refsection"><h3 class="title">Authors</h3> + <ul class="itemizedlist"><li class="member">Harpreet Singh</li></ul></div> + <br /> + + <div class="manualnavbar"> + <table width="100%"> + <tr><td colspan="3" class="next"><a href="http://bugzilla.scilab.org/enter_bug.cgi?product=Scilab%20software&component=Documentation%20pages" class="ulink">Report an issue</a></td></tr> +<tr> + <td width="30%"> + <span class="previous"><a href="section_19f4f1e5726c01d683e8b82be0a7e910.html"><< Symphony Toolbox</a></span> + + </td> + <td width="40%" class="center"> + <span class="top"><a href="section_19f4f1e5726c01d683e8b82be0a7e910.html">Symphony Toolbox</a></span> + + </td> + <td width="30%" class="next"> + <span class="next"><a href="qpipopt.html">qpipopt >></a></span> + + </td> + </tr></table> + <hr /> + </div> + </body> +</html> diff --git a/help/en_US/scilab_en_US_help/qpipopt.html b/help/en_US/scilab_en_US_help/qpipopt.html index 63da9d2..c0e1b71 100644 --- a/help/en_US/scilab_en_US_help/qpipopt.html +++ b/help/en_US/scilab_en_US_help/qpipopt.html @@ -12,7 +12,7 @@ <div class="manualnavbar"> <table width="100%"><tr> <td width="30%"> - <span class="previous"><a href="section_19f4f1e5726c01d683e8b82be0a7e910.html"><< Symphony Toolbox</a></span> + <span class="previous"><a href="lsqlin.html"><< lsqlin</a></span> </td> <td width="40%" class="center"> @@ -130,7 +130,7 @@ find the minimum of f(x) such that</p> <tr><td colspan="3" class="next"><a href="http://bugzilla.scilab.org/enter_bug.cgi?product=Scilab%20software&component=Documentation%20pages" class="ulink">Report an issue</a></td></tr> <tr> <td width="30%"> - <span class="previous"><a href="section_19f4f1e5726c01d683e8b82be0a7e910.html"><< Symphony Toolbox</a></span> + <span class="previous"><a href="lsqlin.html"><< lsqlin</a></span> </td> <td width="40%" class="center"> diff --git a/help/en_US/scilab_en_US_help/section_19f4f1e5726c01d683e8b82be0a7e910.html b/help/en_US/scilab_en_US_help/section_19f4f1e5726c01d683e8b82be0a7e910.html index 52d6d9e..14e8136 100644 --- a/help/en_US/scilab_en_US_help/section_19f4f1e5726c01d683e8b82be0a7e910.html +++ b/help/en_US/scilab_en_US_help/section_19f4f1e5726c01d683e8b82be0a7e910.html @@ -31,7 +31,13 @@ <br /><br /> <h3 class="title-part">Symphony Toolbox</h3> -<ul class="list-chapter"><li><a href="qpipopt.html" class="refentry">qpipopt</a> — <span class="refentry-description">Solves a linear quadratic problem.</span></li> +<ul class="list-chapter"><li><a href="lsqlin.html" class="refentry">lsqlin</a> — <span class="refentry-description">Solves a linear quadratic problem.</span></li> + + + + + +<li><a href="qpipopt.html" class="refentry">qpipopt</a> — <span class="refentry-description">Solves a linear quadratic problem.</span></li> diff --git a/jar/scilab_en_US_help.jar b/jar/scilab_en_US_help.jar Binary files differBinary files differindex 79b480b..1487f17 100644 --- a/jar/scilab_en_US_help.jar +++ b/jar/scilab_en_US_help.jar diff --git a/macros/lsqlin.bin b/macros/lsqlin.bin Binary files differnew file mode 100644 index 0000000..ec9e6ef --- /dev/null +++ b/macros/lsqlin.bin diff --git a/macros/lsqlin.sci b/macros/lsqlin.sci new file mode 100644 index 0000000..003edc5 --- /dev/null +++ b/macros/lsqlin.sci @@ -0,0 +1,372 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// Author: Harpreet Singh +// Organization: FOSSEE, IIT Bombay +// Email: harpreet.mertia@gmail.com +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + + +function [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin (varargin) + // Solves a linear quadratic problem. + // + // Calling Sequence + // x = lsqlin(C,d,A,b) + // x = lsqlin(C,d,A,b,Aeq,beq) + // x = lsqlin(C,d,A,b,Aeq,beq,lb,ub) + // x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0) + // x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,param) + // [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin( ... ) + // + // Parameters + // C : a matrix of doubles, represents the multiplier of the solution x in the expression C*x - d. C is M-by-N, where M is the number of equations, and N is the number of elements of x. + // d : a vector of doubles, represents the additive constant term in the expression C*x - d. d is M-by-1, where M is the number of equations. + // A : a vector of doubles, represents the linear coefficients in the inequality constraints + // b : a vector of doubles, represents the linear coefficients in the inequality constraints + // Aeq : a matrix of doubles, represents the linear coefficients in the equality constraints + // beq : a vector of doubles, represents the linear coefficients in the equality constraints + // LB : a vector of doubles, where n is number of variables, contains lower bounds of the variables. + // UB : a vector of doubles, where n is number of variables, contains upper bounds of the variables. + // x0 : a vector of doubles, contains initial guess of variables. + // param : a list containing the the parameters to be set. + // xopt : a vector of doubles, the computed solution of the optimization problem. + // fopt : a double, the function value at x. + // exitflag : Integer identifying the reason the algorithm terminated. + // output : Structure containing information about the optimization. + // lambda : Structure containing the Lagrange multipliers at the solution x (separated by constraint type). + // + // Description + // Search the minimum of a constrained linear least square problem specified by : + // find the minimum of f(x) such that + // + // <latex> + // \begin{eqnarray} + // &\mbox{min}_{x} + // & 1/2||C*x - d||_2^2 \\ + // & \text{subject to} & A.x \leq b \\ + // & & Aeq.x \leq beq \\ + // & & lb \leq x \leq ub \\ + // \end{eqnarray} + // </latex> + // + // We are calling IPOpt for solving the linear least square problem, IPOpt is a library written in C++. The code has been written by Andreas Wächter and Carl Laird. + // + // Examples + // //A simple linear least square example + // C = [0.9501 0.7620 0.6153 0.4057 + // 0.2311 0.4564 0.7919 0.9354 + // 0.6068 0.0185 0.9218 0.9169 + // 0.4859 0.8214 0.7382 0.4102 + // 0.8912 0.4447 0.1762 0.8936]; + // d = [0.0578 + // 0.3528 + // 0.8131 + // 0.0098 + // 0.1388]; + // A = [0.2027 0.2721 0.7467 0.4659 + // 0.1987 0.1988 0.4450 0.4186 + // 0.6037 0.0152 0.9318 0.8462]; + // b = [0.5251 + // 0.2026 + // 0.6721]; + // [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b) + // + // Examples + // C = [0.9501 0.7620 0.6153 0.4057 + // 0.2311 0.4564 0.7919 0.9354 + // 0.6068 0.0185 0.9218 0.9169 + // 0.4859 0.8214 0.7382 0.4102 + // 0.8912 0.4447 0.1762 0.8936]; + // d = [0.0578 + // 0.3528 + // 0.8131 + // 0.0098 + // 0.1388]; + // A =[0.2027 0.2721 0.7467 0.4659 + // 0.1987 0.1988 0.4450 0.4186 + // 0.6037 0.0152 0.9318 0.8462]; + // b =[0.5251 + // 0.2026 + // 0.6721]; + // Aeq = [3 5 7 9]; + // beq = 4; + // lb = -0.1*ones(4,1); + // ub = 2*ones(4,1); + // [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub) + // + // Authors + // Harpreet Singh + + + //To check the number of input and output argument + [lhs , rhs] = argn(); + + //To check the number of argument given by user + if ( rhs < 4 | rhs == 5 | rhs == 7 | rhs > 10 ) then + errmsg = msprintf(gettext("%s: Unexpected number of input arguments : %d provided while should be in the set of [4 6 8 9 10]"), "lsqlin", rhs); + error(errmsg) + end + + C = varargin(1); + d = varargin(2); + A = varargin(3); + b = varargin(4); + nbVar = size(C,2); + + if ( rhs<5 ) then + Aeq = [] + beq = [] + else + Aeq = varargin(5); + beq = varargin(6); + end + + if ( rhs<7 ) then + LB = repmat(-%inf,nbVar,1); + UB = repmat(%inf,nbVar,1); + else + LB = varargin(7); + UB = varargin(8); + end + + + if ( rhs<9 | size(varargin(9)) ==0 ) then + x0 = repmat(0,nbVar,1) + else + x0 = varargin(9); + end + + if ( rhs<10 | size(varargin(10)) ==0 ) then + param = list(); + else + param =varargin(10); + end + + if (size(LB,2)==0) then + LB = repmat(-%inf,nbVar,1); + end + + if (size(UB,2)==0) then + UB = repmat(%inf,nbVar,1); + end + + if (type(param) ~= 15) then + errmsg = msprintf(gettext("%s: param should be a list "), "lsqlin"); + error(errmsg); + end + + + if (modulo(size(param),2)) then + errmsg = msprintf(gettext("%s: Size of parameters should be even"), "lsqlin"); + error(errmsg); + end + + options = list( "MaxIter" , [3000], ... + "CpuTime" , [600] ... + ); + + for i = 1:(size(param))/2 + + select param(2*i-1) + case "MaxIter" then + options(2*i) = param(2*i); + case "CpuTime" then + options(2*i) = param(2*i); + else + errmsg = msprintf(gettext("%s: Unrecognized parameter name ''%s''."), "lsqlin", param(2*i-1)); + error(errmsg) + end + end + + nbConInEq = size(A,1); + nbConEq = size(Aeq,1); + + // Check if the user gives row vector + // and Changing it to a column matrix + + + if (size(d,2)== [nbVar]) then + d=d'; + end + + if (size(LB,2)== [nbVar]) then + LB = LB'; + end + + if (size(UB,2)== [nbVar]) then + UB = UB'; + end + + if (size(b,2)==nbConInEq) then + b = b'; + end + + if (size(beq,2)== nbConEq) then + beq = beq'; + end + + if (size(x0,2)== [nbVar]) then + x0=x0'; + end + + //Check the size of f which should equal to the number of variable + if ( size(d,1) ~= size(C,1)) then + errmsg = msprintf(gettext("%s: The number of rows in C must be equal the number of elements of d"), "lsqlin"); + error(errmsg); + end + + //Check the size of inequality constraint which should be equal to the number of variables + if ( size(A,2) ~= nbVar & size(A,2) ~= 0) then + errmsg = msprintf(gettext("%s: The number of columns in A must be the same as the number of elements of d"), "lsqlin"); + error(errmsg); + end + + //Check the size of equality constraint which should be equal to the number of variables + if ( size(Aeq,2) ~= nbVar & size(Aeq,2) ~= 0 ) then + errmsg = msprintf(gettext("%s: The number of columns in Aeq must be the same as the number of elements of d"), "lsqlin"); + error(errmsg); + end + + //Check the size of Lower Bound which should be equal to the number of variables + if ( size(LB,1) ~= nbVar) then + errmsg = msprintf(gettext("%s: The Lower Bound is not equal to the number of variables"), "lsqlin"); + error(errmsg); + end + + //Check the size of Upper Bound which should equal to the number of variables + if ( size(UB,1) ~= nbVar) then + errmsg = msprintf(gettext("%s: The Upper Bound is not equal to the number of variables"), "lsqlin"); + error(errmsg); + end + + //Check the size of constraints of Lower Bound which should equal to the number of constraints + if ( size(b,1) ~= nbConInEq & size(b,1) ~= 0) then + errmsg = msprintf(gettext("%s: The number of rows in A must be the same as the number of elementsof b"), "lsqlin"); + error(errmsg); + end + + //Check the size of constraints of Upper Bound which should equal to the number of constraints + if ( size(beq,1) ~= nbConEq & size(beq,1) ~= 0) then + errmsg = msprintf(gettext("%s: The number of rows in Aeq must be the same as the number of elements of beq"), "lsqlin"); + error(errmsg); + end + + //Check the size of initial of variables which should equal to the number of variables + if ( size(x0,1) ~= nbVar) then + warnmsg = msprintf(gettext("%s: Ignoring initial guess of variables as it is not equal to the number of variables"), "lsqlin"); + warning(warnmsg); + end + + //Check if the user gives a matrix instead of a vector + + if ((size(d,1)~=1)& (size(d,2)~=1)) then + errmsg = msprintf(gettext("%s: d should be a vector"), "lsqlin"); + error(errmsg); + end + + if (size(LB,1)~=1)& (size(LB,2)~=1) then + errmsg = msprintf(gettext("%s: Lower Bound should be a vector"), "lsqlin"); + error(errmsg); + end + + if (size(UB,1)~=1)& (size(UB,2)~=1) then + errmsg = msprintf(gettext("%s: Upper Bound should be a vector"), "lsqlin"); + error(errmsg); + end + + if (nbConInEq) then + if ((size(b,1)~=1)& (size(b,2)~=1)) then + errmsg = msprintf(gettext("%s: Constraint Lower Bound should be a vector"), "lsqlin"); + error(errmsg); + end + end + + if (nbConEq) then + if (size(beq,1)~=1)& (size(beq,2)~=1) then + errmsg = msprintf(gettext("%s: Constraint should be a vector"), "lsqlin"); + error(errmsg); + end + end + + for i = 1:nbConInEq + if (b(i) == -%inf) + errmsg = msprintf(gettext("%s: Value of b can not be negative infinity"), "qpipoptmat"); + error(errmsg); + end + end + + for i = 1:nbConEq + if (beq(i) == -%inf) + errmsg = msprintf(gettext("%s: Value of beq can not be negative infinity"), "qpipoptmat"); + error(errmsg); + end + end + + //Converting it into Quadratic Programming Problem + + Q = C'*C; + p = [-C'*d]'; + op_add = d'*d; + LB = LB'; + UB = UB'; + x0 = x0'; + conMatrix = [Aeq;A]; + nbCon = size(conMatrix,1); + conLB = [beq; repmat(-%inf,nbConInEq,1)]'; + conUB = [beq;b]' ; + [xopt,fopt,status,iter,Zl,Zu,lmbda] = solveqp(nbVar,nbCon,Q,p,conMatrix,conLB,conUB,LB,UB,x0,options); + + xopt = xopt'; + residual = C*xopt-d; + resnorm = residual'*residual; + exitflag = status; + output = struct("Iterations" , []); + output.Iterations = iter; + lambda = struct("lower" , [], .. + "upper" , [], .. + "constraint" , []); + + lambda.lower = Zl; + lambda.upper = Zu; + lambda.constraint = lmbda; + + select status + case 0 then + printf("\nOptimal Solution Found.\n"); + case 1 then + printf("\nMaximum Number of Iterations Exceeded. Output may not be optimal.\n"); + case 2 then + printf("\nMaximum CPU Time exceeded. Output may not be optimal.\n"); + case 3 then + printf("\nStop at Tiny Step\n"); + case 4 then + printf("\nSolved To Acceptable Level\n"); + case 5 then + printf("\nConverged to a point of local infeasibility.\n"); + case 6 then + printf("\nStopping optimization at current point as requested by user.\n"); + case 7 then + printf("\nFeasible point for square problem found.\n"); + case 8 then + printf("\nIterates diverging; problem might be unbounded.\n"); + case 9 then + printf("\nRestoration Failed!\n"); + case 10 then + printf("\nError in step computation (regularization becomes too large?)!\n"); + case 12 then + printf("\nProblem has too few degrees of freedom.\n"); + case 13 then + printf("\nInvalid option thrown back by IPOpt\n"); + case 14 then + printf("\nNot enough memory.\n"); + case 15 then + printf("\nINTERNAL ERROR: Unknown SolverReturn value - Notify IPOPT Authors.\n"); + else + printf("\nInvalid status returned. Notify the Toolbox authors\n"); + break; + end + +endfunction diff --git a/macros/names b/macros/names index 4f0ba56..18923c4 100644 --- a/macros/names +++ b/macros/names @@ -1,3 +1,4 @@ +lsqlin qpipopt qpipoptmat setOptions diff --git a/macros/qpipopt.bin b/macros/qpipopt.bin Binary files differindex 0c65c0b..e13d5a9 100644 --- a/macros/qpipopt.bin +++ b/macros/qpipopt.bin diff --git a/macros/qpipopt.sci b/macros/qpipopt.sci index e25aad9..ccf10e4 100644 --- a/macros/qpipopt.sci +++ b/macros/qpipopt.sci @@ -298,13 +298,13 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin) for i = 1:nbCon if (conLB(i) == %inf) errmsg = msprintf(gettext("%s: Value of Lower Bound can not be infinity"), "qpipopt"); - error(errmsg); - end + error(errmsg); + end if (conUB(i) == -%inf) errmsg = msprintf(gettext("%s: Value of Upper Bound can not be negative infinity"), "qpipopt"); - error(errmsg); - end + error(errmsg); + end end [xopt,fopt,status,iter,Zl,Zu,lmbda] = solveqp(nbVar,nbCon,Q,p,conMatrix,conLB,conUB,LB,UB,x0,options); diff --git a/macros/qpipoptmat.bin b/macros/qpipoptmat.bin Binary files differindex 6ca5589..07c9386 100644 --- a/macros/qpipoptmat.bin +++ b/macros/qpipoptmat.bin diff --git a/macros/qpipoptmat.sci b/macros/qpipoptmat.sci index 0adc0bd..9f20870 100644 --- a/macros/qpipoptmat.sci +++ b/macros/qpipoptmat.sci @@ -23,8 +23,8 @@ function [xopt,fopt,exitflag,output,lambda] = qpipoptmat (varargin) // [xopt,fopt,exitflag,output,lamda] = qpipoptmat( ... ) // // Parameters - // H : a vector of doubles, where n is number of variables, represents coefficients of quadratic in the quadratic problem. - // f : a vector of doubles, where n is number of variables, represents coefficients of linear in the quadratic problem + // H : a symmetric matrix of doubles, represents coefficients of quadratic in the quadratic problem. + // f : a vector of doubles, represents coefficients of linear in the quadratic problem // A : a vector of doubles, represents the linear coefficients in the inequality constraints // b : a vector of doubles, represents the linear coefficients in the inequality constraints // Aeq : a matrix of doubles, represents the linear coefficients in the equality constraints diff --git a/sci_gateway/cpp/libFAMOS.so b/sci_gateway/cpp/libFAMOS.so Binary files differindex ec45532..f973a5b 100755 --- a/sci_gateway/cpp/libFAMOS.so +++ b/sci_gateway/cpp/libFAMOS.so diff --git a/tests/unit_tests/lsqlin.dia.ref b/tests/unit_tests/lsqlin.dia.ref new file mode 100644 index 0000000..a2b9630 --- /dev/null +++ b/tests/unit_tests/lsqlin.dia.ref @@ -0,0 +1,82 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// Author: Harpreet Singh +// Organization: FOSSEE, IIT Bombay +// Email: harpreet.mertia@gmail.com +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + +// <-- JVM NOT MANDATORY --> +// <-- ENGLISH IMPOSED --> + + +// +// assert_close -- +// Returns 1 if the two real matrices computed and expected are close, +// i.e. if the relative distance between computed and expected is lesser than epsilon. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +function flag = assert_close ( computed, expected, epsilon ) + if expected==0.0 then + shift = norm(computed-expected); + else + shift = norm(computed-expected)/norm(expected); + end +// if shift < epsilon then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end + flag = assert_checktrue ( shift < epsilon ); +endfunction +// +// assert_equal -- +// Returns 1 if the two real matrices computed and expected are equal. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +//function flag = assert_equal ( computed , expected ) +// if computed==expected then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end +//endfunction + + //A simple linear least square example +C = [0.9501 0.7620 0.6153 0.4057 + 0.2311 0.4564 0.7919 0.9354 + 0.6068 0.0185 0.9218 0.9169 + 0.4859 0.8214 0.7382 0.4102 + 0.8912 0.4447 0.1762 0.8936]; + d = [0.0578 + 0.3528 + 0.8131 + 0.0098 + 0.1388]; + A =[0.2027 0.2721 0.7467 0.4659 + 0.1987 0.1988 0.4450 0.4186 + 0.6037 0.0152 0.9318 0.8462]; + b =[0.5251 + 0.2026 + 0.6721]; + Aeq = [3 5 7 9]; + beq = 4; + lb = -0.1*ones(4,1); + ub = 2*ones(4,1); + [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub) + +assert_close ( xopt , [ -0.1, -0.1, 0.1599089, 0.4089598 ]' , 0.0005 ); +assert_close ( residual , [ 0.0352969 0.0876228 -0.3532508 0.1452700 0.1212324 ]' , 0.0005 ); +assert_close ( resnorm , [ 0.1695104] , 0.0005 ); + +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/lsqlin.tst b/tests/unit_tests/lsqlin.tst new file mode 100644 index 0000000..a2b9630 --- /dev/null +++ b/tests/unit_tests/lsqlin.tst @@ -0,0 +1,82 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// Author: Harpreet Singh +// Organization: FOSSEE, IIT Bombay +// Email: harpreet.mertia@gmail.com +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + +// <-- JVM NOT MANDATORY --> +// <-- ENGLISH IMPOSED --> + + +// +// assert_close -- +// Returns 1 if the two real matrices computed and expected are close, +// i.e. if the relative distance between computed and expected is lesser than epsilon. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +function flag = assert_close ( computed, expected, epsilon ) + if expected==0.0 then + shift = norm(computed-expected); + else + shift = norm(computed-expected)/norm(expected); + end +// if shift < epsilon then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end + flag = assert_checktrue ( shift < epsilon ); +endfunction +// +// assert_equal -- +// Returns 1 if the two real matrices computed and expected are equal. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +//function flag = assert_equal ( computed , expected ) +// if computed==expected then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end +//endfunction + + //A simple linear least square example +C = [0.9501 0.7620 0.6153 0.4057 + 0.2311 0.4564 0.7919 0.9354 + 0.6068 0.0185 0.9218 0.9169 + 0.4859 0.8214 0.7382 0.4102 + 0.8912 0.4447 0.1762 0.8936]; + d = [0.0578 + 0.3528 + 0.8131 + 0.0098 + 0.1388]; + A =[0.2027 0.2721 0.7467 0.4659 + 0.1987 0.1988 0.4450 0.4186 + 0.6037 0.0152 0.9318 0.8462]; + b =[0.5251 + 0.2026 + 0.6721]; + Aeq = [3 5 7 9]; + beq = 4; + lb = -0.1*ones(4,1); + ub = 2*ones(4,1); + [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub) + +assert_close ( xopt , [ -0.1, -0.1, 0.1599089, 0.4089598 ]' , 0.0005 ); +assert_close ( residual , [ 0.0352969 0.0876228 -0.3532508 0.1452700 0.1212324 ]' , 0.0005 ); +assert_close ( resnorm , [ 0.1695104] , 0.0005 ); + +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/qpipopt_base.dia.ref b/tests/unit_tests/qpipopt_base.dia.ref index ffe546a..5587ddc 100644 --- a/tests/unit_tests/qpipopt_base.dia.ref +++ b/tests/unit_tests/qpipopt_base.dia.ref @@ -70,7 +70,7 @@ nbVar = 2; nbCon = 3; [xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,Q,p,lb,ub,conMatrix,conLB,conUB) -assert_close ( x , [0.6666667 1.3333333]' , 1.e-7 ); -assert_close ( f , [ - 8.2222223] , 1.e-7 ); +assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 ); +assert_close ( fopt , [ - 8.2222223] , 1.e-7 ); -assert_checkequal( exitflag , 0 ); +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/qpipopt_base.tst b/tests/unit_tests/qpipopt_base.tst index ffe546a..5587ddc 100644 --- a/tests/unit_tests/qpipopt_base.tst +++ b/tests/unit_tests/qpipopt_base.tst @@ -70,7 +70,7 @@ nbVar = 2; nbCon = 3; [xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,Q,p,lb,ub,conMatrix,conLB,conUB) -assert_close ( x , [0.6666667 1.3333333]' , 1.e-7 ); -assert_close ( f , [ - 8.2222223] , 1.e-7 ); +assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 ); +assert_close ( fopt , [ - 8.2222223] , 1.e-7 ); -assert_checkequal( exitflag , 0 ); +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/qpipoptmat_base .dia.ref b/tests/unit_tests/qpipoptmat_base.dia.ref index aacbc4e..a03fc4e 100644 --- a/tests/unit_tests/qpipoptmat_base .dia.ref +++ b/tests/unit_tests/qpipoptmat_base.dia.ref @@ -67,7 +67,7 @@ lb = [0; 0]; ub = [%inf; %inf]; [xopt,fopt,exitflag,output,lambda] = qpipoptmat(H,f,A,b,[],[],lb,ub) -assert_close ( x , [0.6666667 1.3333333]' , 1.e-7 ); -assert_close ( f , [ - 8.2222223] , 1.e-7 ); +assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 ); +assert_close ( fopt , [ - 8.2222223] , 1.e-7 ); -assert_checkequal( exitflag , 0 ); +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/qpipoptmat_base .tst b/tests/unit_tests/qpipoptmat_base.tst index aacbc4e..a03fc4e 100644 --- a/tests/unit_tests/qpipoptmat_base .tst +++ b/tests/unit_tests/qpipoptmat_base.tst @@ -67,7 +67,7 @@ lb = [0; 0]; ub = [%inf; %inf]; [xopt,fopt,exitflag,output,lambda] = qpipoptmat(H,f,A,b,[],[],lb,ub) -assert_close ( x , [0.6666667 1.3333333]' , 1.e-7 ); -assert_close ( f , [ - 8.2222223] , 1.e-7 ); +assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 ); +assert_close ( fopt , [ - 8.2222223] , 1.e-7 ); -assert_checkequal( exitflag , 0 ); +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/symphony_mat_base.dia.ref b/tests/unit_tests/symphonymat_base.dia.ref index 3bf286d..1e6f74a 100644 --- a/tests/unit_tests/symphony_mat_base.dia.ref +++ b/tests/unit_tests/symphonymat_base.dia.ref @@ -72,7 +72,7 @@ beq = [ 25, 1.25, 1.25] intcon = [1 2 3 4]; // Calling Symphony -[x,f,iter] = symphony_mat(c,intcon,[],[],Aeq,beq,lb,ub); +[x,f,iter] = symphonymat(c,intcon,[],[],Aeq,beq,lb,ub); //In Symphony Library for optimal solution status = 227 status = sym_getStatus(); diff --git a/tests/unit_tests/symphony_mat_base.tst b/tests/unit_tests/symphonymat_base.tst index 629039b..2465738 100644 --- a/tests/unit_tests/symphony_mat_base.tst +++ b/tests/unit_tests/symphonymat_base.tst @@ -72,7 +72,7 @@ beq = [ 25, 1.25, 1.25] intcon = [1 2 3 4]; // Calling Symphony -[x,f,status,output] = symphony_mat(c,intcon,[],[],Aeq,beq,lb,ub); +[x,f,status,output] = symphonymat(c,intcon,[],[],Aeq,beq,lb,ub); assert_close ( x , [1 1 0 1 7.25 0 0.25 3.5]' , 1.e-7 ); assert_close ( f , [ 8495] , 1.e-7 ); |