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
}