summaryrefslogtreecommitdiff
path: root/macros/qpipopt_mat.sci~
diff options
context:
space:
mode:
Diffstat (limited to 'macros/qpipopt_mat.sci~')
-rw-r--r--macros/qpipopt_mat.sci~214
1 files changed, 0 insertions, 214 deletions
diff --git a/macros/qpipopt_mat.sci~ b/macros/qpipopt_mat.sci~
deleted file mode 100644
index 4c72216..0000000
--- a/macros/qpipopt_mat.sci~
+++ /dev/null
@@ -1,214 +0,0 @@
-// 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,fopt,exitflag,output,lambda] = qpipopt_mat (varargin)
- // Solves a linear quadratic problem.
- //
- // Calling Sequence
- // xopt = qpipopt_mat(nbVar,nbCon,Q,p,LB,UB,conMatrix,conLB,conUB)
- // x = qpipopt_mat(H,f)
- // x = qpipopt_mat(H,f,A,b)
- // x = qpipopt_mat(H,f,A,b,Aeq,beq)
- // x = qpipopt_mat(H,f,A,b,Aeq,beq,lb,ub)
- // [xopt,fopt,exitflag,output,lamda] = qpipopt_mat( ... )
- //
- // Parameters
- // H : a n x n matrix of doubles, where n is number of variables, represents coefficients of quadratic in the quadratic problem.
- // f : a n x 1 matrix of doubles, where n is number of variables, represents coefficients of linear in the quadratic problem
- // A : a m x n matrix of doubles, represents the linear coefficients in the inequality constraints
- // b : a column vector of doubles, represents the linear coefficients in the inequality constraints
- // Aeq : a meq x n 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 n x 1 matrix of doubles, where n is number of variables, contains lower bounds of the variables.
- // UB : a n x 1 matrix of doubles, where n is number of variables, contains upper bounds of the variables.
- // xopt : a nx1 matrix of doubles, the computed solution of the optimization problem.
- // fopt : a 1x1 matrix of doubles, 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 quadratic optimization problem specified by :
- // find the minimum of f(x) such that
- //
- // <latex>
- // \begin{eqnarray}
- // &\mbox{min}_{x}
- // & 1/2*x'*H*x + f'*x \\
- // & \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 quadratic problem, IPOpt is a library written in C++. The code has been written by ​Andreas Wächter and ​Carl Laird.
- //
- // Examples
- // //Find x in R^6 such that:
- //
- // 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;
- //
- // 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];
- // b = [2; 2; 3];
- // lb = [0; 0];
- // ub = [%inf; %inf];
- // [xopt,fopt,exitflag,output,lambda] = qpipopt_mat(H,f,A,b,[],[],lb,ub)
- //
- // Authors
- // Keyur Joshi, Saikiran, Iswarya, 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 < 2 | rhs == 3 | rhs == 5 | rhs == 7 | rhs > 8 ) then
- errmsg = msprintf(gettext("%s: Unexpected number of input arguments : %d provided while should be in the set of [2 4 6 8]"), "qpipopt", rhs);
- error(errmsg)
- end
-
- H = varargin(1);
- f = varargin(2);
- nbVar = size(H,1);
-
-
- if ( rhs<2 ) then
- A = []
- b = []
- else
- A = varargin(3);
- b = varargin(4);
- end
-
- if ( rhs<4 ) then
- Aeq = []
- beq = []
- else
- Aeq = varargin(5);
- beq = varargin(6);
- end
-
- if ( rhs<6 ) then
- LB = repmat(-%inf,nbVar,1);
- UB = repmat(%inf,nbVar,1);
- else
- LB = varargin(7);
- UB = varargin(8);
- end
-
- nbConInEq = size(A,1);
- nbConEq = size(Aeq,1);
-
- //Checking the H matrix which needs to be a symmetric matrix
- if ( H~=H') then
- errmsg = msprintf(gettext("%s: H is not a symmetric matrix"), "qpipopt_mat");
- error(errmsg);
- end
-
- //Check the size of H which should equal to the number of variable
- if ( size(H) ~= [nbVar nbVar]) then
- errmsg = msprintf(gettext("%s: The Size of H is not equal to the number of variables"), "qpipopt");
- error(errmsg);
- end
-
- //Check the size of f which should equal to the number of variable
- if ( size(f,1) ~= [nbVar]) then
- errmsg = msprintf(gettext("%s: The Size of f is not equal to the number of variables"), "qpipopt");
- 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 size of inequality constraints is not equal to the number of variables"), "qpipopt");
- 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 size of equality constraints is not equal to the number of variables"), "qpipopt");
- 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"), "qpipopt");
- 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"), "qpipopt");
- 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 Lower Bound of inequality constraints is not equal to the number of constraints"), "qpipopt");
- 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 Upper Bound of equality constraints is not equal to the number of constraints"), "qp_ipopt");
- error(errmsg);
- end
-
- //Converting it into ipopt format
- f = f';
- LB = LB';
- UB = UB';
- 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,H,f,conMatrix,conLB,conUB,LB,UB);
-
- xopt = xopt';
- exitflag = status;
- output = struct("Iterations" , []);
- output.Iterations = iter;
- lambda = struct("lower" , [], ..
- "upper" , [], ..
- "ineqlin" , [], ..
- "eqlin" , []);
-
- lambda.lower = Zl;
- lambda.upper = Zu;
- lambda.eqlin = lmbda(1:nbConEq);
- lambda.ineqlin = lmbda(nbConEq+1:nbCon);
-
-
-endfunction