protected Solucion apagar(Solucion nueva) { int tam = nueva.vector.Length; int pos = r.Next(0, tam); int i = pos + 1; while (nueva.getPeso() > pesoMaximo) { if (i >= tam) { i = 0; } if (nueva.vector[i] == 1) { nueva.setPeso(nueva.getPeso() - fx.elementos[i].peso); nueva.vector[i] = 0; } i++; } if (nueva.getPeso() > 0) { return(nueva); } else { return(prender(nueva)); } }
public Solucion tweak(Solucion copy) { int posicion = buscar(copy); if (posicion == -1) { copy = prender(copy); } else { copy.vector[posicion] = 0; } copy.setPeso(-1); posicion = r.Next(copy.vector.Length); while (true) { if (copy.getPeso() > pesoMaximo) { if (copy.vector[posicion] == 0) { posicion = buscar(copy); } copy.setPeso(copy.getPeso() - fx.elementos[posicion].peso); copy.vector[posicion] = 0; if (copy.getPeso() <= pesoMaximo && copy.getPeso() > 0) { break; } } else { if (copy.vector[posicion] == 0) { copy.setPeso(copy.getPeso() + fx.elementos[posicion].peso); copy.vector[posicion] = 1; } } posicion = r.Next(copy.vector.Length); } return(copy); }
protected Solucion prender(Solucion ajustada) { if (ajustada.getPeso() > pesoMaximo) { return(apagar(ajustada)); } else { if (ajustada.getPeso() == pesoMaximo) { return(ajustada); } else { int tam = ajustada.vector.Length, pos = r.Next(0, tam); ajustada.setPeso(ajustada.getPeso() + fx.elementos[pos].peso); ajustada.vector[pos] = 1; return(prender(ajustada)); } } }