diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc index 86dcac12356d0e09846a9433e3e827020f096d9e..12ade05133ab289e83c494edc2823e5fef115909 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; }