Adam Lipowski




Aplet generuje losowo # osobników (łańcuchów) o długości  równej długości wczytanego tekstu  i wybiera wśród nich  najbardziej  do niego podobny.
Dla łańcuchów  o długości 6 lub większej metoda ta  praktycznie nie jest w stanie znaleźć wczytanego tekstu.
Znalezienie tekstu o długości  n wymaga średnio wygenerowania (26)^n osobników.

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class gen_str extends Applet implements ActionListener {
    TextField pole = new TextField(9);
    TextField ileosob = new TextField(5);
    Label info = new Label("podaj tekst");
    Label info1 = new Label("rozwiazanie=                       ");
    Label label1 = new Label("  podaj # osobnikow   ");
    int nosob;
    byte [] tekstbyte;
    byte [] najlepszy;
    byte [][] popul;
    double [] fit;
    String st_naj;
    public void init(){
       add(label1);
       add(ileosob);
       ileosob.addActionListener(this);
       add(info);     
       add(pole);
       pole.addActionListener(this);
       add(info1);     
    }
    public void actionPerformed(ActionEvent e){
    int l,i,j,ktory;
    double maxfit;
    String st;
    if(e.getSource()==ileosob){
    nosob=Integer.parseInt(ileosob.getText());
    }
    else
    if(e.getSource()==pole){
    st=pole.getText();
    l=st.length();       // metoda zwracająca dlugość stringu (st)
    tekstbyte = new byte[l];
    tekstbyte = st.getBytes();   // metoda rozkładająca string na tablicę tekstbyte (typu: byte [])
    popul=new byte[nosob][l];  
    for(i=0;i<=nosob-1;i++){
        for(j=0;j<=l-1;j++){
          popul[i][j]=(byte)(26.0*Math.random()+97.0);
/*         litery kodowane są jako: a=97, b=98,..., z=122      */
        }
    }
    fit=new double[nosob];
    for(i=0;i<=nosob-1;i++){
        fit[i]=0.0;
        for(j=0;j<=l-1;j++){
          if(popul[i][j]==tekstbyte[j]) fit[i]=fit[i]+1.0;
        }
    }
    maxfit=fit[0];
    ktory=0;
    for(i=1;i<=nosob-1;i++){
        if(fit[i]>maxfit) {maxfit=fit[i];
                           ktory=i;}
    }  
    najlepszy = new byte[l];
    for(i=0;i<=l-1;i++){
       najlepszy[i]=popul[ktory][i];
    }
    st_naj= new String(najlepszy);
    info1.setText("rozwiazanie= "+st_naj);
    }             
    }//end of actionPerformed
}