function [results] = runTest(trials, dataset, BUDGET)

addpath("./UTIL", "./GA", "./KEYS", "./DATASETS");

% Assumes effort is the last column of the data
data = load(dataset);
x = size(data);
a = []; % datastore for reordered set

% Normalize the features
for i = 1 : x(2) - 1
	data(:,i) = norm_Col(data(:,i));
end

for i = 1 : trials
	
	% Randomly shuffle dataset to produce Training and Testing data
	order = randperm(x(1));
	for j = 1 : x(1)
		a(j,:) = data(order(j),:);
	end

	trainingData = a(1: 2 * floor(x(1) / 3) , :);
	testingData = a(2 * floor(x(1) / 3) + 1 : 3 * floor(x(1) / 3), :);
	[numprojects, numfeatures] = size(trainingData);


	% Obtain optimum bit-strings from testing methods
	ttime = time;
	temp(1,:) = ga(trainingData, trainingData, BUDGET);
	bestGA(i,:) = temp(1,1:end-1);
	results(i,5) = time - ttime;
	
	ttime = time;
	bestKEYS(i,:) = keys2(trainingData, trainingData, BUDGET);
	results(i,6) = time - ttime;

	ttime = time;
	bestGUESS(i,:) = guess(trainingData, BUDGET);	
	results(i,7) = time - ttime;

	% Do required computations
	results(i,1) = fwpsabe(trainingData, testingData, bestGA(i, 1:size(trainingData)), bestGA(i,size(trainingData)+1:end));
	results(i,2) = fwpsabe(trainingData, testingData, bestKEYS(i, 1:size(trainingData)), bestKEYS(i,size(trainingData)+1:end));
	results(i,3) = fwpsabe(trainingData, testingData, bestGUESS(i, 1:size(trainingData)), bestGUESS(i,size(trainingData)+1:end));
	results(i,4) = fwpsabe(trainingData, testingData, ones(1, numprojects), ones(1,(numfeatures - 1) * 2));
end

% Run tests on data here
