From 6a4f2b1be757ed78f79a8ceda00e0d26cd9e8297 Mon Sep 17 00:00:00 2001
From: Farid Alijani <farid.alijani@student.lut.fi>
Date: Wed, 20 Jul 2016 20:25:05 +0200
Subject: [PATCH] Matrix made for MATLAB

---
 .../Machine_Learning/Practice/Matrix.txt      |  20 +
 .../Machine_Learning/Practice/Q_Learning      | Bin 14436 -> 18946 bytes
 .../Machine_Learning/Practice/Q_learning.cpp  | 416 +++++++++--------
 .../Machine_Learning/Practice/Q_learning.cpp~ | 419 ++++++++++--------
 .../Practice/save_data_2_file.cpp~            |  68 ---
 .../Machine_Learning/Practice/test.txt        |   1 -
 .../Practice/vector_iterator.cpp~             |  33 --
 7 files changed, 474 insertions(+), 483 deletions(-)
 create mode 100644 MobileRobot/Machine_Learning/Practice/Matrix.txt
 delete mode 100644 MobileRobot/Machine_Learning/Practice/save_data_2_file.cpp~
 delete mode 100644 MobileRobot/Machine_Learning/Practice/test.txt
 delete mode 100644 MobileRobot/Machine_Learning/Practice/vector_iterator.cpp~

