Red de conocimiento informático - Conocimiento del nombre de dominio - Un programa Java para búsqueda urgente de algoritmos genéticos

Un programa Java para búsqueda urgente de algoritmos genéticos

Importar Java. .swing.jbutton;

Importar javax.jframe;

Importar javax.jlabel; >

Importar javax.swing.jscrollpane;

Importar javax.swing.jtextarea;

Importar javax.swing.jtextfield;

/**

*Escrito por Lai Zhihuan

*Función de solución de algoritmo genético estándar

*Fecha de redacción: 2007-12-2

*/

Mejor clase {

Generación cruzada pública; //Mejor código de aptitud

Cadena pública str //Mejor cromosoma

Doble aptitud pública ; //Mejor valor de fitness

}

Clase pública SGAFrame extiende JFrame {

Private JTextArea textArea

Cadena privada str =

Privado Mejor mejor = null//Mejor cromosoma

Cadena privada”);

label_1.setBounds(92, 10, 84, 15);

getContentPane().add(label_1);

botón JButton final = nuevo JButton();

button.addActionListener(nuevo ActionListener() {

Operación pública no válida ejecutada (evento de operación final e) {

Marco SGA s = nuevo marco SGA();

str = str+s proceso()+" \ n ". ;

textarea . settext(str);

}

});

Botón .setText("Encontrar el valor mínimo"

botón.setBounds(323, 27, 99, 23);

getContentPane(); Add(button);

final JLabel label_2 = new JLabel();

Label_2.setText("Utilice el algoritmo genético estándar para resolver la función f(x)=(x-5) *(x-5):");

label_2.setBounds(23, 31, 318, 15);

getContentPane(). add(label_2);

Panel JPanel final = nuevo JPanel();

panel establecer diseño(nuevo BorderLayout());

panel. 23, 65, 399, 164);

getContentPane().

add(panel);

panel de desplazamiento final JScrollPane = new JScrollPane();

panel.add(scrollPane, BorderLayout.

centro);

textArea = new JTextArea();

panel de desplazamiento setviewportview(textArea);

//

}

/**

*Inicializar un cromosoma (representado por una cadena binaria)

* @Devolver un cromosoma

*/

Cadena privada inialPop() {

Cadena res =

for(int I = 0;i<gene;i++) {

if(matemáticas .aleatorio()> 0.5) {

RES+= " 0 "

} En caso contrario {

RES+= " 1 "; p>}

}

Devolver res

}

/**

*Inicializar un conjunto de cromosomas

* @Return genome

*/

Cadena privada[] inialPops() {

Cadena[ ] ipop = nueva cadena [10];

for(int I = 0;i<10;i++) {

ipop[I]= inialPop();

}

Volver a ipop

}

/**

*El cromosoma se convierte al valor de x

* @param str cromosoma

* @return valor de aptitud del cromosoma

*/

privado doble cálculo del valor de aptitud (cadena str) {

int b = Integer.parseInt(str, 2);

//String str 1 = " "+"/n ";

doble x =- 255+b *(255 -(-255))/(math . pow(2, GENE)-1);

//system out . println(" X = "+X);

Doble aptitud=-(x-5)*(x-5);

//system out . /cadena 1 = cadena 1+" X = "+X+"/n "

//+ "f(x)=" +"Fitness"+"/ n ";

//textarea . settext(str 1);

Volver a fitness;

}

