import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class gen_str1 extends Applet
implements ActionListener {
TextField pole =
new TextField(9);
TextField ileosob
= new TextField(5);
TextField ilespij
= new TextField(5);
Button start
= new Button("Start");
Label info = new
Label("podaj tekst");
Label label1 = new
Label(" podaj # osobnikow ");
Label label2 = new
Label(" uspij na (ms) ");
Label wydruk = new
Label(" wydruk
kontrolny
");
int
nosob,l,nosob2,maxfit,dlsnu,pokolenie;
byte [] tekstbyte;
byte [] najlepszy;
byte [][] popul;
int [] fit;
String st_naj;
public void
init(){
add(label2);
add(ilespij);
ilespij.addActionListener(this);
add(label1);
add(ileosob);
ileosob.addActionListener(this);
add(info);
add(pole);
pole.addActionListener(this);
add(start);
start.addActionListener(this);
add(wydruk);
}
public void
actionPerformed(ActionEvent e){
int
i,j,ktory,j1,sor,sor1,k;
String st;
if(e.getSource()==ilespij){dlsnu=Integer.parseInt(ilespij.getText());}
else
if(e.getSource()==ileosob){
nosob=Integer.parseInt(ileosob.getText());
nosob2=nosob/2;
}
else
if(e.getSource()==pole){
st=pole.getText();
l=st.length();
int l1=l-1;
tekstbyte = new
byte[l];
tekstbyte =
st.getBytes();
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);
}
}
fit=new int[nosob];
for(i=0;i<=nosob-1;i++){
fit[i]=0;
for(j=0;j<=l-1;j++){
if(popul[i][j]==tekstbyte[j]) fit[i]=fit[i]+1;
}
}
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);
info.setText(""+st_naj);
}
else{// begin of
start
pokolenie=0;
while(maxfit<l){
pokolenie=pokolenie+1;
int n1=nosob-1;
int[] sort = new int[nosob];
for(i=0;i<=n1;i++){sort[i]=i;}
int n2=n1-1;
for (i=0;i<=n2;i++){
j=i;
j1=j+1;
while((j>=0)&&(fit[sort[j]]<fit[sort[j1]])){
sor=sort[j];
sort[j]=sort[j1];
sort[j1]=sor;
j=j-1;
j1=j+1;
}
}
for(i=0;i<=nosob2-1;i++){
sor=sort[i];
sor1=sort[i+nosob2];
for(j=0;j<=l-1;j++){popul[sor1][j]=popul[sor][j];}
fit[sor1]=fit[sor];
k=(int)(l*Math.random());
byte staryznak=popul[sor1][k];
byte nowyznak=(byte)(26.0*Math.random()+97.0);
popul[sor1][k]=nowyznak;
if((staryznak==tekstbyte[k])&&(nowyznak!=tekstbyte[k])){fit[sor1]=fit[sor1]-1;}
else
if((staryznak!=tekstbyte[k])&&(nowyznak==tekstbyte[k])){fit[sor1]=fit[sor1]+1;}
}
maxfit=fit[0];
ktory=0;
for(i=1;i<=nosob-1;i++){
if(fit[i]>maxfit) {maxfit=fit[i];
ktory=i;}
}
for(i=0;i<=l-1;i++){
najlepszy[i]=popul[ktory][i];
}
st_naj= new
String(najlepszy);
try{Thread.sleep(dlsnu);} catch(InterruptedException t){}
wydruk.setText("generation="+pokolenie+", "+st_naj+", fitness="+maxfit);
}
}//end of start
}//end of
actionPerformed
}