summaryrefslogtreecommitdiff
path: root/demos/mps_cbcintlinprog.sci
diff options
context:
space:
mode:
Diffstat (limited to 'demos/mps_cbcintlinprog.sci')
-rw-r--r--demos/mps_cbcintlinprog.sci79
1 files changed, 79 insertions, 0 deletions
diff --git a/demos/mps_cbcintlinprog.sci b/demos/mps_cbcintlinprog.sci
new file mode 100644
index 0000000..eef8b68
--- /dev/null
+++ b/demos/mps_cbcintlinprog.sci
@@ -0,0 +1,79 @@
+// Code Authors: Akshay Miterani and Pranav Deshpande
+// 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