From 189cfa0b9560e4c5a08a3d615be533dd7e631c2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gonzalo=20Men=C3=A9ndez?= <gonchimenendez@gmail.com>
Date: Tue, 4 Dec 2018 00:49:50 -0300
Subject: [PATCH] new mutation

---
 .../malva/rep/GA/newGA.req.cc                 | 57 +++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc
index 86dcac1..12ade05 100644
--- a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc
+++ b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc
@@ -883,6 +883,7 @@ skeleton newGA
 		probability = new float[2];
 	}
 
+	/*
 	void Mutation::mutate(Solution& sol) const
 	{   //cout << "ESTOY ENTRANDO A MUTATION" << endl;
 		std::vector<std::vector<int>> _grupos = sol.pbm().datosColumnas();
@@ -927,6 +928,62 @@ skeleton newGA
 			}
 		}
 		
+    //cout << "ESTOY SALIENDO DE MUTATION" << endl;
+	}
+*/
+	void Mutation::mutate(Solution& sol) const
+	{   //cout << "ESTOY ENTRANDO A MUTATION" << endl;
+		std::vector<std::vector<int>> _grupos = sol.pbm().datosColumnas();
+		for (int i=0;i<sol.pbm().cantColumnas();i++)
+		{
+			int j = 0;
+			for (int g=0; g<_grupos.size(); g++)
+			{
+				while (sol.var(i, j) != 1)
+				{
+					j+= 1;
+				}
+				if (rand01()<=probability[1])
+				{
+					int selector = random.rand_int(0, 1);
+					if (selector == 0)
+					{
+						if ((j-2 >= 0) && (sol.var(i, j - 2) == 0))
+						{
+							sol.var(i, j - 1) = 1;
+							sol.var(i, j + _grupos[i][g] - 1) = 0;
+							j = j + _grupos [i][g] - 1;
+						}
+						else if ((j + _grupos[i][g] + 1 < sol.pbm().cantFilas()) && (sol.var(i, j + _grupos[i][g] + 1) == 0))
+						{
+							sol.var(i, j) = 0;
+							sol.var(i, j + _grupos[i][g]) = 1;
+							j = j + _grupos [i][g] + 1;
+						}
+					}
+					else
+					{
+						if ((j + _grupos[i][g] + 1 < sol.pbm().cantFilas()) && (sol.var(i, j + _grupos[i][g] + 1) == 0))
+						{
+							sol.var(i, j) = 0;
+							sol.var(i, j + _grupos[i][g]) = 1;
+							j = j + _grupos [i][g] + 1;
+						}
+						else if ((j-2 >= 0) && (sol.var(i, j - 2) == 0))
+						{
+							sol.var(i, j - 1) = 1;
+							sol.var(i, j + _grupos[i][g] - 1) = 0;
+							j = j + _grupos [i][g] - 1;
+						}
+					}
+				}
+				else
+				{
+					j = j + _grupos[i][g];
+				}
+			}
+		}
+		
     //cout << "ESTOY SALIENDO DE MUTATION" << endl;
 	}
 
-- 
GitLab