diff --git a/MobileRobot/Machine_Learning/Practice/Matrix.txt b/MobileRobot/Machine_Learning/Practice/Matrix.txt
new file mode 100644
index 00000000..c96d5841
--- /dev/null
+++ b/MobileRobot/Machine_Learning/Practice/Matrix.txt
@@ -0,0 +1,20 @@
+0.00382868 ,   0.116191 ,   0.745465 ,    3.89944 ,    8.15744 ,    4.01626 ,    1.47203 ,   0.551333 ,   0.174429 ,  0.0870335 ,  0.0250532 , 0.00912423 , 0.00249166 , 0.00102693 , 0.000419753 , 0.000131468 , 5.00254e-05 , 2.0099e-05 , 8.40168e-06 , 
+ 0.0101646 ,   0.136601 ,   0.612175 ,    1.85587 ,    4.20481 ,    1.54658 ,   0.478056 ,    0.24397 ,   0.105084 ,  0.0525671 ,  0.0232909 , 0.00943698 , 0.00320491 , 0.00112817 , 0.00034699 , 0.000126045 , 6.40941e-05 , 1.59779e-05 , 7.12482e-06 , 
+0.000805043 ,  0.0332884 ,   0.274046 ,    1.08019 ,    1.17002 ,   0.698387 ,    0.30359 ,   0.119663 ,  0.0579422 ,  0.0297607 ,  0.0131256 , 0.00460919 , 0.00148765 , 0.000765605 , 0.000216942 , 8.66716e-05 , 4.05771e-05 , 1.33528e-05 , 4.1249e-06 , 
+2.48899e-05 ,  0.0128954 ,  0.0802105 ,   0.287346 ,   0.689204 ,   0.346275 ,   0.166353 ,  0.0684359 ,  0.0311509 ,  0.0167736 , 0.00770705 , 0.00215702 ,  0.0011529 , 0.000538216 , 0.000209333 , 8.77233e-05 , 2.92078e-05 , 7.66706e-06 , 2.55988e-06 , 
+0.000129703 , 0.00322588 ,  0.0205338 ,   0.128641 ,   0.305247 ,   0.173804 ,  0.0898347 ,  0.0453639 ,  0.0163717 , 0.00600538 , 0.00381917 , 0.00155926 , 0.000689671 , 0.000228423 , 7.95174e-05 , 4.45367e-05 , 1.68923e-05 , 5.15815e-06 , 1.66697e-06 , 
+5.17332e-05 , 0.00126843 ,  0.0184666 ,  0.0514178 ,   0.127207 ,  0.0628717 ,  0.0314178 ,  0.0160154 , 0.00634512 , 0.00294345 , 0.00104471 , 0.00076148 , 0.000375335 , 0.000163789 , 5.89502e-05 ,  2.339e-05 , 9.06862e-06 , 3.25677e-06 , 1.00663e-06 , 
+4.03991e-07 , 6.23162e-05 , 0.00188303 , 0.00859995 ,  0.0340181 ,   0.025325 , 0.00959944 , 0.00791442 , 0.00304185 , 0.00108383 , 0.000699508 , 0.000268954 , 0.000117074 , 9.07904e-05 , 3.65932e-05 , 1.19388e-05 , 6.80645e-06 , 1.31515e-06 , 6.25406e-07 , 
+  -1.97339 , 5.01968e-05 , 0.000735782 , 0.00252916 ,  0.0105147 , 0.00578474 , 0.00506614 ,  0.0026018 , 0.00151745 , 0.000714455 , 0.000315345 , 0.000122624 , 6.38013e-05 , 4.00137e-05 , 1.86079e-05 , 8.7881e-06 , 4.12973e-06 , 1.4014e-06 , 5.59912e-07 , 
+  -28.2006 , 1.37268e-05 , 0.000366493 , 0.00152154 , 0.00318546 , 0.00219539 , 0.00198565 ,  0.0010295 , 0.000568695 , 0.000243552 , 0.000121169 , 6.63649e-05 , 2.64561e-05 , 2.05659e-05 , 8.72049e-06 , 3.48901e-06 , 2.00535e-06 , 8.20102e-07 , 3.50581e-07 , 
+  -2.37334 , 1.53224e-05 , 0.000170402 , 0.000709633 , 0.00106954 ,  0.0010878 , 0.000649422 , 0.00035624 , 0.000168493 , 0.000124677 , 7.17247e-05 , 1.90548e-05 , 1.4612e-05 , 7.66143e-06 , 4.0633e-06 , 1.69388e-06 , 8.95118e-07 , 4.37694e-07 , 1.91993e-07 , 
+ -0.357137 , 1.03247e-05 , 7.81591e-05 , 0.000262295 , 0.000255134 , 0.000269388 , 0.000257623 , 0.000146377 , 5.59075e-05 , 3.91945e-05 , 2.23471e-05 , 1.16324e-05 , 5.09942e-06 , 3.5008e-06 , 1.83621e-06 , 6.90279e-07 , 3.68535e-07 , 1.98699e-07 , 1.06421e-07 , 
+-0.0355914 , 1.76753e-06 , 1.67835e-05 , 5.89723e-05 , 0.000105021 , 8.62172e-05 , 6.56463e-05 , 4.19768e-05 , 2.39549e-05 , 1.49727e-05 , 9.48064e-06 , 4.59358e-06 , 2.30864e-06 , 1.29036e-06 , 6.71866e-07 , 3.25367e-07 , 1.56607e-07 , 1.04578e-07 , 5.1386e-08 , 
+-0.00024576 , 7.1379e-07 , 6.31042e-06 , 2.44207e-05 , 5.04218e-05 , 3.12887e-05 , 2.64148e-05 , 1.43321e-05 , 1.06089e-05 , 8.12063e-06 , 3.65203e-06 , 2.59047e-06 , 1.31982e-06 , 6.73679e-07 , 3.67204e-07 , 1.42886e-07 ,  6.388e-08 , 5.66555e-08 , 2.36875e-08 , 
+7.19718e-09 , 8.29073e-08 , 1.65837e-06 , 9.19997e-06 , 2.08386e-05 , 1.40195e-05 , 1.00378e-05 , 5.77964e-06 , 2.89724e-06 , 2.27576e-06 , 1.27591e-06 , 9.47388e-07 , 5.31476e-07 , 2.79771e-07 , 1.71075e-07 , 7.78852e-08 , 4.79251e-08 , 2.57395e-08 , 1.48816e-08 , 
+2.09905e-09 , 5.91897e-08 , 8.77307e-07 , 4.30383e-06 , 4.83682e-06 , 5.12303e-06 , 3.8108e-06 , 2.47933e-06 , 1.38905e-06 , 1.11872e-06 , 7.17452e-07 , 4.48308e-07 , 2.7743e-07 , 1.59136e-07 , 7.28462e-08 , 3.8976e-08 , 2.20561e-08 , 1.30902e-08 , 6.81637e-09 , 
+4.50704e-09 , 6.99315e-08 , 3.02224e-07 , 1.26951e-06 , 2.09616e-06 , 1.93872e-06 , 9.87246e-07 , 8.64459e-07 , 8.06824e-07 , 4.42032e-07 , 2.83851e-07 , 1.81637e-07 , 1.34092e-07 , 7.4948e-08 ,  4.322e-08 , 1.69923e-08 , 9.22747e-09 , 5.70149e-09 , 3.46033e-09 , 
+ 6.928e-11 , 7.37901e-09 , 1.62669e-07 , 5.12681e-07 , 7.72272e-07 , 4.69803e-07 , 2.66095e-07 , 1.85097e-07 , 2.33462e-07 , 1.6689e-07 , 1.2692e-07 , 1.16261e-07 , 6.24054e-08 , 2.99576e-08 , 1.67464e-08 , 1.03437e-08 , 3.95863e-09 , 2.61051e-09 , 1.66694e-09 , 
+2.99368e-10 , 2.90294e-09 , 1.42247e-08 , 1.58879e-07 , 2.79446e-07 , 1.77048e-07 , 1.40554e-07 , 9.84467e-08 , 7.42305e-08 , 6.91373e-08 , 6.00053e-08 , 5.27598e-08 , 2.45167e-08 , 1.46483e-08 , 8.48451e-09 , 4.46223e-09 , 2.55844e-09 , 1.51404e-09 , 7.86679e-10 , 
+1.22124e-10 , 2.49068e-09 , 8.83616e-09 , 6.57874e-08 , 9.11198e-08 , 7.67968e-08 ,  4.556e-08 , 4.63382e-08 ,   3.39e-08 , 3.50163e-08 , 2.2234e-08 , 1.47875e-08 , 9.44545e-09 , 7.25721e-09 , 4.05418e-09 , 2.26837e-09 , 1.30559e-09 , 5.33087e-10 , 3.92974e-10 , 
+
diff --git a/MobileRobot/Machine_Learning/Practice/Q_Learning b/MobileRobot/Machine_Learning/Practice/Q_Learning
index 18a74ef4ae035bfd7a1a2b6ebdf1b7e606facd1e..63fdccb8e49b78ddb9ae0975c27cd78057853bff 100755
GIT binary patch
literal 18946
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
Utp}|=hKfLK$psyx0WM$|0A&VvegFUf

