diff options
Diffstat (limited to 'newstructure/macros/cbcmpsintlinprog.sci')
-rw-r--r-- | newstructure/macros/cbcmpsintlinprog.sci | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/newstructure/macros/cbcmpsintlinprog.sci b/newstructure/macros/cbcmpsintlinprog.sci new file mode 100644 index 0000000..1d46b5a --- /dev/null +++ b/newstructure/macros/cbcmpsintlinprog.sci @@ -0,0 +1,86 @@ +// Copyright (C) 2016 - IIT Bombay - FOSSEE +// +// 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: Pranav Deshpande and Akshay Miterani +// Organization: FOSSEE, IIT Bombay +// Email: toolbox@scilab.in + +function [xopt,fopt,status,output] = cbcmpsintlinprog(varargin) + // Sci File Wrapper for the mps_cbcintlinprog.cpp file + + // Number of input and output arguments + [nOutput, nInput] = argn(); + + // To check the number of arguments given by the user + if (nInput<1 | nInput>2) then + error(999, 'Check the number of input arguments!'); + end + + mpsFile = varargin(1); + optval = [0,0,0,0]; + if(nInput==2) then + options=varargin(2); + if length(options) == 0 then + optval = [0 0 0 0]; + else + optval = [0 0 0 0]; + for i=1:2:length(options) + select options(i) + case 'IntegerTolerance' then + optval(1) = options(i+1); + case 'MaxNodes' then + optval(2) = options(i+1); + case 'MaxTime' then + optval(3) = options(i+1); + case 'AllowableGap' then + optval(4) = options(i+1); + else + error(999, 'Unknown string argument passed.'); + end + end + end + end + + [xopt,fopt,status,nodes,nfpoints,L,U,niter] = sci_mps_intlinprog(mpsFile, optval) + + output = struct("relativegap" , [],.. + "absolutegap" , [],.. + "numnodes" , [],.. + "numfeaspoints" , [],.. + "numiterations" , [],.. + "message" , ''); + + output.numnodes = [nodes]; + output.numfeaspoints = [nfpoints]; + output.numiterations = [niter]; + output.relativegap = (U-L)/(abs(U)+1); + output.absolutegap = (U-L); + + select status + + case 0 then + output.message="Optimal Solution" + case 1 then + output.message="Primal Infeasible" + case 2 then + output.message="Solution Limit is reached" + case 3 then + output.message="Node Limit is reached" + case 4 then + output.message="Numerical Difficulties" + case 5 then + output.message="Time Limit Reached" + case 6 then + output.message="Continuous Solution Unbounded" + case 7 then + output.message="Dual Infeasible" + else + output.message="Invalid status returned. Notify the Toolbox authors" + break; + end + +endfunction |