summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/libbin480 -> 480 bytes
-rw-r--r--macros/names2
-rw-r--r--macros/qpipopt.binbin27036 -> 29496 bytes
-rw-r--r--macros/qpipopt.sci24
-rw-r--r--macros/qpipoptmat.binbin0 -> 31280 bytes
-rw-r--r--macros/qpipoptmat.sci214
-rw-r--r--macros/qpipoptmat.sci~ (renamed from macros/qpipopt_mat.sci)0
7 files changed, 234 insertions, 6 deletions
diff --git a/macros/lib b/macros/lib
index 3569a7d..9b505b3 100644
--- a/macros/lib
+++ b/macros/lib
Binary files differ
diff --git a/macros/names b/macros/names
index ef678fc..40e5934 100644
--- a/macros/names
+++ b/macros/names
@@ -1,5 +1,5 @@
qpipopt
-qpipopt_mat
+qpipoptmat
setOptions
symphony
symphony_call
diff --git a/macros/qpipopt.bin b/macros/qpipopt.bin
index 757b5b6..0cdc0d9 100644
--- a/macros/qpipopt.bin
+++ b/macros/qpipopt.bin
Binary files differ
diff --git a/macros/qpipopt.sci b/macros/qpipopt.sci
index 8dfc6c3..a1d094e 100644
--- a/macros/qpipopt.sci
+++ b/macros/qpipopt.sci
@@ -15,6 +15,7 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
//
// Calling Sequence
// xopt = qpipopt(nbVar,nbCon,Q,p,LB,UB,conMatrix,conLB,conUB)
+ // xopt = qpipopt(nbVar,nbCon,Q,p,LB,UB,conMatrix,conLB,conUB,x0)
// [xopt,fopt,exitflag,output,lamda] = qpipopt( ... )
//
// Parameters
@@ -26,7 +27,8 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
// UB : a n x 1 matrix of doubles, where n is number of variables, contains upper bounds of the variables.
// conMatrix : a m x n matrix of doubles, where n is number of variables and m is number of constraints, contains matrix representing the constraint matrix
// conLB : a m x 1 matrix of doubles, where m is number of constraints, contains lower bounds of the constraints.
- // conUB : a m x 1 matrix of doubles, where m is number of constraints, contains upper bounds of the constraints.
+ // conUB : a m x 1 matrix of doubles, where m is number of constraints, contains upper bounds of the constraints.
+ // x0 : a m x 1 matrix of doubles, where m is number of constraints, contains initial guess of variables.
// xopt : a 1xn 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.
@@ -92,8 +94,8 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
[lhs , rhs] = argn();
//To check the number of argument given by user
- if ( rhs ~= 9 ) then
- errmsg = msprintf(gettext("%s: Unexpected number of input arguments : %d provided while should be 9"), "qpipopt", rhs);
+ if ( rhs < 9 | rhs > 10 ) then
+ errmsg = msprintf(gettext("%s: Unexpected number of input arguments : %d provided while should be 9 or 10"), "qpipopt", rhs);
error(errmsg)
end
@@ -108,6 +110,12 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
conLB = varargin(8);
conUB = varargin(9);
+ if ( rhs<10 ) then
+ x0 = repmat(0,1,nbVar)
+ else
+ x0 = varargin(10);
+ end
+
//IPOpt wants it in row matrix form
p = p';
LB = LB';
@@ -160,11 +168,17 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
//Check the size of constraints of Upper Bound which should equal to the number of constraints
if ( size(conUB,2) ~= nbCon) then
- errmsg = msprintf(gettext("%s: The Upper Bound of constraints is not equal to the number of constraints"), "qp_ipopt");
+ errmsg = msprintf(gettext("%s: The Upper Bound of constraints is not equal to the number of constraints"), "qpipopt");
+ error(errmsg);
+ end
+
+ //Check the size of initial of variables which should equal to the number of variables
+ if ( size(x0,2) ~= nbVar) then
+ errmsg = msprintf(gettext("%s: The initial guess of variables is not equal to the number of variables"), "qpipopt");
error(errmsg);
end
- [xopt,fopt,status,iter,Zl,Zu,lmbda] = solveqp(nbVar,nbCon,Q,p,conMatrix,conLB,conUB,LB,UB);
+ [xopt,fopt,status,iter,Zl,Zu,lmbda] = solveqp(nbVar,nbCon,Q,p,conMatrix,conLB,conUB,LB,UB,x0);
xopt = xopt';
exitflag = status;
diff --git a/macros/qpipoptmat.bin b/macros/qpipoptmat.bin
new file mode 100644
index 0000000..68c3988
--- /dev/null
+++ b/macros/qpipoptmat.bin
Binary files differ
diff --git a/macros/qpipoptmat.sci b/macros/qpipoptmat.sci
new file mode 100644
index 0000000..2f3e911
--- /dev/null
+++ b/macros/qpipoptmat.sci
@@ -0,0 +1,214 @@
+// 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] = qpipoptmat (varargin)
+ // Solves a linear quadratic problem.
+ //
+ // Calling Sequence
+ // xopt = qpipoptmat(nbVar,nbCon,Q,p,LB,UB,conMatrix,conLB,conUB)
+ // x = qpipoptmat(H,f)
+ // x = qpipoptmat(H,f,A,b)
+ // x = qpipoptmat(H,f,A,b,Aeq,beq)
+ // x = qpipoptmat(H,f,A,b,Aeq,beq,lb,ub)
+ // [xopt,fopt,exitflag,output,lamda] = qpipoptmat( ... )
+ //
+ // 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]=qpipoptmat(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] = qpipoptmat(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"), "qpipoptmat");
+ 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"), "qpipoptmat");
+ 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"), "qpipoptmat");
+ 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"), "qpipoptmat");
+ 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"), "qpipoptmat");
+ 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"), "qpipoptmat");
+ 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"), "qpipoptmat");
+ 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"), "qpipoptmat");
+ 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"), "qpipoptmat");
+ 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
diff --git a/macros/qpipopt_mat.sci b/macros/qpipoptmat.sci~
index 4c72216..4c72216 100644
--- a/macros/qpipopt_mat.sci
+++ b/macros/qpipoptmat.sci~