summaryrefslogtreecommitdiff
path: root/macros/qpipopt.sci
diff options
context:
space:
mode:
Diffstat (limited to 'macros/qpipopt.sci')
-rw-r--r--macros/qpipopt.sci185
1 files changed, 93 insertions, 92 deletions
diff --git a/macros/qpipopt.sci b/macros/qpipopt.sci
index ed531e1..e8c945a 100644
--- a/macros/qpipopt.sci
+++ b/macros/qpipopt.sci
@@ -1,108 +1,109 @@
// 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
+// Author: Harpreet Singh
+// Organization: FOSSEE, IIT Bombay
+// Email: toolbox@scilab.in
function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
- // Solves a linear quadratic problem.
- //
- // Calling Sequence
- // xopt = qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB)
- // xopt = qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB,x0)
- // xopt = qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB,x0,param)
- // [xopt,fopt,exitflag,output,lamda] = qpipopt( ... )
- //
- // Parameters
- // nbVar : a double, number of variables
- // nbCon : a double, number of constraints
- // H : a symmetric matrix of double, represents coefficients of quadratic in the quadratic problem.
- // f : a vector of double, represents coefficients of linear in the quadratic problem
- // lb : a vector of double, contains lower bounds of the variables.
- // ub : a vector of double, contains upper bounds of the variables.
- // A : a matrix of double, contains matrix representing the constraint matrix
- // conLB : a vector of double, contains lower bounds of the constraints.
- // conUB : a vector of double, contains upper bounds of the constraints.
- // x0 : a vector of double, contains initial guess of variables.
- // param : a list containing the the parameters to be set.
- // xopt : a vector of double, the computed solution of the optimization problem.
- // fopt : a double, the function value at x.
- // exitflag : Integer identifying the reason the algorithm terminated. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the qpipopt macro.
- // output : Structure containing information about the optimization. This version only contains number of iterations
- // lambda : Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper and linear equality, inequality constraints.
- //
- // Description
- // Search the minimum of a constrained linear quadratic optimization problem specified by :
- // find the minimum of f(x) such that
- //
- // <latex>
- // \begin{eqnarray}
- // &\mbox{min}_{x}
- // & 1/2⋅x^T⋅H⋅x + f^T⋅x \\
- // & \text{subject to} & conLB \leq A⋅x \leq conUB \\
- // & & lb \leq x \leq ub \\
- // \end{eqnarray}
- // </latex>
- //
- // The routine calls Ipopt for solving the quadratic problem, Ipopt is a library written in C++.
- //
- // Examples
- // //Find x in R^6 such that:
- // A= [1,-1,1,0,3,1;
- // -1,0,-3,-4,5,6;
- // 2,5,3,0,1,0
- // 0,1,0,1,2,-1;
- // -1,0,2,1,1,0];
- // conLB=[1;2;3;-%inf;-%inf];
- // conUB = [1;2;3;-1;2.5];
- // lb=[-1000;-10000; 0; -1000; -1000; -1000];
- // ub=[10000; 100; 1.5; 100; 100; 1000];
- // //and minimize 0.5*x'⋅H⋅x + f'⋅x with
- // f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
- // nbVar = 6;
- // nbCon = 5;
- // x0 = repmat(0,nbVar,1);
- // param = list("MaxIter", 300, "CpuTime", 100);
- // [xopt,fopt,exitflag,output,lambda]=qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB,x0,param)
- // // Press ENTER to continue
- //
- // Examples
- // //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];
- // conUB = [2; 2; 3];
- // conLB = [-%inf; -%inf; -%inf];
- // lb = [0; 0];
- // ub = [%inf; %inf];
- // nbVar = 2;
- // nbCon = 3;
- // [xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB)
- // Authors
- // Keyur Joshi, Saikiran, Iswarya, Harpreet Singh
+ // Solves a linear quadratic problem.
+ //
+ // Calling Sequence
+ // xopt = qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB)
+ // xopt = qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB,x0)
+ // xopt = qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB,x0,param)
+ // [xopt,fopt,exitflag,output,lamda] = qpipopt( ... )
+ //
+ // Parameters
+ // nbVar : a double, number of variables
+ // nbCon : a double, number of constraints
+ // H : a symmetric matrix of double, represents coefficients of quadratic in the quadratic problem.
+ // f : a vector of double, represents coefficients of linear in the quadratic problem
+ // lb : a vector of double, contains lower bounds of the variables.
+ // ub : a vector of double, contains upper bounds of the variables.
+ // A : a matrix of double, contains matrix representing the constraint matrix
+ // conLB : a vector of double, contains lower bounds of the constraints.
+ // conUB : a vector of double, contains upper bounds of the constraints.
+ // x0 : a vector of double, contains initial guess of variables.
+ // param : a list containing the the parameters to be set.
+ // xopt : a vector of double, the computed solution of the optimization problem.
+ // fopt : a double, the function value at x.
+ // exitflag : A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.
+ // output : Structure containing information about the optimization. This version only contains number of iterations
+ // lambda : Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.
+ //
+ // Description
+ // Search the minimum of a constrained linear quadratic optimization problem specified by :
+ //
+ // <latex>
+ // \begin{eqnarray}
+ // &\mbox{min}_{x}
+ // & 1/2⋅x^T⋅H⋅x + f^T⋅x \\
+ // & \text{subject to} & conLB \leq A⋅x \leq conUB \\
+ // & & lb \leq x \leq ub \\
+ // \end{eqnarray}
+ // </latex>
+ //
+ // The routine calls Ipopt for solving the quadratic problem, Ipopt is a library written in C++.
+ //
+ // Examples
+ // //Ref : example 14 :
+ // //https://www.me.utexas.edu/~jensen/ORMM/supplements/methods/nlpmethod/S2_quadratic.pdf
+ // // min. -8*x1*x1 -16*x2*x2 + x1 + 4*x2
+ // // such that
+ // // x1 + x2 <= 5,
+ // // x1 <= 3,
+ // // x1 >= 0,
+ // // x2 >= 0
+ // H = [2 0
+ // 0 8];
+ // f = [-8; -16];
+ // A = [1 1;1 0];
+ // conUB = [5;3];
+ // conLB = [-%inf; -%inf];
+ // lb = [0; 0];
+ // ub = [%inf; %inf];
+ // nbVar = 2;
+ // nbCon = 2;
+ // [xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB)
+ // //Press ENTER to continue
+ //
+ // Examples
+ // //Find x in R^6 such that:
+ // A= [1,-1,1,0,3,1;
+ // -1,0,-3,-4,5,6;
+ // 2,5,3,0,1,0
+ // 0,1,0,1,2,-1;
+ // -1,0,2,1,1,0];
+ // conLB=[1;2;3;-%inf;-%inf];
+ // conUB = [1;2;3;-1;2.5];
+ // lb=[-1000;-10000; 0; -1000; -1000; -1000];
+ // ub=[10000; 100; 1.5; 100; 100; 1000];
+ // //and minimize 0.5*x'⋅H⋅x + f'⋅x with
+ // f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
+ // nbVar = 6;
+ // nbCon = 5;
+ // x0 = repmat(0,nbVar,1);
+ // param = list("MaxIter", 300, "CpuTime", 100);
+ // [xopt,fopt,exitflag,output,lambda]=qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB,x0,param)
+ // Authors
+ // Keyur Joshi, Saikiran, Iswarya, Harpreet Singh
-//To check the number of input and output argument
- [lhs , rhs] = argn();
+ //To check the number of input and output argument
+ [lhs , rhs] = argn();
-//To check the number of argument given by user
- if ( rhs < 9 | rhs > 11 ) then
- errmsg = msprintf(gettext("%s: Unexpected number of input arguments : %d provided while should be 9, 10 or 11"), "qpipopt", rhs);
- error(errmsg)
- end
-
+ //To check the number of argument given by user
+ if ( rhs < 9 | rhs > 11 ) then
+ errmsg = msprintf(gettext("%s: Unexpected number of input arguments : %d provided while should be 9, 10 or 11"), "qpipopt", rhs);
+ error(errmsg)
+ end
+
nbVar = [];
nbCon = [];
H = [];