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