/**

*Calcular el valor de aptitud de cada individuo en el grupo;

*Seleccione los individuos que ingresarán a la próxima generación de acuerdo con ciertas reglas determinadas por el valor de aptitud individual;

* /

Private void select() {

double evals[]= new double[10] //Todos los valores de aptitud cromosómica

double p[]= new double[10] ; //Probabilidad de selección de cada cromosoma

double q[]= new double[10]; //Probabilidad acumulativa

Double F = 0 // Suma de valores de aptitud acumulados

for(int I = 0;i<10;i++) {

evals[I]= calcularfitnessvalue(ipop[I]);

if (mejor == null) {

Mejor = new Mejor();

mejor aptitud = evals[I.

];

mejor . generaciones = 0;

mejor . str = ipop[I]; evals[I]>Best.fitness) //Mejor récord.

{

mejor . fitness = evals[I];

mejor.generaciones = gernación

mejor str = ipop[I] ];

}

}

F = F+evals[I] //La suma de los valores de aptitud de todos los cromosomas

}

for(int I = 0;i<10;i++) {

p[I]= evals[I]/F;

si ( i == 0)

q[I]= p[I];

En caso contrario {

q[I]= q[I-1] + p[I];

}

}

for(int I = 0;i<10;i++) {

doble r = matemáticas . aleatorio();

if(r & lt; = q[0]) {

ipop[I]= ipop[0];

} En caso contrario {

for(int j = 1; j & lt10;j++) {

if(r & lt; q[j]) {

ipop[I]= ipop[j];

Romper;

}

}

}

}

}

/**

*Operación cruzada

*La tasa de cruce es del 25%, con un promedio de 25 % de cruce de cromosomas.

*/

Intersección vacía privada(){

Cadena temp1, temp2

for(int I = 0; i& lt10; i++) {

if(math. random()& lt; 0.25) {

doble r = math. random()

int pos =( int)(math. round(r * 1000))% GEN;

if (pos == 0) {

pos = 1;

}

temp1 = ipop[i]. subcadena(0, posición)

+ ipop[(i + 1) % 10]. Subcadena (pos);

temp 2 = ipop[(I+1)% 10]. subcadena(0, posición)

+ ipop[i].

Subcadena (pos);

ipop[I]= temp 1;

ipop[(I+1)/10]= temp 2;

}

}

}

/**

*Operación de mutación genética

* 1% mutación genética M * POP _ TAMAÑO * * 180 genes Para que cada gen tenga la misma probabilidad de mutación,

*necesita producir una distribución uniforme en [1-180]

*/.

Mutación de vacío privado(){

for(int I = 0;i<4;i++) {

int num =(int)(matemática. aleatorio( )* GEN * 11);

int cromosomaNum =(int)(num/GENO)+1; //Número de cromosomas

int mutaciónNum = num -(cromosoma Número - 1) *gen; //número de gen

if (número de mutación == 0)

número de mutación = 1;

Número de cromosomas = número de cromosomas - 1;

if (número de cromosoma>= 10)

Número de cromosoma = 9;

//System.out.println("antes de la mutación" +ipop[ cromosomaNum]);

Temperatura de cadena;

if (ipop[cromosomaNum].charAt(mutación num-1)= = ' 0 '){

if (mutaciónNum == 1) {

temp = " 1 "+ipop[cromosomaNum]. Cadena secundaria

(número de mutación);

}de lo contrario{

if (mutationNum!=gene){

temp = ipop[ número de cromosomas]. Subcadena (0, número de mutación-

1) + "1" + ipop

[cromosoma]. subcadena(mutaciónNum);

}else {

temp = ipop[cromosomaNum]. subcadena(0, mutación-

1) + "1";

}

}

}else {

if (mutaciónNum == 1) {

temp = "0" + ipop[cromosomaNum]. Cadena secundaria

(número de mutación);

}de lo contrario{

if (mutationNum!=gene){

temp = ipop[ número de cromosomas]. Subcadena (0, número de mutación-

1) + "0" + ipop

[cromosoma]. subcadena(mutaciónNum);

}else {

temp = ipop[cromosomaNum].

Subcadena(0, variación-

1) + "1";

}

}

}

ipop[número de cromosoma]=temp;

//System.out.println("Después de la mutación"+ipop[número de cromosoma]);

}

}

/**

*Implementación de algoritmo genético

*/

Proceso de cadena pública(){

String str =

for(int I = 0;i<10000;i++) {

this select();

this cross();

esta . mutación();

ger nación = I;

}

Str = "mínimo "+mejor.fitness+" , el cromosoma de "+mejores.generaciones+";

devuelve una cadena;

}

}