From 2af2dd71492d5485bd921cfe7b832811881947bb Mon Sep 17 00:00:00 2001 From: Harpreet Date: Thu, 26 Nov 2015 13:13:46 +0530 Subject: lsqlin added --- tests/unit_tests/lsqlin.dia.ref | 82 +++++++++++++++++++++++++++++ tests/unit_tests/lsqlin.tst | 82 +++++++++++++++++++++++++++++ tests/unit_tests/qpipopt_base.dia.ref | 6 +-- tests/unit_tests/qpipopt_base.tst | 6 +-- tests/unit_tests/qpipoptmat_base .dia.ref | 73 -------------------------- tests/unit_tests/qpipoptmat_base .tst | 73 -------------------------- tests/unit_tests/qpipoptmat_base.dia.ref | 73 ++++++++++++++++++++++++++ tests/unit_tests/qpipoptmat_base.tst | 73 ++++++++++++++++++++++++++ tests/unit_tests/symphony_mat_base.dia.ref | 83 ------------------------------ tests/unit_tests/symphony_mat_base.tst | 80 ---------------------------- tests/unit_tests/symphonymat_base.dia.ref | 83 ++++++++++++++++++++++++++++++ tests/unit_tests/symphonymat_base.tst | 80 ++++++++++++++++++++++++++++ 12 files changed, 479 insertions(+), 315 deletions(-) create mode 100644 tests/unit_tests/lsqlin.dia.ref create mode 100644 tests/unit_tests/lsqlin.tst delete mode 100644 tests/unit_tests/qpipoptmat_base .dia.ref delete mode 100644 tests/unit_tests/qpipoptmat_base .tst create mode 100644 tests/unit_tests/qpipoptmat_base.dia.ref create mode 100644 tests/unit_tests/qpipoptmat_base.tst delete mode 100644 tests/unit_tests/symphony_mat_base.dia.ref delete mode 100644 tests/unit_tests/symphony_mat_base.tst create mode 100644 tests/unit_tests/symphonymat_base.dia.ref create mode 100644 tests/unit_tests/symphonymat_base.tst (limited to 'tests/unit_tests') diff --git a/tests/unit_tests/lsqlin.dia.ref b/tests/unit_tests/lsqlin.dia.ref new file mode 100644 index 0000000..a2b9630 --- /dev/null +++ b/tests/unit_tests/lsqlin.dia.ref @@ -0,0 +1,82 @@ +// 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 + +// <-- JVM NOT MANDATORY --> +// <-- ENGLISH IMPOSED --> + + +// +// assert_close -- +// Returns 1 if the two real matrices computed and expected are close, +// i.e. if the relative distance between computed and expected is lesser than epsilon. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +function flag = assert_close ( computed, expected, epsilon ) + if expected==0.0 then + shift = norm(computed-expected); + else + shift = norm(computed-expected)/norm(expected); + end +// if shift < epsilon then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end + flag = assert_checktrue ( shift < epsilon ); +endfunction +// +// assert_equal -- +// Returns 1 if the two real matrices computed and expected are equal. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +//function flag = assert_equal ( computed , expected ) +// if computed==expected then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end +//endfunction + + //A simple linear least square example +C = [0.9501 0.7620 0.6153 0.4057 + 0.2311 0.4564 0.7919 0.9354 + 0.6068 0.0185 0.9218 0.9169 + 0.4859 0.8214 0.7382 0.4102 + 0.8912 0.4447 0.1762 0.8936]; + d = [0.0578 + 0.3528 + 0.8131 + 0.0098 + 0.1388]; + A =[0.2027 0.2721 0.7467 0.4659 + 0.1987 0.1988 0.4450 0.4186 + 0.6037 0.0152 0.9318 0.8462]; + b =[0.5251 + 0.2026 + 0.6721]; + Aeq = [3 5 7 9]; + beq = 4; + lb = -0.1*ones(4,1); + ub = 2*ones(4,1); + [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub) + +assert_close ( xopt , [ -0.1, -0.1, 0.1599089, 0.4089598 ]' , 0.0005 ); +assert_close ( residual , [ 0.0352969 0.0876228 -0.3532508 0.1452700 0.1212324 ]' , 0.0005 ); +assert_close ( resnorm , [ 0.1695104] , 0.0005 ); + +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/lsqlin.tst b/tests/unit_tests/lsqlin.tst new file mode 100644 index 0000000..a2b9630 --- /dev/null +++ b/tests/unit_tests/lsqlin.tst @@ -0,0 +1,82 @@ +// 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 + +// <-- JVM NOT MANDATORY --> +// <-- ENGLISH IMPOSED --> + + +// +// assert_close -- +// Returns 1 if the two real matrices computed and expected are close, +// i.e. if the relative distance between computed and expected is lesser than epsilon. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +function flag = assert_close ( computed, expected, epsilon ) + if expected==0.0 then + shift = norm(computed-expected); + else + shift = norm(computed-expected)/norm(expected); + end +// if shift < epsilon then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end + flag = assert_checktrue ( shift < epsilon ); +endfunction +// +// assert_equal -- +// Returns 1 if the two real matrices computed and expected are equal. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +//function flag = assert_equal ( computed , expected ) +// if computed==expected then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end +//endfunction + + //A simple linear least square example +C = [0.9501 0.7620 0.6153 0.4057 + 0.2311 0.4564 0.7919 0.9354 + 0.6068 0.0185 0.9218 0.9169 + 0.4859 0.8214 0.7382 0.4102 + 0.8912 0.4447 0.1762 0.8936]; + d = [0.0578 + 0.3528 + 0.8131 + 0.0098 + 0.1388]; + A =[0.2027 0.2721 0.7467 0.4659 + 0.1987 0.1988 0.4450 0.4186 + 0.6037 0.0152 0.9318 0.8462]; + b =[0.5251 + 0.2026 + 0.6721]; + Aeq = [3 5 7 9]; + beq = 4; + lb = -0.1*ones(4,1); + ub = 2*ones(4,1); + [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub) + +assert_close ( xopt , [ -0.1, -0.1, 0.1599089, 0.4089598 ]' , 0.0005 ); +assert_close ( residual , [ 0.0352969 0.0876228 -0.3532508 0.1452700 0.1212324 ]' , 0.0005 ); +assert_close ( resnorm , [ 0.1695104] , 0.0005 ); + +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/qpipopt_base.dia.ref b/tests/unit_tests/qpipopt_base.dia.ref index ffe546a..5587ddc 100644 --- a/tests/unit_tests/qpipopt_base.dia.ref +++ b/tests/unit_tests/qpipopt_base.dia.ref @@ -70,7 +70,7 @@ nbVar = 2; nbCon = 3; [xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,Q,p,lb,ub,conMatrix,conLB,conUB) -assert_close ( x , [0.6666667 1.3333333]' , 1.e-7 ); -assert_close ( f , [ - 8.2222223] , 1.e-7 ); +assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 ); +assert_close ( fopt , [ - 8.2222223] , 1.e-7 ); -assert_checkequal( exitflag , 0 ); +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/qpipopt_base.tst b/tests/unit_tests/qpipopt_base.tst index ffe546a..5587ddc 100644 --- a/tests/unit_tests/qpipopt_base.tst +++ b/tests/unit_tests/qpipopt_base.tst @@ -70,7 +70,7 @@ nbVar = 2; nbCon = 3; [xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,Q,p,lb,ub,conMatrix,conLB,conUB) -assert_close ( x , [0.6666667 1.3333333]' , 1.e-7 ); -assert_close ( f , [ - 8.2222223] , 1.e-7 ); +assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 ); +assert_close ( fopt , [ - 8.2222223] , 1.e-7 ); -assert_checkequal( exitflag , 0 ); +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/qpipoptmat_base .dia.ref b/tests/unit_tests/qpipoptmat_base .dia.ref deleted file mode 100644 index aacbc4e..0000000 --- a/tests/unit_tests/qpipoptmat_base .dia.ref +++ /dev/null @@ -1,73 +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 - -// <-- JVM NOT MANDATORY --> -// <-- ENGLISH IMPOSED --> - - -// -// assert_close -- -// Returns 1 if the two real matrices computed and expected are close, -// i.e. if the relative distance between computed and expected is lesser than epsilon. -// Arguments -// computed, expected : the two matrices to compare -// epsilon : a small number -// -function flag = assert_close ( computed, expected, epsilon ) - if expected==0.0 then - shift = norm(computed-expected); - else - shift = norm(computed-expected)/norm(expected); - end -// if shift < epsilon then -// flag = 1; -// else -// flag = 0; -// end -// if flag <> 1 then pause,end - flag = assert_checktrue ( shift < epsilon ); -endfunction -// -// assert_equal -- -// Returns 1 if the two real matrices computed and expected are equal. -// Arguments -// computed, expected : the two matrices to compare -// epsilon : a small number -// -//function flag = assert_equal ( computed , expected ) -// if computed==expected then -// flag = 1; -// else -// flag = 0; -// end -// if flag <> 1 then pause,end -//endfunction - -//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) - -assert_close ( x , [0.6666667 1.3333333]' , 1.e-7 ); -assert_close ( f , [ - 8.2222223] , 1.e-7 ); - -assert_checkequal( exitflag , 0 ); diff --git a/tests/unit_tests/qpipoptmat_base .tst b/tests/unit_tests/qpipoptmat_base .tst deleted file mode 100644 index aacbc4e..0000000 --- a/tests/unit_tests/qpipoptmat_base .tst +++ /dev/null @@ -1,73 +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 - -// <-- JVM NOT MANDATORY --> -// <-- ENGLISH IMPOSED --> - - -// -// assert_close -- -// Returns 1 if the two real matrices computed and expected are close, -// i.e. if the relative distance between computed and expected is lesser than epsilon. -// Arguments -// computed, expected : the two matrices to compare -// epsilon : a small number -// -function flag = assert_close ( computed, expected, epsilon ) - if expected==0.0 then - shift = norm(computed-expected); - else - shift = norm(computed-expected)/norm(expected); - end -// if shift < epsilon then -// flag = 1; -// else -// flag = 0; -// end -// if flag <> 1 then pause,end - flag = assert_checktrue ( shift < epsilon ); -endfunction -// -// assert_equal -- -// Returns 1 if the two real matrices computed and expected are equal. -// Arguments -// computed, expected : the two matrices to compare -// epsilon : a small number -// -//function flag = assert_equal ( computed , expected ) -// if computed==expected then -// flag = 1; -// else -// flag = 0; -// end -// if flag <> 1 then pause,end -//endfunction - -//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) - -assert_close ( x , [0.6666667 1.3333333]' , 1.e-7 ); -assert_close ( f , [ - 8.2222223] , 1.e-7 ); - -assert_checkequal( exitflag , 0 ); diff --git a/tests/unit_tests/qpipoptmat_base.dia.ref b/tests/unit_tests/qpipoptmat_base.dia.ref new file mode 100644 index 0000000..a03fc4e --- /dev/null +++ b/tests/unit_tests/qpipoptmat_base.dia.ref @@ -0,0 +1,73 @@ +// 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 + +// <-- JVM NOT MANDATORY --> +// <-- ENGLISH IMPOSED --> + + +// +// assert_close -- +// Returns 1 if the two real matrices computed and expected are close, +// i.e. if the relative distance between computed and expected is lesser than epsilon. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +function flag = assert_close ( computed, expected, epsilon ) + if expected==0.0 then + shift = norm(computed-expected); + else + shift = norm(computed-expected)/norm(expected); + end +// if shift < epsilon then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end + flag = assert_checktrue ( shift < epsilon ); +endfunction +// +// assert_equal -- +// Returns 1 if the two real matrices computed and expected are equal. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +//function flag = assert_equal ( computed , expected ) +// if computed==expected then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end +//endfunction + +//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) + +assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 ); +assert_close ( fopt , [ - 8.2222223] , 1.e-7 ); + +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/qpipoptmat_base.tst b/tests/unit_tests/qpipoptmat_base.tst new file mode 100644 index 0000000..a03fc4e --- /dev/null +++ b/tests/unit_tests/qpipoptmat_base.tst @@ -0,0 +1,73 @@ +// 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 + +// <-- JVM NOT MANDATORY --> +// <-- ENGLISH IMPOSED --> + + +// +// assert_close -- +// Returns 1 if the two real matrices computed and expected are close, +// i.e. if the relative distance between computed and expected is lesser than epsilon. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +function flag = assert_close ( computed, expected, epsilon ) + if expected==0.0 then + shift = norm(computed-expected); + else + shift = norm(computed-expected)/norm(expected); + end +// if shift < epsilon then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end + flag = assert_checktrue ( shift < epsilon ); +endfunction +// +// assert_equal -- +// Returns 1 if the two real matrices computed and expected are equal. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +//function flag = assert_equal ( computed , expected ) +// if computed==expected then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end +//endfunction + +//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) + +assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 ); +assert_close ( fopt , [ - 8.2222223] , 1.e-7 ); + +assert_checkequal( exitflag , int32(0) ); diff --git a/tests/unit_tests/symphony_mat_base.dia.ref b/tests/unit_tests/symphony_mat_base.dia.ref deleted file mode 100644 index 3bf286d..0000000 --- a/tests/unit_tests/symphony_mat_base.dia.ref +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (C) 2015 - IIT Bombay - FOSSEE -// -// Author: Keyur Joshi and 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 - -// <-- JVM NOT MANDATORY --> -// <-- ENGLISH IMPOSED --> - - -// -// assert_close -- -// Returns 1 if the two real matrices computed and expected are close, -// i.e. if the relative distance between computed and expected is lesser than epsilon. -// Arguments -// computed, expected : the two matrices to compare -// epsilon : a small number -// -function flag = assert_close ( computed, expected, epsilon ) - if expected==0.0 then - shift = norm(computed-expected); - else - shift = norm(computed-expected)/norm(expected); - end -// if shift < epsilon then -// flag = 1; -// else -// flag = 0; -// end -// if flag <> 1 then pause,end - flag = assert_checktrue ( shift < epsilon ); -endfunction -// -// assert_equal -- -// Returns 1 if the two real matrices computed and expected are equal. -// Arguments -// computed, expected : the two matrices to compare -// epsilon : a small number -// -//function flag = assert_equal ( computed , expected ) -// if computed==expected then -// flag = 1; -// else -// flag = 0; -// end -// if flag <> 1 then pause,end -//endfunction - -// Objective function -c = [350*5,330*3,310*4,280*6,500,450,400,100] - -// Lower Bound of variable -lb = repmat(0,1,8); - -// Upper Bound of variables -ub = [repmat(1,1,4) repmat(%inf,1,4)]; - -// Constraint Matrix -Aeq = [5,3,4,6,1,1,1,1; - 5*0.05,3*0.04,4*0.05,6*0.03,0.08,0.07,0.06,0.03; - 5*0.03,3*0.03,4*0.04,6*0.04,0.06,0.07,0.08,0.09;] - - -beq = [ 25, 1.25, 1.25] - -intcon = [1 2 3 4]; - -// Calling Symphony -[x,f,iter] = symphony_mat(c,intcon,[],[],Aeq,beq,lb,ub); - -//In Symphony Library for optimal solution status = 227 -status = sym_getStatus(); - -assert_close ( x , [1 1 0 1 7.25 0 0.25 3.5] , 1.e-7 ); -assert_close ( f , [ 8495] , 1.e-7 ); - -assert_checkequal( status , 227 ); diff --git a/tests/unit_tests/symphony_mat_base.tst b/tests/unit_tests/symphony_mat_base.tst deleted file mode 100644 index 629039b..0000000 --- a/tests/unit_tests/symphony_mat_base.tst +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) 2015 - IIT Bombay - FOSSEE -// -// Author: Keyur Joshi and 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 - -// <-- JVM NOT MANDATORY --> -// <-- ENGLISH IMPOSED --> - - -// -// assert_close -- -// Returns 1 if the two real matrices computed and expected are close, -// i.e. if the relative distance between computed and expected is lesser than epsilon. -// Arguments -// computed, expected : the two matrices to compare -// epsilon : a small number -// -function flag = assert_close ( computed, expected, epsilon ) - if expected==0.0 then - shift = norm(computed-expected); - else - shift = norm(computed-expected)/norm(expected); - end -// if shift < epsilon then -// flag = 1; -// else -// flag = 0; -// end -// if flag <> 1 then pause,end - flag = assert_checktrue ( shift < epsilon ); -endfunction -// -// assert_equal -- -// Returns 1 if the two real matrices computed and expected are equal. -// Arguments -// computed, expected : the two matrices to compare -// epsilon : a small number -// -//function flag = assert_equal ( computed , expected ) -// if computed==expected then -// flag = 1; -// else -// flag = 0; -// end -// if flag <> 1 then pause,end -//endfunction - -// Objective function -c = [350*5,330*3,310*4,280*6,500,450,400,100] - -// Lower Bound of variable -lb = repmat(0,1,8); - -// Upper Bound of variables -ub = [repmat(1,1,4) repmat(%inf,1,4)]; - -// Constraint Matrix -Aeq = [5,3,4,6,1,1,1,1; - 5*0.05,3*0.04,4*0.05,6*0.03,0.08,0.07,0.06,0.03; - 5*0.03,3*0.03,4*0.04,6*0.04,0.06,0.07,0.08,0.09;] - - -beq = [ 25, 1.25, 1.25] - -intcon = [1 2 3 4]; - -// Calling Symphony -[x,f,status,output] = symphony_mat(c,intcon,[],[],Aeq,beq,lb,ub); - -assert_close ( x , [1 1 0 1 7.25 0 0.25 3.5]' , 1.e-7 ); -assert_close ( f , [ 8495] , 1.e-7 ); - -assert_checkequal( status , 227 ); diff --git a/tests/unit_tests/symphonymat_base.dia.ref b/tests/unit_tests/symphonymat_base.dia.ref new file mode 100644 index 0000000..1e6f74a --- /dev/null +++ b/tests/unit_tests/symphonymat_base.dia.ref @@ -0,0 +1,83 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// Author: Keyur Joshi and 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 + +// <-- JVM NOT MANDATORY --> +// <-- ENGLISH IMPOSED --> + + +// +// assert_close -- +// Returns 1 if the two real matrices computed and expected are close, +// i.e. if the relative distance between computed and expected is lesser than epsilon. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +function flag = assert_close ( computed, expected, epsilon ) + if expected==0.0 then + shift = norm(computed-expected); + else + shift = norm(computed-expected)/norm(expected); + end +// if shift < epsilon then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end + flag = assert_checktrue ( shift < epsilon ); +endfunction +// +// assert_equal -- +// Returns 1 if the two real matrices computed and expected are equal. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +//function flag = assert_equal ( computed , expected ) +// if computed==expected then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end +//endfunction + +// Objective function +c = [350*5,330*3,310*4,280*6,500,450,400,100] + +// Lower Bound of variable +lb = repmat(0,1,8); + +// Upper Bound of variables +ub = [repmat(1,1,4) repmat(%inf,1,4)]; + +// Constraint Matrix +Aeq = [5,3,4,6,1,1,1,1; + 5*0.05,3*0.04,4*0.05,6*0.03,0.08,0.07,0.06,0.03; + 5*0.03,3*0.03,4*0.04,6*0.04,0.06,0.07,0.08,0.09;] + + +beq = [ 25, 1.25, 1.25] + +intcon = [1 2 3 4]; + +// Calling Symphony +[x,f,iter] = symphonymat(c,intcon,[],[],Aeq,beq,lb,ub); + +//In Symphony Library for optimal solution status = 227 +status = sym_getStatus(); + +assert_close ( x , [1 1 0 1 7.25 0 0.25 3.5] , 1.e-7 ); +assert_close ( f , [ 8495] , 1.e-7 ); + +assert_checkequal( status , 227 ); diff --git a/tests/unit_tests/symphonymat_base.tst b/tests/unit_tests/symphonymat_base.tst new file mode 100644 index 0000000..2465738 --- /dev/null +++ b/tests/unit_tests/symphonymat_base.tst @@ -0,0 +1,80 @@ +// Copyright (C) 2015 - IIT Bombay - FOSSEE +// +// Author: Keyur Joshi and 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 + +// <-- JVM NOT MANDATORY --> +// <-- ENGLISH IMPOSED --> + + +// +// assert_close -- +// Returns 1 if the two real matrices computed and expected are close, +// i.e. if the relative distance between computed and expected is lesser than epsilon. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +function flag = assert_close ( computed, expected, epsilon ) + if expected==0.0 then + shift = norm(computed-expected); + else + shift = norm(computed-expected)/norm(expected); + end +// if shift < epsilon then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end + flag = assert_checktrue ( shift < epsilon ); +endfunction +// +// assert_equal -- +// Returns 1 if the two real matrices computed and expected are equal. +// Arguments +// computed, expected : the two matrices to compare +// epsilon : a small number +// +//function flag = assert_equal ( computed , expected ) +// if computed==expected then +// flag = 1; +// else +// flag = 0; +// end +// if flag <> 1 then pause,end +//endfunction + +// Objective function +c = [350*5,330*3,310*4,280*6,500,450,400,100] + +// Lower Bound of variable +lb = repmat(0,1,8); + +// Upper Bound of variables +ub = [repmat(1,1,4) repmat(%inf,1,4)]; + +// Constraint Matrix +Aeq = [5,3,4,6,1,1,1,1; + 5*0.05,3*0.04,4*0.05,6*0.03,0.08,0.07,0.06,0.03; + 5*0.03,3*0.03,4*0.04,6*0.04,0.06,0.07,0.08,0.09;] + + +beq = [ 25, 1.25, 1.25] + +intcon = [1 2 3 4]; + +// Calling Symphony +[x,f,status,output] = symphonymat(c,intcon,[],[],Aeq,beq,lb,ub); + +assert_close ( x , [1 1 0 1 7.25 0 0.25 3.5]' , 1.e-7 ); +assert_close ( f , [ 8495] , 1.e-7 ); + +assert_checkequal( status , 227 ); -- cgit