#include <iostream>

#include "LinearAlgebra.h"
#include "Global.h"
#include "VNS.h"

using namespace std;
using namespace global;

int main(int argc, char **argv)
{
 	 try
 	 {
		 DataBase data("housing.data");
		 cout << "DataBase: " << data.getDimension() << "x" << data.getSize() << endl;
		 Global problem(data,3);

		 problem.init();

		 cout << "Error=" << problem.run(VNS()) << endl;
	 }
	 catch(exception & e)
	 {
			cout << e.what() << endl;
	 }
	 catch(...)
	 {
			cout << "et merde" << endl;
	 }
	 return 0;
}

/*Old Tests
		 Matrix nulle;
	 	 Matrix A(3,3);

	 	 A(0,0) = 1;
	 	 A(0,1) = 2;
	 	 A(0,2) = 3;
	 	 A(1,0) = 2;
	 	 A(1,1) = 4;
	 	 A(1,2) = 4;
	 	 A(2,0) = 2;
	 	 A(2,1) = 4;
	 	 A(2,2) = 5;

	 	 A(0,0) = 4;
	 	 A(0,1) = 1;
	 	 A(0,2) = 0;
	 	 A(1,0) = 1;
	 	 A(1,1) = 4;
	 	 A(1,2) = 1;
	 	 A(2,0) = 0;
	 	 A(2,1) = 1;
	 	 A(2,2) = 4

		 A(0,0) = 12;
	 	 A(0,1) = -51;
	 	 A(0,2) = 4;
	 	 A(1,0) = 6;
	 	 A(1,1) = 167;
	 	 A(1,2) = -68;
	 	 A(2,0) = -4;
	 	 A(2,1) = 24;
	 	 A(2,2) = -41;
	 	 
	 	 cout << A;

		 //double *s=0;
		 //eigen(A,s,1e-6,10000);
		 
		 Matrix a(A);

		 Matrix q = decqr(a);

		 cout << "R=" << endl << a;
		 cout << "Q=" << endl << q;
		 cout << "A=" << endl << q.transpose()*q;



		 Vector b(3);
		 b(0) = 1;
		 b(1) = 2;
		 b(2) = 3;
		 b = A*b;
		 b(1) = 20;
		 cout << "b=" << b << endl;
		 Vector b2 = q.transpose()*b;
		 Vector x = solveUpperLinSys(a,b2);
		 cout << "x=" << x << endl;
		 
		 cout << "verif: Ax=" <<A*x << endl;

*/
