Antco
Antco
import javax.swing.JFrame;
import java.awt.*; //painting nd image
import java.awt.event.*; //Provides interfaces and classes for dealing with different
types of events fired by AWT components.
import javax.swing.*;
import java.sql.*;
import java.util.Random;
import javax.swing.border.*;
import javax.swing.event.*;
import java.util.*;//array,date,dll
import java.io.*;//input and output
import java.io.File;
int semx1=0;
int semy1=0;
int semx2=0;
int semy2=0;
titik1=(titik)daftartitik.elementAt(Integer.valueOf(tfTitikSem.getText()).intValue());
semx1=titik1.x;
semy1=titik1.y;
int nomor1=titik1.nomor;
System.out.println("jalurnya : "+nomor1);
titik2=(titik)daftartitik.elementAt(lokasi);
semx2=titik2.x;
semy2=titik2.y;
int nomor2=titik2.nomor;
System.out.println("jalurnya : "+nomor2);
semjarakantartitik[nomor1]
[nomor2]=""+Math.pow(Math.pow((semx1-semx2),2)+Math.pow((semy1-semy2),2),0.5);
semjarakantartitik[nomor2]
[nomor1]=semjarakantartitik[nomor1][nomor2];
System.out.println(" berjarak "+semjarakantartitik[nomor1]
[nomor2]);
tfTitikSem.setText("");
jumlahjalur++;
} //else
// System.out.println("itu adalah jalur");
} //if
//menggambar titik dan jalur yang ada dimemory
repaint();
} // end of if (tmpx=....dst
} // akhir dari thismouseclick..
}
for (int j=1;j<100;j++) {
for (int k=1;k<100;k++) {
// System.out.println("masuk");
if (semjarakantartitik[j][k].equals("0"))
{ }
else
{
boolean ketemu1=false;
boolean ketemu2=false;
for (int l=0;l<daftartitik.size();l++)
{
titikcari=(titik)daftartitik.elementAt(l);
if ((titikcari.nomor)==j)
{
semx1=titikcari.x;
semy1=titikcari.y;
ketemu1=true;
}
if ((titikcari.nomor)==k)
{
semx2=titikcari.x;
semy2=titikcari.y;
ketemu2=true;
}
}
if (ketemu1 && ketemu2) {
g.setColor(Color.RED);
g.drawLine(semx1+5,semy1+5,semx2+5,semy2+5);
semx1=0;
semx2=0;
semy1=0;
semy2=0;
}
else
{
semx1=0;
semx2=0;
semy1=0;
semy2=0;
}
}
}
}
} // end of method paint
/** Digunakan untuk mengecek apakah text field nya sudah terisi
*/
private boolean CekIsian() {
boolean status=false;
if (tfJumlahSiklus.getText().equals("")) {
JOptionPane.showMessageDialog(c,"Jumlah siklus masih kosong");
// tfJumlahSiklus.setSelected(true);
} else
if (tfJumlahSemut.getText().equals("")) {
JOptionPane.showMessageDialog(c,"Jumlah semut masih kosong");
// tfJumlahSemut.setSelected(true);
} else
if (tfNilaiAlfa.getText().equals("")) {
JOptionPane.showMessageDialog(c,"Nilai Alfa masih kosong");
// tfNilaiAlfa.setSelected(true);
} else
if (tfNilaiBeta.getText().equals("")) {
JOptionPane.showMessageDialog(c,"Nilai Beta masih kosong");
// tfNilaiBeta.setSelected(true);
} else
if (tfNilaiQ.getText().equals("")) {
JOptionPane.showMessageDialog(c,"Nilai Q masih kosong");
// tfNilaiQ.setSelected(true);
} else
if (tfNilaiRho.getText().equals("")) {
JOptionPane.showMessageDialog(c,"Nilai Rho masih kosong");
// tfNilaiRho.setSelected(true);
} else
if (tfNilaiTij.getText().equals("")) {
JOptionPane.showMessageDialog(c,"Nilai Tij masih kosong");
// tfNilaiTij.setSelected(true);
} else
if (tfJumlahTitik.getText().equals("")) {
JOptionPane.showMessageDialog(c,"Jumlah titik masih kosong");
// tfJumlahTitik.setSelected(true);
} else
{ status=true;
}
return status;
}
/** Digunakan untuk membaca jarak antar titik
*/
public void BacaJarak(){
jumlahtitik=daftartitik.size();
for (int j=0;j<=jumlahtitik;j++) {
for (int k=0;k<=jumlahtitik;k++) {
jarakantartitik[j][k]="0";
jarakantartitik[k][j]="0";
}
}
for (int i=0;i<jumlahtitik;i++)
{
titikcari=(titik)daftartitik.elementAt(i);
int nomor=titikcari.nomor;
jarakantartitik[0][i+1]=""+nomor;
jarakantartitik[i+1][0]=""+nomor;
}
for (int i=1;i<=jumlahtitik;i++)
{
for (int j=1;j<=jumlahtitik;j++)
{
jarakantartitik[i][j]=semjarakantartitik[i][j];
}
}
} //akhir bacajarak
}
/** Digunakan untuk mendeteksi kejadian saat tombol button ditekan
@param e event saat button random ditekan
*/
private void btRandomActionPerformed(ActionEvent e) {
// Hapus semua titik dan jalur
for (int i=0;i<100;i++)
{
for (int j=0;j<100;j++)
{
jarakantartitik[i][j]="0";
semjarakantartitik[i][j]="0";
}
}
daftartitik.removeAllElements();
//set jumlah titik dan jumlah jalur ke 0
//bangkitkan jalur
jumlahjalur=0;
for (int i=0;i<daftartitik.size();i++){
for (int j=0;j<daftartitik.size();j++){
titik1=(titik)daftartitik.elementAt(i);
semx1=titik1.x;
semy1=titik1.y;
int nomor1=titik1.nomor;
titik2=(titik)daftartitik.elementAt(j);
semx2=titik2.x;
semy2=titik2.y;
int nomor2=titik2.nomor;
Random rand1 = new Random();
int gambarjalur = (int) (jumlahtitik * rand1.nextDouble());
if (gambarjalur % 2==1) {
semjarakantartitik[nomor1]
[nomor2]=""+Math.pow(Math.pow((semx1-semx2),2)+Math.pow((semy1-semy2),2),0.5);
semjarakantartitik[nomor2]
[nomor1]=semjarakantartitik[nomor1][nomor2];
jumlahjalur++;
}
semx1=0;
semx2=0;
semy1=0;
semy2=0;
}
}
repaint();
}
/** Digunakan untuk mendeteksi kejadian saat tombol save ditekan
@param e event pada tombol save
*/
}
}
/** Digunakan untuk mendeteksi kejadian saat tombol clear ditekan
@param e event pada tombol clear
*/
ant.setAlfa(Float.valueOf(tfNilaiAlfa.getText()).floatValue());
ant.setBeta(Float.valueOf(tfNilaiBeta.getText()).floatValue());
ant.Hitung();
//memindah jalur yang dilalui semut dan jaraknya ke tabulist
tabulist[i][j]=ant.getJalur();
jaraklist[i][j]=""+ant.getJarakTerdekat();
status[i][j]=""+ant.getStatus();
if ((j==1)&&(i==1)) {
for (int l=1;l<=jumlahtitik;l++) {
for (int k=1;k<=jumlahtitik;k++) {
String jarak=ant.getJarak(l,k);
if ((!jarak.equals("100000"))&&(!
jarak.equals("0"))) {
TijPakai=Float.valueOf(tfNilaiRho.getText()).floatValue()*TijPakai+himpunDTij;
// System.out.println(TijPakai);
}
rptHasil.append("");
rptHasil.setEditable(false);
rptHasil.append("Proses Komputasi Ant Colony\n");
rptHasil.append("Jumlah siklus="+jumlahsiklus+"\n");
rptHasil.append("Jumlah semut="+jumlahsemut+"\n");
rptHasil.append("");
String terpendek=tabulist[1][1];
for (int i=1;i<=jumlahsiklus;i++){
float jarakterpendek=Float.valueOf(jaraklist[i][1]).floatValue();
int semutsukses = 1;
for (int j=1;j<=jumlahsemut;j++) {
//rptHasil.append("Siklus "+i+" Semut no :"+j+"
Jalur :"+tabulist[i][j]+" Jarak :"+jaraklist[i][j]+" ket:"+status[i][j]+"\n");
if ((jarakterpendek>Float.valueOf(jaraklist[i]
[j]).floatValue())&&(status[i][j].equals("berhasil"))) {
jarakterpendek=Float.valueOf(jaraklist[i]
[j]).floatValue();
terpendek=tabulist[i][j];
semutsukses=j;
}
}
rptHasil.append("jalur terpendek siklus "+i+" yaitu : "+terpendek+" sebesar
:"+jarakterpendek+" oleh semut no "+semutsukses+"\n");
}
// String terpendek=tabulist[1][1];
float jarakterpendek=Float.valueOf(jaraklist[1][1]).floatValue();
for (int i=1;i<=jumlahsiklus;i++){
for (int j=1;j<=jumlahsemut;j++) {
if ((jarakterpendek>Float.valueOf(jaraklist[i]
[j]).floatValue())&&(status[i][j].equals("berhasil"))) {
jarakterpendek=Float.valueOf(jaraklist[i]
[j]).floatValue();
terpendek=tabulist[i][j];
}
}
}
rptHasil.append("Jalur terpendek akhir : "+terpendek+"
yaitu :"+jarakterpendek+"\n");
}
}
/**
Fungsi ini digunakan untuk ....
@param e memberikan input action kepada button
*/
private void btSelesaiActionPerformed(ActionEvent e) {
System.exit(0);
}
/** Digunakan untuk menginisialisasi komponen
*/
titikcari=(titik)daftartitik.elementAt(i);
//deteksi apakah ketika di click
diatas titik yang sudah ada
if(tmpx>=titikcari.x-6 &&
tmpx<=titikcari.x+6 && tmpy>=titikcari.y-6 && tmpy<=titikcari.y+6)
{
ketemu=true; //jika diatas
titik yang ada, ketemu=true
lokasi=i;
}
}
//jika tidak ketemu dan maka menggambar titik
if (ketemu==false){
titik titikbaru=new
titik(tmpx,tmpy,nomortitik);
nomortitik++;
daftartitik.addElement(titikbaru);
}
//jika ketemu maka hapus titik itu
if (ketemu){
for (int j=0;j<jumlahjalur;j++){
semjarakantartitik[titikcari.nomor][j]="0";
semjarakantartitik[j]
[titikcari.nomor]="0";
}
daftartitik.removeElementAt(lokasi);
}
repaint();
}
}
});
pnltitikkoord.add(tbGbrTitik);
tbGbrTitik.setBounds(10, 85, 110, 22);
pnltitikkoord.add(tfX2);
tfX2.setBounds(55, 30, 40, 19);
FileChoicer
import javax.swing.*;
import java.io.*;
import java.io.File;
import java.awt.*;
import java.awt.event.*;
FileChooser
import javax.swing.*;
import java.io.*;
import java.io.File;
import java.awt.*;
import java.awt.event.*;
Semut :
import java.util.Random;
if (jumkotaberikut==0) { masih=false; }
else
{
if (jumkotaberikut>1) {
//menghitung probabilitas kota yang dikunjungi semut
for (int j=1;j<=jmltitik;j++) {
if ((!jarak[posisikota][j].equals("0"))&&(!
jarak[posisikota][j].equals("100000"))){
prob[posisikota][j]=""+
(Math.pow(tij,alfa)*Math.pow((1/Float.valueOf(jarak[posisikota]
[j]).floatValue()),beta))/bawah;
System.out.println("prob : "+prob[posisikota]
[j]);
}
}
}//
else
{
for (int j=1;j<=jmltitik;j++) {
if ((!jarak[posisikota][j].equals("0"))&&(!
jarak[posisikota][j].equals("100000"))){
kota=jarak[0][j];
jaraknya=Float.valueOf(jarak[posisikota][j]).floatValue();
}
}
}
//seteah terdekat diketemukan maka dicatat nama titiknya di
variabeljalur
System.out.println("terdekat : "+kota);
jalur=jalur+"->"+kota;
titikmulai=kota;
jarakterdekat=jarakterdekat+jaraknya;
}//akhir if
} //akhir while
}
/** Digunakan untuk mendapatkan jalur
*/
public String getJalur(){
return jalur;
}
Titik :
import java.util.*;