Last news

RSS Feeds

Contoh Genetic Programming Sederhana

Saya mencoba untuk konversi dari contoh (menggunakan c++):

http://generation5.org/content/2003/gahelloworld.asp

ke dalam bahasa Java. Tapi hasilnya hampir selalu tidak selesai solusinya, artinya sampai batas maksimum iterasinya, solusi tidak terselesaikan. Mungkin ada rekan-rekan yang dapat membantu saya dalam hal ini? Saya masih belum dapat salahnya di mana.

Kode programnya seperti di bawah ini :

import java.util.Collections;
import java.util.Vector;
import java.util.Random;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author budsus
*/
public class GAHelloWorld {

private static final int GA_POPSIZE = 2048;
private static final int GA_MAXITER = 16384;
private static final float GA_ELITRATE = 0.10f;
private static final float GA_MUTATIONRATE = 0.25f;
//private static final int RAND_MAX = 2147483647;
private static final int RAND_MAX = 2147483647;
private static float GA_MUTATION = RAND_MAX * GA_MUTATIONRATE;
private static final String GA_TARGET = "Hello World";
private Vector population = new Vector();
private Vector buffer = new Vector();
private Random randomGenerator;

public GAHelloWorld() {
randomGenerator = new Random();
}

public void init() {
int tsize = GA_TARGET.length();
for (int i = 0; i < GA_POPSIZE; i++) {
GAStruct citizen = new GAStruct();

citizen.setFitness(0);
citizen.setStr("");
buffer.addElement(citizen);

StringBuffer strTmp = new StringBuffer();
for (int j = 0; j < tsize; j++) {
strTmp.append((char)(randomGenerator.nextInt(RAND_MAX) % (90) + 32));
}
citizen.setStr(strTmp.toString());
population.addElement(citizen);
}
}

public void calc_fitness() {
String target = GA_TARGET;
int tsize = target.length();
int fitness;
for (int i = 0; i < GA_POPSIZE; i++) {
fitness = 0;
String str = population.elementAt(i).getStr();
for (int j = 0; j < tsize; j++) {
int popStr = (int)str.charAt(j);
int popTarget = (int)target.charAt(j);
fitness += Math.abs(popStr - popTarget);
}
population.elementAt(i).setFitness(fitness);
}
}

public void sort_by_fitness() {
Collections.sort(population);
}

public void print_by_best() {
System.out.print("Worstest: " + population.lastElement() + ", ");
System.out.println("Best: " + population.elementAt(0));
}

public GAStruct getPop(int i) {
return population.elementAt(i);
}

private void elitism(int esize) {
for (int i = 0; i < esize; i++) {
GAStruct gtmp = new GAStruct();
gtmp.setStr(population.elementAt(i).getStr());
gtmp.setFitness(population.elementAt(i).getFitness());

buffer.setElementAt(gtmp, i);
}
}

private void mutate(GAStruct g) {
int tsize = GA_TARGET.length();
int ipos = randomGenerator.nextInt(RAND_MAX) % (tsize);
int delta = randomGenerator.nextInt(RAND_MAX) % (tsize) + 32;

char[] str = g.getStr().toCharArray();
str[ipos] = (char)((str[ipos] + delta) % 122);
}

public void mate() {
int esize = (int)Math.floor(GA_POPSIZE * GA_ELITRATE);
int tsize = GA_TARGET.length(), spos, i1, i2;

elitism(esize);

// Mate the rest
for (int i = esize; i < GA_POPSIZE; i++) {
i1 = randomGenerator.nextInt(RAND_MAX) % (int)(GA_POPSIZE / 2);
i2 = randomGenerator.nextInt(RAND_MAX) % (int)(GA_POPSIZE / 2);
spos = randomGenerator.nextInt(RAND_MAX) % tsize;

String str1 = population.elementAt(i1).getStr().substring(0, spos);
String str2 = population.elementAt(i2).getStr().substring(spos);
buffer.elementAt(i).setStr( str1 + str2 );

if (randomGenerator.nextInt(RAND_MAX) <= (int)GA_MUTATION) {
mutate(buffer.elementAt(i));
}
}
}

public void swap() {
Vector tmp = new Vector();
tmp = population;
population = buffer;
buffer = tmp;
}

public static void main(String[] args) {
GAHelloWorld ga = new GAHelloWorld();
ga.init();
for (int i = 0; i < GA_MAXITER; i++) {
ga.calc_fitness();
ga.sort_by_fitness();
ga.print_by_best();
if (ga.getPop(0).getFitness() == 0) {
break;
}
ga.mate();
ga.swap();
}
ga = null;
}
}

class GAStruct implements Comparable {

private String str;
private int fitness;

public String getStr() {
return str;
}

public void setStr(String str) {
this.str = str;
}

public int getFitness() {
return fitness;
}

public void setFitness(int fitness) {
this.fitness = fitness;
}

public int compareTo(GAStruct ga) {
return getFitness() - ga.getFitness();
}

public String toString() {
return getStr() + " (" + getFitness() + ")";
}
}

   

Silabus

Semester Genap Tahun Ajaran 2008/2009 segera dimulai. Semester genap ini saya akan mengajar tiga matakuliah:

  • Pemrograman Perangkat Bergerak

  • Basis Data Lanjut

  • Sistem Berbasis Pengetahuan



Sebelum mengambil matakuliah ini, mohon untuk membaca silabus yang dapat didownload di sini.

   

Bahan Sosial Networking

Materi tentang Social Networking Service dapat di download di sini.

   

Class Diagram untuk Database

Silahkan download materi class diagram untuk pemodelan relational database.

Catatan:
Tugas Pemodelan database dengan class diagram dikumpul pada tanggal 9 Desember 2008 paling lambat jam 14.00 WIB dalam bentuk print out di meja saya. Lebih dari jam 14.00 tidak diterima apapun alasannya.

   

Bahan AMTI

Business Intelligent.
Dampak TI bagi Personal, Organisasi, dan Masyarakat.

   

Materi Java Collection

Materi PBO "Java Collection".