package keel.Algorithms.Fuzzy_Rule_Learning.Genetic.ClassifierSLAVE2;
import java.io.*;
import java.util.Random;
import org.core.Randomize;
public class populationinteger implements Cloneable {
/**
* <p>
* It contains the methods for handling the integer population of individuals
* </p>
*/
double prob_mutacion;
double prob_cruce;
int elitismo;
int n_individuos;
int[] tamano;
boolean[] modificado;
double[] valoracion;
int rango;
int[][] individuos;
populationinteger (){
prob_mutacion = 0.0;
prob_cruce = 0.0;
elitismo = 0;
n_individuos = 0;
tamano = null;
modificado = null;
valoracion = null;
individuos = null;
rango = 0;
}
populationinteger (int rang, double mut, double cruce, int eli, int n){
prob_mutacion = mut;
prob_cruce = cruce;
elitismo = eli;
n_individuos = n;
rango = rang;
tamano = new int[n_individuos];
for (int i=0; i<n_individuos; i++)
tamano[i] = 0;
modificado = new boolean[n_individuos];
for (int i=0; i<n_individuos; i++)
modificado[i] = true;
valoracion = new double[n_individuos];
individuos = new int[n_individuos][];
for (int i=0; i<n_individuos; i++)
individuos[i] = null;
}
populationinteger (int rang, double mut, double cruce, int eli, int n, int tama){
prob_mutacion = mut;
prob_cruce = cruce;
elitismo = eli;
n_individuos = n;
rango = rang;
tamano= new int[n_individuos];
for (int i=0; i<n_individuos; i++)
tamano[i] = tama;
modificado = new boolean[n_individuos];
for (int i=0; i<n_individuos; i++)
modificado[i] = true;
valoracion = new double[n_individuos];
individuos = new int[n_individuos][];
for (int i=0; i<n_individuos; i++)
individuos[i] = new int[tamano[i]];
}
populationinteger (populationinteger x){
prob_mutacion = x.prob_mutacion;
prob_cruce = x.prob_cruce;
elitismo = x. elitismo;
n_individuos = x.n_individuos;
rango = x.rango;
tamano = new int[n_individuos];
for (int i=0; i<n_individuos; i++)
tamano[i] = x.tamano[i];
modificado= new boolean[n_individuos];
for (int i=0; i<n_individuos; i++)
modificado[i] = x.modificado[i];
valoracion = new double[n_individuos];
for (int i=0; i<n_individuos; i++)
valoracion[i] = x.valoracion[i];
individuos = new int[n_individuos][];
for (int i=0; i<n_individuos; i++) {
if (tamano[i]>0){
individuos[i] = new int[tamano[i]];
for (int j=0; j<tamano[i]; j++)
individuos[i][j] = x.individuos[i][j];
}
}
}
public Object clone(){
populationinteger obj = null;
try{
obj = (populationinteger) super.clone();
}catch (CloneNotSupportedException ex){
System.out.println ("\nNo se puede duplicar el objeto.\n");
}
obj.tamano = (int[]) obj.tamano.clone();
obj.modificado = (boolean[]) obj.modificado.clone();
obj.valoracion = (double[]) obj.valoracion.clone();
obj.individuos = (int[][]) obj.individuos.clone();
for (int i=0; i<obj.individuos.length; i++){
obj.individuos[i] = (int[]) obj.individuos[i].clone();
}
return obj;
}
public int[] Individual (int i, Int_t tama){
tama.value = tamano[i];
return individuos[i];
}
public boolean Modified (int i){
return modificado[i];
}
public void Pass (int i, populationinteger x, int j){
tamano[i] = x.tamano[i];
individuos[i] = new int[tamano[i]];
for (int k=0; k<tamano[i]; k++)
individuos[i][k] = x.individuos[j][k];
}
public void Swap (int i, int j){
Swap_int (tamano, i, j);
Swap_bool (modificado, i, j);
Swap_double (valoracion, i, j);
int[] p = individuos[i];
individuos[i] = individuos[j];
individuos[j] = p;
}
public void Swap_int (int[] v, int i, int j){
int aux = v[i];
v[i] = v[j];
v[j] = aux;
}
public void Swap_double (double[] v, int i, int j){
double aux = v[i];
v[i] = v[j];
v[j] = aux;
}
public void Swap_bool (boolean[] v, int i, int j){
boolean aux = v[i];
v[i] = v[j];
v[j] = aux;
}
public int[] Code (int i, int[] vector, int pos){
vector[pos] = tamano[i];
int[] v = new int[vector[pos]];
for (int j=0; j<vector[pos]; j++)
v[j] = individuos[i][j];
return v;
}
public void Sort (){
for (int i=0; i<n_individuos-1; i++){
for (int j=n_individuos-1; j>i; j--){
if (valoracion[j]>valoracion[j-1])
Swap(j, j-1);
}
}
}
public void Paint (int i){
for (int j=0; j<tamano[i]; j++)
System.out.println (individuos[i][j]+" ");
System.out.println ("\n");
}
public void PaintFitness (int i){
System.out.println ("Fitness: "+valoracion[i]+"\n");
}
public void PaintInFile (int i) throws IOException{
FileOutputStream f;
String cadena;
try {
f = new FileOutputStream("slave.log");
} catch(FileNotFoundException e) {
System.out.println("No se pudo crear.\n");
return;
}
for (int j=0; j<tamano[i]; j++){
cadena = ""+individuos[i][j]+" ";
byte[] buf = cadena.getBytes();
f.write(buf);
}
cadena = "\n";
byte[] buf = cadena.getBytes();
f.write(buf);
f.close();
}
public void PaintFitnessInFile (int i) throws IOException{
FileOutputStream f;
String cadena;
try {
f = new FileOutputStream("slave.log");
} catch(FileNotFoundException e) {
System.out.println("No se pudo crear.\n");
return;
}
cadena = "Fitness: "+valoracion[i]+"\n";
byte[] buf = cadena.getBytes();
f.write(buf);
f.close();
}
public void PutValue (int indiv, int bit, int value){
individuos[indiv][bit] = value;
}
public int GetValue (int indiv, int bit){
return individuos[indiv][bit];
}
}