summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/symphony.sci57
-rw-r--r--macros/symphony.sci~81
2 files changed, 132 insertions, 6 deletions
diff --git a/macros/symphony.sci b/macros/symphony.sci
index f0a0618..c90dca2 100644
--- a/macros/symphony.sci
+++ b/macros/symphony.sci
@@ -11,13 +11,52 @@
function [xopt,fopt,iter] = symphony (varargin)
- // Solves a linearily constrained optimization problem.
+ // Solves a mixed integer linear programming constrained optimization problem.
//
- // Calling Sequence
- // x = symphony(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB)
- // x = symphony(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB,objSense)
- // x = symphony(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB,objSense,options)
- // [xopt,fopt,status,iter] = symphony( ... )
+ // Calling Sequence
+ //
+ // xopt = symphony(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB)
+ // xopt = symphony(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB,objSense)
+ // xopt = symphony(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB,objSense,options)
+ // [xopt,fopt,iter] = symphony( ... )
+ //
+ // Parameters
+ //
+ // nbVar = a 1 x 1 matrix of doubles, number of variables
+ // nbCon = a 1 x 1 matrix of doubles, number of constraints
+ // objCoeff = a 1 x n matrix of doubles, where n is number of variables, contains coefficients of the variables in the objective
+ // isInt = a 1 x n matrix of boolean, where n is number of variables, representing wether a variable is constrained to be an integer
+ // LB = a 1 x n matrix of doubles, where n is number of variables, contains lower bounds of the variables. Bound can be negative infinity
+ // UB = a 1 x n matrix of doubles, where n is number of variables, contains upper bounds of the variables. Bound can be infinity
+ // 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
+ // objSense = The sense (maximization/minimization) of the objective. Use 1(sym_minimize ) or -1 (sym_maximize) here
+
+ // xopt = a nx1 matrix of doubles, the computed solution of the optimization problem
+ // fopt = a 1x1 matrix of doubles, the function value at x
+ // iter = a 1x1 matrix of doubles, contains the number od iterations done by symphony
+ //
+ // Description
+ //
+ // Search the minimum or maximum of a constrained mixed integer linear programming optimization problem specified by :
+ // find the minimum or maximum of f(x) such that
+ //
+ // <latex>
+ // \begin{eqnarray}
+ // \mbox{min}_{x}
+ // & & f(x) \\
+ // & \text{subject to}
+ // & & conLB \geq C(x) \leq conUB \\
+ // & & & lb \geq x \leq ub \\
+ // \end{eqnarray}
+ // </latex>
+ //
+ //
+ //
+ //
+ //
+
//To check the number of input and output argument
[lhs , rhs] = argn();
@@ -51,6 +90,12 @@ function [xopt,fopt,iter] = symphony (varargin)
end
+//Check the size of constraint which should equal to the number of constraints
+ if ( size(LB) ~= nbCon) then
+ errmsg = msprintf(gettext("%s: The Lower Bound is not equal to the number of variables"), "Symphony");
+ error(errmsg);
+ end
+
//Check the size of Lower Bound which should equal to the number of variables
if ( size(LB) ~= nbVar) then
errmsg = msprintf(gettext("%s: The Lower Bound is not equal to the number of variables"), "Symphony");
diff --git a/macros/symphony.sci~ b/macros/symphony.sci~
new file mode 100644
index 0000000..32c3e80
--- /dev/null
+++ b/macros/symphony.sci~
@@ -0,0 +1,81 @@
+// 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,iter] = symphony (varargin)
+
+ // Solves a mixed integer linear programming constrained optimization problem.
+ //
+ // Calling Sequence
+ // x = symphony(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB)
+ // x = symphony(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB,objSense)
+ // x = symphony(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB,objSense,options)
+ // [xopt,fopt,status,iter] = symphony( ... )
+ //
+
+//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 in the set [9 10 11]"), "Symphony", rhs);
+ error(errmsg)
+ end
+
+ nbVar = varargin(1);
+ nbCon = varargin(2);
+ objCoef = varargin(3);
+ isInt = varargin(4);
+ LB = varargin(5);
+ UB = varargin(6);
+ conMatrix = varargin(7);
+ conLB = varargin(8);
+ conUB = varargin(9);
+
+ if ( rhs<10 ) then
+ objSense = 1;
+ else
+ objSense = varargin(10);
+ end
+
+ if (rhs<11) then
+ options = [];
+ else
+ options = varargin(11);
+ end
+
+
+//Check the size of Lower Bound which should equal to the number of variables
+ if ( size(LB) ~= nbVar) then
+ errmsg = msprintf(gettext("%s: The Lower Bound is not equal to the number of variables"), "Symphony");
+ error(errmsg);
+ end
+
+//Check the size of Upper Bound which should equal to the number of variables
+ if ( size(UB) ~= nbVar) then
+ errmsg = msprintf(gettext("%s: The Upper Bound is not equal to the number of variables"), "Symphony");
+ error(errmsg);
+ end
+
+//Check the size of Lower Bound which should equal to the number of constraints
+ if ( size(conLB) ~= nbCon) then
+ errmsg = msprintf(gettext("%s: The Lower Bound of constraints is not equal to the number of constraints"), "Symphony");
+ error(errmsg);
+ end
+
+//Check the size of Upper Bound which should equal to the number of constraints
+ if ( size(conUB) ~= nbCon) then
+ errmsg = msprintf(gettext("%s: The Upper Bound of constraints is not equal to the number of constraints"), "Symphony");
+ error(errmsg);
+ end
+
+ [xopt,fopt,iter] = symphony_call(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB,objSense,options);
+
+endfunction