115 lines
3.1 KiB
Mathematica
115 lines
3.1 KiB
Mathematica
|
% This script has the purpose of testing your implementation of the Simplex Method. In case there should be any issue with your solution, you will
|
||
|
% get an error and the code will stop. If your proposed solution passes all the tests, you can happily move to the next part of the assignment.
|
||
|
|
||
|
close all;
|
||
|
clear;
|
||
|
clc;
|
||
|
|
||
|
runTests = [0 0 1 0 0 0];
|
||
|
|
||
|
%% Test 1 (example page 86)
|
||
|
if runTests(1)
|
||
|
type = 'max';
|
||
|
A = [2 1; 1 3; 1 1];
|
||
|
h = [360;480;220];
|
||
|
c = [14,18];
|
||
|
sign = [0,0,0];
|
||
|
|
||
|
[z,x_B,index_B] = simplex (type,A,h,c,sign);
|
||
|
|
||
|
if(z==3600 && sum(uint32(x_B)-uint32([90;130;50]))==0 && sum(index_B==[1,2,3])==3)
|
||
|
fprintf('Test 1 has given the expected results. Proceding with the next one.\n\n');
|
||
|
else
|
||
|
error('Test 1 has given a wrong result. Interrupting the testing phase.');
|
||
|
end
|
||
|
pause
|
||
|
end
|
||
|
|
||
|
%% Test 2 (example page 114)
|
||
|
if runTests(2)
|
||
|
type = 'min';
|
||
|
A = [2,1,3; 3,4,2];
|
||
|
h = [210;360];
|
||
|
c = [9,11,8];
|
||
|
sign = [0,0];
|
||
|
|
||
|
[z,x_B,index_B] = simplex (type,A,h,c,sign);
|
||
|
|
||
|
if(z==1062 && sum(uint32(x_B)-uint32([96;18]))==0 && sum(index_B==[1,2])==2)
|
||
|
fprintf('Test 2 has given the expected results. Proceding with the next one.\n\n');
|
||
|
else
|
||
|
error('Test 2 has given a wrong result. Interrupting the testing phase.');
|
||
|
end
|
||
|
pause
|
||
|
end
|
||
|
|
||
|
%% Test 3 (example page 126)
|
||
|
if runTests(3)
|
||
|
type = 'max';
|
||
|
A = [1,2,1; 2,1,0; 1,-2,-1];
|
||
|
h = [5;8;1];
|
||
|
c = [3,-2,5];
|
||
|
sign = [0,1,1];
|
||
|
|
||
|
[z,x_B,index_B] = simplex (type,A,h,c,sign);
|
||
|
|
||
|
if(z==17 && sum(uint32(x_B)-uint32([4;1;2]))==0 && sum(index_B==[1,3,6])==3)
|
||
|
fprintf('Test 3 has given the expected results. Proceding with the next one.\n\n');
|
||
|
else
|
||
|
error('Test 3 has given a wrong result. Interrupting the testing phase.');
|
||
|
end
|
||
|
pause
|
||
|
end
|
||
|
|
||
|
%% Test 4 (TED)
|
||
|
if runTests(4)
|
||
|
type = 'min';
|
||
|
A = [-10,-5,-8; -10,-2,-10; -5,-5,-4; 10,5,8; 10,2,10; 5,5,4];
|
||
|
h = [-110,-60,-90,78,43,70]';
|
||
|
c = [20000,30000,25000];
|
||
|
sign = [0,0,0,0,0,0];
|
||
|
|
||
|
[z,x_B,index_B] = simplex (type,A,h,c,sign);
|
||
|
|
||
|
if(z==380000 && sum(uint32(x_B)-uint32([4;10;20;20;12;17]))==0 && sum(index_B==[1,2,4,6,7,8])==6)
|
||
|
fprintf('Test 4 has given the expected results. Proceding with the next one.\n\n');
|
||
|
else
|
||
|
error('Test 4 has given a wrong result. Interrupting the testing phase.');
|
||
|
end
|
||
|
pause
|
||
|
end
|
||
|
|
||
|
%% Test 5 (LP Exercise 2)
|
||
|
if runTests(5)
|
||
|
type = 'max';
|
||
|
A = [1,1,2; 5,3,1; 2,1,0];
|
||
|
h = [1200;2000;600];
|
||
|
c = [5,20,28];
|
||
|
sign = [0,0,0];
|
||
|
|
||
|
[z,x_B,index_B] = simplex (type,A,h,c,sign);
|
||
|
|
||
|
if(z==20160 && sum(uint32(x_B)-uint32([560;320;40]))==0 && sum(index_B==[2,3,6])==3)
|
||
|
fprintf('Test 5 has given the expected results. Proceding with the next one.\n\n');
|
||
|
else
|
||
|
error('Test 5 has given a wrong result. Interrupting the testing phase.');
|
||
|
end
|
||
|
pause
|
||
|
end
|
||
|
|
||
|
%% Test 6 (Vinitaly page 171)
|
||
|
if runTests(6)
|
||
|
type = 'max';
|
||
|
A = [1,1,1,0,0,0,0,0,0; 0,0,0,1,1,1,0,0,0; 0,0,0,0,0,0,1,1,1; 0,1,0,0,1,0,0,1,0; 0,0,1,0,0,1,0,0,1];
|
||
|
h = [4800;4000;2300;2500;4200];
|
||
|
c = [2,3,4,4,7,12,4,9,13];
|
||
|
sign = [0,0,0,0,0];
|
||
|
|
||
|
[z,x_B,index_B] = simplex (type,A,h,c,sign);
|
||
|
|
||
|
if(z==79500 && sum(uint32(x_B)-uint32([4400;400;4000;2100;200]))==0 && sum(index_B==[1,2,6,8,9])==5)
|
||
|
fprintf('Test 6 has given the expected results. Congratulations!!!\n\n');
|
||
|
else
|
||
|
error('Test 6 has given a wrong result. Interrupting the testing phase.');
|
||
|
end
|
||
|
end
|