literal 14436
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
W35_(+>@QRV>cm{o?i6rNV*mj57_vqH

diff --git a/MobileRobot/Machine_Learning/Practice/Q_learning.cpp b/MobileRobot/Machine_Learning/Practice/Q_learning.cpp
index 6447846e..69e42864 100644
--- a/MobileRobot/Machine_Learning/Practice/Q_learning.cpp
+++ b/MobileRobot/Machine_Learning/Practice/Q_learning.cpp
@@ -3,26 +3,26 @@
 #include <iomanip>
 #include <ctime>
 #include <cstdlib>
-
+#include <fstream>
 using namespace std;
 
- const int row = 9;
- const int col = 9;
-
+const int row = 20;
+const int col = 20;
 
+ofstream file;
 double gamma = .8;
 double alpha = .1;
-double R_step = 120;
+double R_step = row*col;
 
-double R[row][col] = {0};
-double Q[row][col] = {0};
+double R[row][col] = { 0 };
+double Q[row][col] = { 0 };
 
 int iterations;
 int it_;
 int user_action;
 double Q_next_state;
 
-int i,j;
+int i, j;
 double Q_curr_state = Q[i][j];
 
 double reward;
@@ -39,208 +39,244 @@ double sample;
 
 void print_R();
 void print_Q();
+void save2file();
 void iANDj_Generator();
 
 int main()
 {
-        R[R_indx_i][R_indx_j] = 50; // reward
-        R[P_indx_i][P_indx_j] = -60; // punishment
-
-        print_R();
-        
-        cout << "\n iterations ? \n" ;
-        cin >> it_;
-
-        /* initialize random seed: */
-  	srand (time(NULL));
-
-        while ( iterations < it_ ) 
-        {       
-                if (user_action == 1 && i != 0) // North
-                {
-                        reward = R[i][j];
-                        Q_next_state = Q[i - 1][j];
-                        
-                        sample = reward + gamma * Q_next_state;
-                        Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        Q_curr_state = Q_next_state;
-                        //printf(" Q_current_state = %f \n",Q_curr_state);
-                        i--;
-                        counter++;
-                } else if (user_action == 1 && i == 0) // North
-                {
-                        cout << "You can't go further up!\n";
-                } else if (user_action == 3 && i < (row - 1)) // South, i < row
-                {
-                        reward = R[i][j];
-                        Q_next_state = Q[i + 1][j];
-                        
-                        sample = reward + gamma * Q_next_state;
-                        Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        Q_curr_state = Q_next_state;
-                        //printf(" Q_current_state = %f \n",Q_curr_state);
-                        i++;
-                        counter++;
-                } else if (user_action == 3 && i >= (row - 1)) // South
-                {
-                        cout << "You can't go further down!\n";
-                } else if (user_action == 2 && j < (col - 1)) // East
-                {
-                        reward = R[i][j];
-                        Q_next_state = Q[i][j + 1];
-                        
-                        sample = reward + gamma * Q_next_state;
-                        Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        Q_curr_state = Q_next_state;
-                        //printf(" Q_current_state = %f \n",Q_curr_state);
-                        j++;
-                        counter++;
-                } else if (user_action == 2 && j >= (col - 1)) // East, j > col
-                {
-                        cout << "You can't go further right!\n";
-                } else if (user_action == 4 && j != 0 ) // West
-                {
-                        reward = R[i][j];
-                        Q_next_state = Q[i][j - 1];
-                        
-                        sample = reward + gamma * Q_next_state;
-                        Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        Q_curr_state = Q_next_state;
-                        //printf(" Q_current_state = %f \n",Q_curr_state);
-                        j--;
-                        counter++;
-                } else if (user_action == 4 && j == 0) // West, j = 1
-                {
-                        cout << "You can't go further left!\n";
-                } else if (user_action == 0) // start
-                {
-                        cout << "\nGenerating random pose in grid for 1st. time!\n";
-                        iANDj_Generator();
-                }
-                
-                // + Reward
-                if (i == R_indx_i && j == R_indx_j)
-                {
-                        Time_Reward = -counter;
-                        cout << " Time Reward = "<< Time_Reward << "\n";
-                        
-                        if(abs(Time_Reward) <= R_step)
-                        {
-                                
-                                cout << "\n Goal is achieved <= " << R_step << " time steps\n";
-                                reward = R[i][j];
-                                Q_next_state = 0;
-                        
-                                sample = reward + gamma * Q_next_state;
-                                Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        } else
-                        {
-                                cout << "\n Goal is achieved > " << R_step << " time steps => time_punishment\n";
-                                reward = -1; // ???
-                                Q_next_state = 0;
-                        
-                                sample = reward + gamma * Q_next_state;
-                                Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        }
-                        
-                        counter = 0;
-                        print_Q();
-                        iANDj_Generator();
-                        iterations++;
-                } else if (i == P_indx_i && j == P_indx_j) // - Reward => Punishment
-                {
-                           cout << "\n Failed to achieve a goal! \n";
-                                
-                                reward = R[i][j];
-                                Q_next_state = 0;
-                        
-                                sample = reward + gamma * Q_next_state;
-                                Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                                
-                                print_Q();
-                                iANDj_Generator();
-                                iterations++;  
-                }
-                
-                
-                cout << "\n Q_value = " << Q_curr_state << " , actions N(1), E(2), S(3), W(4) : ";
-                
-                /*if(i <= R_indx_i && j > R_indx_j) // current pose : North-East (1)
-                {
-                        user_action = ((double) rand() / (RAND_MAX)) * (5 - 3) + 3;
-                } else if (i <= R_indx_i && j <= R_indx_j) // current pose : North-West (2)
-                {
-                        user_action = ((double) rand() / (RAND_MAX)) * (4 - 2) + 2;
-                } else if (i > R_indx_i && j <= R_indx_j) // current pose : South-West (3)
-                {
-                        user_action = ((double) rand() / (RAND_MAX)) * (3 - 1) + 1;
-                } else if (i > R_indx_i && j > R_indx_j) // current pose : South-East (4)
-                {
-                        user_action = ((double) rand() / (RAND_MAX)) * (5 - 1) + 1;
-                }*/
-                
-                if( j > R_indx_j) // current pose : Right (1)
-                {
-                        cout << "\n Right Side of the goal ... \n";
-                        user_action = ((double) rand() / (RAND_MAX)) * (5 - 1) + 1;
-                } else if (j <= R_indx_j) // current pose : Left (2)
-                {
-                        cout << "\n Left Side of the goal ... \n";
-                        user_action = ((double) rand() / (RAND_MAX)) * (4 - 1) + 1;
-                }
-                
-                
-                //cin >> user_action;
-                printf(" user action = %i \n",user_action);
-                
-          }
-return 0;
-}
+	R[R_indx_i][R_indx_j] = 50; // reward
+	R[P_indx_i][P_indx_j] = -60; // punishment
+	
+	file.open("Matrix.txt");
+
+	print_R();
+
+	cout << "\n iterations ? \n";
+	cin >> it_;
+
+	/* initialize random seed: */
+	srand(time(NULL));
+
+	while (iterations < it_)
+	{
+		// -------------------------------- Actions ------------------------------
+		if (user_action == 1 && i != 0) // North
+		{
+			reward = R[i][j];
+			Q_next_state = Q[i - 1][j];
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			Q_curr_state = Q_next_state;
+			//printf(" Q_current_state = %f \n",Q_curr_state);
+			i--;
+			counter++;
+		}
+		else if (user_action == 1 && i == 0) // North
+		{
+			cout << "You can't go further up!\n";
+		}
+		else if (user_action == 3 && i < (row - 1)) // South, i < row
+		{
+			reward = R[i][j];
+			Q_next_state = Q[i + 1][j];
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			Q_curr_state = Q_next_state;
+			//printf(" Q_current_state = %f \n",Q_curr_state);
+			i++;
+			counter++;
+		}
+		else if (user_action == 3 && i >= (row - 1)) // South
+		{
+			cout << "You can't go further down!\n";
+		}
+		else if (user_action == 2 && j < (col - 1)) // East
+		{
+			reward = R[i][j];
+			Q_next_state = Q[i][j + 1];
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			Q_curr_state = Q_next_state;
+			//printf(" Q_current_state = %f \n",Q_curr_state);
+			j++;
+			counter++;
+		}
+		else if (user_action == 2 && j >= (col - 1)) // East, j > col
+		{
+			cout << "You can't go further right!\n";
+		}
+		else if (user_action == 4 && j != 0) // West
+		{
+			reward = R[i][j];
+			Q_next_state = Q[i][j - 1];
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			Q_curr_state = Q_next_state;
+			//printf(" Q_current_state = %f \n",Q_curr_state);
+			j--;
+			counter++;
+		}
+		else if (user_action == 4 && j == 0) // West, j = 1
+		{
+			cout << "You can't go further left!\n";
+		}
+		else if (user_action == 0) // start
+		{
+			cout << "\nGenerating random pose in grid for 1st. time!\n";
+			iANDj_Generator();
+		}
+
+
+		// ------------------------------- Reward Distribution ---------------------------
+		// + Reward
+		if (i == R_indx_i && j == R_indx_j)
+		{
+			Time_Reward = -counter;
+			cout << " Time Reward = " << Time_Reward << "\n";
+
+			if (abs(Time_Reward) <= R_step)
+			{
+
+				cout << "\n Goal is achieved <= " << R_step << " time steps\n";
+				reward = R[i][j];
+				Q_next_state = 0;
+
+				sample = reward + gamma * Q_next_state;
+				Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			}
+			else
+			{
+				cout << "\n Goal is achieved > " << R_step << " time steps => time_punishment\n";
+				reward = -1; // ???
+				Q_next_state = 0;
+
+				sample = reward + gamma * Q_next_state;
+				Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			}
 
+			counter = 0;
+			print_Q();
+			//save2file();
+			iANDj_Generator();
+			iterations++;
+		}
+		else if (i == P_indx_i && j == P_indx_j) // - Reward => Punishment
+		{
+			cout << "\n Failed to achieve a goal! \n";
+
+			reward = R[i][j];
+			Q_next_state = 0;
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+
+			print_Q();
+			//save2file();
+			iANDj_Generator();
+			iterations++;
+		}
+
+		cout << "\n Q_value = " << Q_curr_state << " , actions N(1), E(2), S(3), W(4) : ";
+
+		/*if(i <= R_indx_i && j > R_indx_j) // current pose : North-East (1)
+		{
+		user_action = ((double) rand() / (RAND_MAX)) * (5 - 3) + 3;
+		} else if (i <= R_indx_i && j <= R_indx_j) // current pose : North-West (2)
+		{
+		user_action = ((double) rand() / (RAND_MAX)) * (4 - 2) + 2;
+		} else if (i > R_indx_i && j <= R_indx_j) // current pose : South-West (3)
+		{
+		user_action = ((double) rand() / (RAND_MAX)) * (3 - 1) + 1;
+		} else if (i > R_indx_i && j > R_indx_j) // current pose : South-East (4)
+		{
+		user_action = ((double) rand() / (RAND_MAX)) * (5 - 1) + 1;
+		}*/
+
+
+		if (j > R_indx_j) // current pose : Right (1)
+		{
+			cout << "\n Right Side of the goal ... \n";
+			user_action = ((double)rand() / (RAND_MAX)) * (5 - 1) + 1;
+		}
+		else if (j <= R_indx_j) // current pose : Left (2)
+		{
+			cout << "\n Left Side of the goal ... \n";
+			user_action = ((double)rand() / (RAND_MAX)) * (4 - 1) + 1;
+		}
+
+
+
+		//cin >> user_action;
+		printf(" user action = %i \n", user_action);
+
+	}
+	save2file();
+	return 0;
+}
 void print_R()
 {
-         cout << " R = \n";
-        for(int i = 0; i <= (row - 1); i++)
-        {
-                for(int j = 0; j <= (col - 1); j++)
-                {
-                        cout << setw(col - 1) << R[i][j];
-			if(j < col - 1)
+	cout << " R = \n";
+	for (int i = 0; i <= (row - 1); i++)
+	{
+		for (int j = 0; j <= (col - 1); j++)
+		{
+			cout << setw(col - 1) << R[i][j];
+			if (j < col - 1)
 			{
 				cout << " , ";
 			}
 		} // j
-                cout << "\n";
-        } // i
-        cout << "\n";
+		cout << "\n";
+	} // i
+	cout << "\n";
 }
 void print_Q()
 {
-         cout << " Q = \n";
-        for(int i = 0; i <= (row - 1); i++)
-        {
-                for(int j = 0; j <= (col - 1); j++)
-                {
-                        cout << setw(col - 1) << Q[i][j];
-			if(j < col - 1)
+	cout << " Q = \n";
+	for (int i = 0; i <= (row - 1); i++)
+	{
+		for (int j = 0; j <= (col - 1); j++)
+		{
+			cout << setw(col - 1) << Q[i][j];
+			if (j < col - 1)
 			{
 				cout << " , ";
 			}
 		} // j
-                cout << "\n";
-        } // i
-        cout << "\n";
+		cout << "\n";
+	} // i
+	cout << "\n";
 }
 
 void iANDj_Generator()
 {
-        // Generate Random Pose for current state (position)
-        
-        i = ((double) rand() / (RAND_MAX)) * (row) ;
-        j = ((double) rand() / (RAND_MAX)) * (col) ;
-        
-        Q_curr_state = Q[i][j];
-        
-        cout << "\n i = " << i << " , j = " << j << " => Q[i][j] = " << Q_curr_state << " \n";
-        
+	// Generate Random Pose for current state (position)
+
+	i = ((double)rand() / (RAND_MAX)) * (row);
+	j = ((double)rand() / (RAND_MAX)) * (col);
+
+	Q_curr_state = Q[i][j];
+
+	cout << "\n i = " << i << " , j = " << j << " => Q[i][j] = " << Q_curr_state << " \n";
+
+}
+void save2file()
+{
+	for (int k = 0; k < row - 1; k++)
+	{
+		for (int l = 0; l < col - 1; l++)
+		{
+			file << setw(10) << Q[k][l];
+			if (l < col - 1)
+			{
+				file << " , ";
+			}
+		}
+		file << "\n";
+	}
+	file << "\n";
 }
diff --git a/MobileRobot/Machine_Learning/Practice/Q_learning.cpp~ b/MobileRobot/Machine_Learning/Practice/Q_learning.cpp~
index 9a661abb..bdad0449 100644
--- a/MobileRobot/Machine_Learning/Practice/Q_learning.cpp~
+++ b/MobileRobot/Machine_Learning/Practice/Q_learning.cpp~
@@ -3,26 +3,27 @@
 #include <iomanip>
 #include <ctime>
 #include <cstdlib>
-
+#include <fstream>
+#include <windows.h>
 using namespace std;
 
- const int row = 9;
- const int col = 9;
-
+const int row = 20;
+const int col = 20;
 
+ofstream file;
 double gamma = .8;
 double alpha = .1;
-double R_step = 120;
+double R_step = row*col;
 
-double R[row][col] = {0};
-double Q[row][col] = {0};
+double R[row][col] = { 0 };
+double Q[row][col] = { 0 };
 
 int iterations;
-int it_ = 1;
+int it_;
 int user_action;
 double Q_next_state;
 
-int i,j;
+int i, j;
 double Q_curr_state = Q[i][j];
 
 double reward;
@@ -39,208 +40,244 @@ double sample;
 
 void print_R();
 void print_Q();
+void save2file();
 void iANDj_Generator();
 
 int main()
 {
-        R[R_indx_i][R_indx_j] = 50; // reward
-        R[P_indx_i][P_indx_j] = -60; // punishment
-
-        print_R();
-        
-        cout << "\n iterations ? \n" ;
-        cin >> it_;
-
-        /* initialize random seed: */
-  	srand (time(NULL));
-
-        while ( iterations < it_ ) 
-        {       
-                if (user_action == 1 && i != 0) // North
-                {
-                        reward = R[i][j];
-                        Q_next_state = Q[i - 1][j];
-                        
-                        sample = reward + gamma * Q_next_state;
-                        Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        Q_curr_state = Q_next_state;
-                        //printf(" Q_current_state = %f \n",Q_curr_state);
-                        i--;
-                        counter++;
-                } else if (user_action == 1 && i == 0) // North
-                {
-                        cout << "You can't go further up!\n";
-                } else if (user_action == 3 && i < (row - 1)) // South, i < row
-                {
-                        reward = R[i][j];
-                        Q_next_state = Q[i + 1][j];
-                        
-                        sample = reward + gamma * Q_next_state;
-                        Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        Q_curr_state = Q_next_state;
-                        //printf(" Q_current_state = %f \n",Q_curr_state);
-                        i++;
-                        counter++;
-                } else if (user_action == 3 && i >= (row - 1)) // South
-                {
-                        cout << "You can't go further down!\n";
-                } else if (user_action == 2 && j < (col - 1)) // East
-                {
-                        reward = R[i][j];
-                        Q_next_state = Q[i][j + 1];
-                        
-                        sample = reward + gamma * Q_next_state;
-                        Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        Q_curr_state = Q_next_state;
-                        //printf(" Q_current_state = %f \n",Q_curr_state);
-                        j++;
-                        counter++;
-                } else if (user_action == 2 && j >= (col - 1)) // East, j > col
-                {
-                        cout << "You can't go further right!\n";
-                } else if (user_action == 4 && j != 0 ) // West
-                {
-                        reward = R[i][j];
-                        Q_next_state = Q[i][j - 1];
-                        
-                        sample = reward + gamma * Q_next_state;
-                        Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        Q_curr_state = Q_next_state;
-                        //printf(" Q_current_state = %f \n",Q_curr_state);
-                        j--;
-                        counter++;
-                } else if (user_action == 4 && j == 0) // West, j = 1
-                {
-                        cout << "You can't go further left!\n";
-                } else if (user_action == 0) // start
-                {
-                        cout << "\nGenerating random pose in grid for 1st. time!\n";
-                        iANDj_Generator();
-                }
-                
-                // + Reward
-                if (i == R_indx_i && j == R_indx_j)
-                {
-                        Time_Reward = -counter;
-                        cout << " Time Reward = "<< Time_Reward << "\n";
-                        
-                        if(abs(Time_Reward) <= R_step)
-                        {
-                                
-                                cout << "\n Goal is achieved <= " << R_step << " time steps\n";
-                                reward = R[i][j];
-                                Q_next_state = 0;
-                        
-                                sample = reward + gamma * Q_next_state;
-                                Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        } else
-                        {
-                                cout << "\n Goal is achieved > " << R_step << " time steps => time_punishment\n";
-                                reward = -1; // ???
-                                Q_next_state = 0;
-                        
-                                sample = reward + gamma * Q_next_state;
-                                Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                        }
-                        
-                        counter = 0;
-                        print_Q();
-                        iANDj_Generator();
-                        iterations++;
-                } else if (i == P_indx_i && j == P_indx_j) // - Reward => Punishment
-                {
-                           cout << "\n Failed to achieve a goal! \n";
-                                
-                                reward = R[i][j];
-                                Q_next_state = 0;
-                        
-                                sample = reward + gamma * Q_next_state;
-                                Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
-                                
-                                print_Q();
-                                iANDj_Generator();
-                                iterations++;  
-                }
-                
-                
-                cout << "\n Q_value = " << Q_curr_state << " , actions N(1), E(2), S(3), W(4) : ";
-                
-                /*if(i <= R_indx_i && j > R_indx_j) // current pose : North-East (1)
-                {
-                        user_action = ((double) rand() / (RAND_MAX)) * (5 - 3) + 3;
-                } else if (i <= R_indx_i && j <= R_indx_j) // current pose : North-West (2)
-                {
-                        user_action = ((double) rand() / (RAND_MAX)) * (4 - 2) + 2;
-                } else if (i > R_indx_i && j <= R_indx_j) // current pose : South-West (3)
-                {
-                        user_action = ((double) rand() / (RAND_MAX)) * (3 - 1) + 1;
-                } else if (i > R_indx_i && j > R_indx_j) // current pose : South-East (4)
-                {
-                        user_action = ((double) rand() / (RAND_MAX)) * (5 - 1) + 1;
-                }*/
-                
-                if( j > R_indx_j) // current pose : Right (1)
-                {
-                        cout << "\n Right Side of the goal ... \n";
-                        user_action = ((double) rand() / (RAND_MAX)) * (5 - 1) + 1;
-                } else if (j <= R_indx_j) // current pose : Left (2)
-                {
-                        cout << "\n Left Side of the goal ... \n";
-                        user_action = ((double) rand() / (RAND_MAX)) * (4 - 1) + 1;
-                }
-                
-                
-                //cin >> user_action;
-                printf(" user action = %i \n",user_action);
-                
-          }
-return 0;
-}
+	R[R_indx_i][R_indx_j] = 50; // reward
+	R[P_indx_i][P_indx_j] = -60; // punishment
+	
+	file.open("Matrix.txt");
+
+	print_R();
+
+	cout << "\n iterations ? \n";
+	cin >> it_;
+
+	/* initialize random seed: */
+	srand(time(NULL));
+
+	while (iterations < it_)
+	{
+		// -------------------------------- Actions ------------------------------
+		if (user_action == 1 && i != 0) // North
+		{
+			reward = R[i][j];
+			Q_next_state = Q[i - 1][j];
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			Q_curr_state = Q_next_state;
+			//printf(" Q_current_state = %f \n",Q_curr_state);
+			i--;
+			counter++;
+		}
+		else if (user_action == 1 && i == 0) // North
+		{
+			cout << "You can't go further up!\n";
+		}
+		else if (user_action == 3 && i < (row - 1)) // South, i < row
+		{
+			reward = R[i][j];
+			Q_next_state = Q[i + 1][j];
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			Q_curr_state = Q_next_state;
+			//printf(" Q_current_state = %f \n",Q_curr_state);
+			i++;
+			counter++;
+		}
+		else if (user_action == 3 && i >= (row - 1)) // South
+		{
+			cout << "You can't go further down!\n";
+		}
+		else if (user_action == 2 && j < (col - 1)) // East
+		{
+			reward = R[i][j];
+			Q_next_state = Q[i][j + 1];
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			Q_curr_state = Q_next_state;
+			//printf(" Q_current_state = %f \n",Q_curr_state);
+			j++;
+			counter++;
+		}
+		else if (user_action == 2 && j >= (col - 1)) // East, j > col
+		{
+			cout << "You can't go further right!\n";
+		}
+		else if (user_action == 4 && j != 0) // West
+		{
+			reward = R[i][j];
+			Q_next_state = Q[i][j - 1];
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			Q_curr_state = Q_next_state;
+			//printf(" Q_current_state = %f \n",Q_curr_state);
+			j--;
+			counter++;
+		}
+		else if (user_action == 4 && j == 0) // West, j = 1
+		{
+			cout << "You can't go further left!\n";
+		}
+		else if (user_action == 0) // start
+		{
+			cout << "\nGenerating random pose in grid for 1st. time!\n";
+			iANDj_Generator();
+		}
+
+
+		// ------------------------------- Reward Distribution ---------------------------
+		// + Reward
+		if (i == R_indx_i && j == R_indx_j)
+		{
+			Time_Reward = -counter;
+			cout << " Time Reward = " << Time_Reward << "\n";
+
+			if (abs(Time_Reward) <= R_step)
+			{
+
+				cout << "\n Goal is achieved <= " << R_step << " time steps\n";
+				reward = R[i][j];
+				Q_next_state = 0;
+
+				sample = reward + gamma * Q_next_state;
+				Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			}
+			else
+			{
+				cout << "\n Goal is achieved > " << R_step << " time steps => time_punishment\n";
+				reward = -1; // ???
+				Q_next_state = 0;
+
+				sample = reward + gamma * Q_next_state;
+				Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+			}
 
+			counter = 0;
+			print_Q();
+			//save2file();
+			iANDj_Generator();
+			iterations++;
+		}
+		else if (i == P_indx_i && j == P_indx_j) // - Reward => Punishment
+		{
+			cout << "\n Failed to achieve a goal! \n";
+
+			reward = R[i][j];
+			Q_next_state = 0;
+
+			sample = reward + gamma * Q_next_state;
+			Q[i][j] = ((1 - alpha) * Q[i][j]) + (alpha * sample);
+
+			print_Q();
+			//save2file();
+			iANDj_Generator();
+			iterations++;
+		}
+
+		cout << "\n Q_value = " << Q_curr_state << " , actions N(1), E(2), S(3), W(4) : ";
+
+		/*if(i <= R_indx_i && j > R_indx_j) // current pose : North-East (1)
+		{
+		user_action = ((double) rand() / (RAND_MAX)) * (5 - 3) + 3;
+		} else if (i <= R_indx_i && j <= R_indx_j) // current pose : North-West (2)
+		{
+		user_action = ((double) rand() / (RAND_MAX)) * (4 - 2) + 2;
+		} else if (i > R_indx_i && j <= R_indx_j) // current pose : South-West (3)
+		{
+		user_action = ((double) rand() / (RAND_MAX)) * (3 - 1) + 1;
+		} else if (i > R_indx_i && j > R_indx_j) // current pose : South-East (4)
+		{
+		user_action = ((double) rand() / (RAND_MAX)) * (5 - 1) + 1;
+		}*/
+
+
+		if (j > R_indx_j) // current pose : Right (1)
+		{
+			cout << "\n Right Side of the goal ... \n";
+			user_action = ((double)rand() / (RAND_MAX)) * (5 - 1) + 1;
+		}
+		else if (j <= R_indx_j) // current pose : Left (2)
+		{
+			cout << "\n Left Side of the goal ... \n";
+			user_action = ((double)rand() / (RAND_MAX)) * (4 - 1) + 1;
+		}
+
+
+
+		//cin >> user_action;
+		printf(" user action = %i \n", user_action);
+
+	}
+	save2file();
+	return 0;
+}
 void print_R()
 {
-         cout << " R = \n";
-        for(int i = 0; i <= (row - 1); i++)
-        {
-                for(int j = 0; j <= (col - 1); j++)
-                {
-                        cout << setw(col - 1) << R[i][j];
-			if(j < col - 1)
+	cout << " R = \n";
+	for (int i = 0; i <= (row - 1); i++)
+	{
+		for (int j = 0; j <= (col - 1); j++)
+		{
+			cout << setw(col - 1) << R[i][j];
+			if (j < col - 1)
 			{
 				cout << " , ";
 			}
 		} // j
-                cout << "\n";
-        } // i
-        cout << "\n";
+		cout << "\n";
+	} // i
+	cout << "\n";
 }
 void print_Q()
 {
-         cout << " Q = \n";
-        for(int i = 0; i <= (row - 1); i++)
-        {
-                for(int j = 0; j <= (col - 1); j++)
-                {
-                        cout << setw(col - 1) << Q[i][j];
-			if(j < col - 1)
+	cout << " Q = \n";
+	for (int i = 0; i <= (row - 1); i++)
+	{
+		for (int j = 0; j <= (col - 1); j++)
+		{
+			cout << setw(col - 1) << Q[i][j];
+			if (j < col - 1)
 			{
 				cout << " , ";
 			}
 		} // j
-                cout << "\n";
-        } // i
-        cout << "\n";
+		cout << "\n";
+	} // i
+	cout << "\n";
 }
 
 void iANDj_Generator()
 {
-        // Generate Random Pose for current state (position)
-        
-        i = ((double) rand() / (RAND_MAX)) * (row) ;
-        j = ((double) rand() / (RAND_MAX)) * (col) ;
-        
-        Q_curr_state = Q[i][j];
-        
-        cout << "\n i = " << i << " , j = " << j << " => Q[i][j] = " << Q_curr_state << " \n";
-        
+	// Generate Random Pose for current state (position)
+
+	i = ((double)rand() / (RAND_MAX)) * (row);
+	j = ((double)rand() / (RAND_MAX)) * (col);
+
+	Q_curr_state = Q[i][j];
+
+	cout << "\n i = " << i << " , j = " << j << " => Q[i][j] = " << Q_curr_state << " \n";
+
+}
+void save2file()
+{
+	for (int k = 0; k < row - 1; k++)
+	{
+		for (int l = 0; l < col - 1; l++)
+		{
+			file << setw(10) << Q[k][l];
+			if (l < col - 1)
+			{
+				file << " , ";
+			}
+		}
+		file << "\n";
+	}
+	file << "\n";
 }
diff --git a/MobileRobot/Machine_Learning/Practice/save_data_2_file.cpp~ b/MobileRobot/Machine_Learning/Practice/save_data_2_file.cpp~
deleted file mode 100644
index f809adbc..00000000
--- a/MobileRobot/Machine_Learning/Practice/save_data_2_file.cpp~
+++ /dev/null
@@ -1,68 +0,0 @@
-/*#include <iostream>
-#include <fstream>
-
-using namespace std;
-
-int main()
-{
-ofstream outputFile;
-outputFile.open("test.txt");
-
-float num1, num2, num3, num4, num5;
-char name1, name2, name3, name4, name5;
-
-cout << "Enter the first number: ";
-cin >> num1;
-outputFile << num1 << endl;
-
-cout << "Enter the second number: ";
-cin >> num2;
-outputFile << num2 << endl;
-
-cout << "Enter the third number: ";
-cin >> num3;
-outputFile << num3 << endl;
-
-cout << "Enter the fourth number: ";
-cin >> num4;
-outputFile << num4 << endl;
-
-cout << "Enter the fifth number: ";
-cin >> num5;
-outputFile << num5 << endl;
-
-outputFile.close();
-cout << "Done!\n";
-
-return 0;
-}*/
-
-#include <iostream> // library that contain basic input/output functions
-#include <fstream>  // library that contains file input/output functions
-using namespace std;
-
-int main()
-{
-  
-	char array[] = {'H','e','l','l','o',' ','W','o','r','l','d','!','\0'}; //array to write into file 
-  
-	ofstream fout("test.txt"); //opening an output stream for file test.txt
-	/*checking whether file could be opened or not. If file does not exist or don't have write permissions, file stream could not be opened.*/
-        if(fout.is_open())
-	{
-	        //file opened successfully so we are here
-	        cout << "File Opened successfully!!!. Writing data from array to file" << endl;
-
-		for(int i = 0; array[i] != "\0"; i++)
-		{
-                        fout << array[i]; //writing ith character of array in the file
-		}
-                cout << "Array data successfully saved into the file test.txt" << endl;
-	}
-	else //file could not be opened
-	{
-		cout << "File could not be opened." << endl;
-	}
-	return 0;
-}
-
diff --git a/MobileRobot/Machine_Learning/Practice/test.txt b/MobileRobot/Machine_Learning/Practice/test.txt
deleted file mode 100644
index c57eff55..00000000
--- a/MobileRobot/Machine_Learning/Practice/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hello World!
\ No newline at end of file
diff --git a/MobileRobot/Machine_Learning/Practice/vector_iterator.cpp~ b/MobileRobot/Machine_Learning/Practice/vector_iterator.cpp~
deleted file mode 100644
index 5b542380..00000000
--- a/MobileRobot/Machine_Learning/Practice/vector_iterator.cpp~
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <iostream> // just to output and show what's going on
-#include <vector>   // include vectors and iterators
-
-using namespace std;
-
-int main (){
-    vector <int> myVec; // declare a vector
-    // fill myVec with some values
-    for (int i = 0; i < 10; i++)
-        myVec.push_back(i);
-
-    vector <int> myVec2; // declare a second vector
-    // fill myVec2 with some values
-    for (int i = 10; i < 20; i++)
-        myVec2.push_back(i);
-
-    vector <int>::iterator It;
-
-    cout << "1st. vector : "<< endl;
-    for (It = myVec.begin(); It != myVec.end(); ++It)
-        cout << *It << "\t"; // output the current value that It is *pointing to
-
-    // print a new line
-    cout << endl;
-    
-    cout << "2nd. vector : "<< endl;
-    for (It = myVec2.begin(); It != myVec2.end(); ++It)
-        cout << *It << "\t"; // output the current value that It is *pointing to
-
-    cout << endl;
-    return 0;
-}
-
-- 
GitLab