Anda di halaman 1dari 24

AlgoSemut :

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;

public class AlgoSemut extends JFrame {


//deklarasi variabel / atribut yang digunakan
private String[][] tabulist = new String[1000][1000];
private String[][] jaraklist = new String[1000][1000];
private String[][] status = new String[1000][1000];
private String[][] jarakantartitik = new String[1000][1000];
private String[][] semjarakantartitik = new String[1000][1000];
private Vector daftartitik=new Vector();
public int nomortitik=1;
private Color warna;
private int jumlahsemut;
private int x,y;
private int jumlahsiklus;
private int jumlahtitik;
private int jumlahjalur=0;
private float inptij;
private String inptitikawal;
private Image OffImage;
private Color BGColor = new Color(230,230,230);
private titik titikcari,titik1,titik2;
Container c= getContentPane();

int semx1=0;
int semy1=0;
int semx2=0;
int semy2=0;

/** Konstruktor class Algo semut


*/
//pemberian nilaiawaluntuk variabelyang dipakai
public AlgoSemut() {
initComponents();
for (int j=0;j<1000;j++) {
for (int k=0;k<1000;k++) {
semjarakantartitik[j][k]="0";
jarakantartitik[j][k]="0";
}
}
}

/** Digunakan untuk mendeteksi kejadian saat mouse di click


@param e event pad amouse
*/
private void thisMouseClicked(MouseEvent e) { //deteksi kejadian mouseclick pada
form utama
//cari koordaniat di vektor list kota
boolean ketemu=false;
int tmpx=e.getX();
int tmpy=e.getY();
int lokasi=0;
//ketemu=false;
if (tmpx>125 && tmpx<735 && tmpy>70 && tmpy<450) { //deteksi apakah
clickpada region peta
for (int i=0;i<daftartitik.size();i++){
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 && lblStatus.getText().equals("Menggambar
Titik")){
titik titikbaru=new titik(tmpx,tmpy,nomortitik);
nomortitik++;
daftartitik.addElement(titikbaru);
}
//jika ketemu maka hapus titik itu
if (ketemu && lblStatus.getText().equals("Menggambar Titik")){
for (int j=0;j<jumlahjalur;j++){
semjarakantartitik[titikcari.nomor][j]="0";
semjarakantartitik[j][titikcari.nomor]="0";
}
daftartitik.removeElementAt(lokasi);
}
//jika aktif dan berstatus menambah jalur maka menambah jalur antar
titik
if (ketemu && lblStatus.getText().equals("Menggambar Jalur")){
titik1=(titik)daftartitik.elementAt(lokasi);
if (tfTitikSem.getText().equals("")){
tfTitikSem.setText(""+lokasi);
}
else
{

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..

/** Digunakan untuk menggambar form


@ param g
*/
public void paint(Graphics g) {
tfJumlahTitik.setText(""+(daftartitik.size()));
g.setColor(BGColor);
g.fillRect(135,75,610,380); //menggambar region peta
for (int i=0;i<daftartitik.size();i++)//menggambar semua titik
{
titikcari=(titik)daftartitik.elementAt(i);
x=titikcari.x;
y=titikcari.y;
g.setColor(Color.BLUE);
g.fillOval(x, y, 10, 10);
g.drawString(""+titikcari.nomor,x+12,y+12);
cmbTitikAsal.addItem(""+titikcari.nomor);
cmbTitikTujuan.addItem(""+titikcari.nomor);

}
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 saat mouse di gerakkan


@param kejadian pada mouse
*/
private void thisMouseMoved(MouseEvent e) {
jumlahtitik=daftartitik.size();
tfX.setText(""+e.getX());
tfY.setText(""+e.getY());
}
/** Digunakan untuk aksi pada button load
@param e event saat button di tekan
*/
private void btLoadActionPerformed(ActionEvent e) {

FileChoicer SimpanData= new FileChoicer();


SimpanData.show();
File f= new File(SimpanData.namaFullFile);
try{
FileReader fr = new FileReader(f);
BufferedReader fin=new BufferedReader(fr);
tfJumlahSiklus.setText(fin.readLine());
tfJumlahSemut.setText(fin.readLine());
tfNilaiAlfa.setText(fin.readLine());
tfNilaiBeta.setText(fin.readLine());
tfNilaiQ.setText(fin.readLine());
tfNilaiRho.setText(fin.readLine());
tfNilaiTij.setText(fin.readLine());
tfJumlahTitik.setText(fin.readLine());
nomortitik=Integer.valueOf(fin.readLine()).intValue();
int jumlahtitik=Integer.valueOf(tfJumlahTitik.getText()).intValue();
for (int i=0;i<jumlahtitik;i++) //meload semua titik
{
int nomortitik=Integer.valueOf(fin.readLine()).intValue();
int tmpx=Integer.valueOf(fin.readLine()).intValue();
int tmpy=Integer.valueOf(fin.readLine()).intValue();
titik titikbaru=new titik(tmpx,tmpy,nomortitik);
daftartitik.addElement(titikbaru);
}
for (int j=1;j<100;j++) {
for (int k=1;k<100;k++) {
// semjarakantartitik[j][k]=fin.readLine();
System.out.print(fin.readLine());
}
}
try{
fin.close();
fr.close();
}
catch(IOException ex1){
JOptionPane.showMessageDialog(this.getContentPane(),"File
tidak bisa ditutup");
}
}
catch(IOException ex2){
JOptionPane.showMessageDialog(this.getContentPane(),"File tidak
bisa dibuka");
}
repaint();
SimpanData.setVisible(false);

}
/** 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 angka random jumlah tiitik


int prob=20;
if (tfJumlahTitik.getText().equals("")) {
Random rand = new Random();
prob = (int) (20 * rand.nextDouble());
}
else
{
prob=Integer.valueOf(tfJumlahTitik.getText()).intValue();
}

//bangkitkan titik titik


jumlahtitik=0;
nomortitik=1;
while (jumlahtitik<=prob) {
Random rand1 = new Random();
int tmpx = (int) (735 * rand1.nextDouble());
Random rand2 = new Random();
int tmpy = (int) (450 * rand2.nextDouble());
if (tmpx>125 && tmpx<735 && tmpy>70 && tmpy<450) { //deteksi apakah
clickpada region peta
boolean ketemu=false;
for (int i=0;i<daftartitik.size();i++){
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
}
}// end for

//jika tidak ketemu dan maka menggambar titik


if (ketemu==false){
titik titikbaru=new titik(tmpx,tmpy,nomortitik);
daftartitik.addElement(titikbaru);
nomortitik++;
jumlahtitik++;
} //end if
} //end if
}//end while

//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
*/

private void btSaveActionPerformed(ActionEvent e) {


if (CekIsian()) {
FileChooser SimpanData= new FileChooser();
SimpanData.show();
File f= new File(SimpanData.namaFullFile);
try{
FileWriter fw = new FileWriter(f);
PrintWriter fout=new PrintWriter(fw);
fout.println(tfJumlahSiklus.getText());
fout.println(tfJumlahSemut.getText());
fout.println(tfNilaiAlfa.getText());
fout.println(tfNilaiBeta.getText());
fout.println(tfNilaiQ.getText());
fout.println(tfNilaiRho.getText());
fout.println(tfNilaiTij.getText());
fout.println(tfJumlahTitik.getText());
fout.println(""+nomortitik);
for (int i=0;i<daftartitik.size();i++) //menyimpan semua titik
{
titikcari=(titik)daftartitik.elementAt(i);
fout.println(""+titikcari.nomor);
fout.println(""+titikcari.x);
fout.println(""+titikcari.y);
}
for (int j=1;j<100;j++) { //menyimpan semua jalur
for (int k=1;k<100;k++) {
fout.println(semjarakantartitik[j][k]);
}
}
fout.flush();
fout.close();
try{
fw.close();
}
catch(IOException ex1){
JOptionPane.showMessageDialog(this.getContentPane(),"File
tidak bisa ditutup");
}
}
catch(IOException ex2){
JOptionPane.showMessageDialog(this.getContentPane(),"File tidak
bisa dibuka");
}
SimpanData.setVisible(false);

}
}
/** Digunakan untuk mendeteksi kejadian saat tombol clear ditekan
@param e event pada tombol clear
*/

private void btClearActionPerformed(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";
}
}
rptHasil.setText("");
daftartitik.removeAllElements();
repaint();

/** Digunakan untuk mendeteksi kejadian saat tombol titik ditekan


@param e event pada tombol titik
*/
private void btTitikActionPerformed(ActionEvent e) {
// TODO add your code here
}

/** Digunakan untuk mendeteksi kejadian saat tombol jalur ditekan


@param e event pada tombol jalur
*/
private void btJalurActionPerformed(ActionEvent e) {
// TODO add your code here
}
/** Digunakan untuk mendeteksi kejadian saat tombol hapus jalur ditekan
@param e event pada tombol hapus jalur
*/
private void tbHapusJalurActionPerformed(ActionEvent e) {
// TODO add your code here
}

/** Digunakan untuk mendeteksi kejadian saat tombol proses ditekan


@param e event pada tombol proses
*/

private void btProsesActionPerformed(ActionEvent e) {


if (CekIsian()) {
jumlahsiklus = Integer.valueOf(tfJumlahSiklus.getText()).intValue();
jumlahsemut = Integer.valueOf(tfJumlahSemut.getText()).intValue();
float TijPakai=Float.valueOf(tfNilaiTij.getText()).floatValue();
float himpunDTij=0;
BacaJarak(); //baca tabel jarak berbentuk matriks jarak dari peta
for (int i=1;i<=jumlahsiklus;i++){
himpunDTij=0;
for (int j=1;j<=jumlahsemut;j++) {
Semut ant=new Semut(jarakantartitik,jumlahtitik);
ant.setNomor(""+j);
ant.setTij(TijPakai);
ant.setTitikAwal((String)cmbTitikAsal.getSelectedItem());
ant.setTitikAkhir((String)cmbTitikTujuan.getSelectedItem());
ant.setQ(Float.valueOf(tfNilaiQ.getText()).floatValue());

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"))) {

System.out.println("Titik "+ant.getJarak(l,0)+" ke "+ant.getJarak(0,k)+" =


"+jarak+"\n");
}
}
}
}
himpunDTij=himpunDTij+(ant.getQ()/ant.getJarakTerdekat());
}
//hitung Tij yang baru dari hasil komputasi siklus sebelumnya

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
*/

private void initComponents() {


// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-
BEGIN:initComponents
// Generated using JFormDesigner Open Source Project license - unknown
pnlheader = new JPanel();
pnlParameter = new JPanel();
pnlTitikPeta = new JPanel();
pnlhasil = new JPanel();
pnlMenggambarObjekPeta = new JPanel();
pnltitikkoord = new JPanel();
pnlkomputasi = new JPanel();

tfJumlahSiklus = new JTextField();


tfJumlahSemut = new JTextField();
tfNilaiAlfa = new JTextField();
tfNilaiBeta = new JTextField();
tfNilaiQ = new JTextField();
tfNilaiRho = new JTextField();
tfNilaiTij = new JTextField();
tfJumlahTitik = new JTextField();
tfTitikSem = new JTextField();
tfX = new JTextField();
tfY = new JTextField();
tfX2 = new JTextField();
tfY2 = new JTextField();

lbljudul = new JLabel();


lbljmlsiklus = new JLabel();
lbljmlsemut = new JLabel();
lblnalfa = new JLabel();
lblnbeta = new JLabel();
lbltij = new JLabel();
lblrho = new JLabel();
lblq = new JLabel();
lbljmltitik = new JLabel();
label6 = new JLabel();
label10 = new JLabel();
lblStatus = new JLabel();
label12 = new JLabel();
label15 = new JLabel();
label13 = new JLabel();
label14 = new JLabel();

btTitik = new JButton();


btJalur = new JButton();
btProses = new JButton();
btLoad = new JButton();
btRandom = new JButton();
btSave = new JButton();
btClear = new JButton();
tbGbrTitik = new JButton();
btSelesai = new JButton();

scrollPane1 = new JScrollPane();

rptHasil = new JTextArea();

cmbTitikAsal = new JComboBox();


cmbTitikTujuan = new JComboBox();

//======== this ========


setTitle(".:Aplikasi Jalur Terpendek dengan Algoritma Semut:.");
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
thisMouseClicked(e);
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
thisMouseMoved(e);
}
});
Container contentPane = getContentPane();
contentPane.setLayout(null);

//======== panel1 ========


{
pnlheader.setBorder(new BevelBorder(BevelBorder.RAISED));
pnlheader.setBackground(new Color(153, 153, 255));
pnlheader.setLayout(null);

//---- label1 ----


lbljudul.setText("Aplikasi Jalur Terpendek dengan Algoritma
Semut");
lbljudul.setHorizontalAlignment(SwingConstants.TRAILING);
lbljudul.setFont(new Font("Tahoma", Font.BOLD, 20));
pnlheader.add(lbljudul);
lbljudul.setBounds(new Rectangle(new Point(100, 10),
lbljudul.getPreferredSize()));

{ // compute preferred size


Dimension preferredSize = new Dimension();
for(int i = 0; i < pnlheader.getComponentCount(); i++) {
Rectangle bounds =
pnlheader.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x +
bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y +
bounds.height, preferredSize.height);
}
Insets insets = pnlheader.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
pnlheader.setMinimumSize(preferredSize);
pnlheader.setPreferredSize(preferredSize);
}
}
contentPane.add(pnlheader);
pnlheader.setBounds(0, 0, 875, 45);

//======== pnlParameter ========


{
pnlParameter.setBorder(new
TitledBorder(LineBorder.createBlackLineBorder(), "Parameter", TitledBorder.LEADING,
TitledBorder.TOP, null, Color.black));
pnlParameter.setBackground(new Color(204, 204, 255));
pnlParameter.setLayout(null);
pnlParameter.add(tfJumlahSiklus);
tfJumlahSiklus.setText("10");
tfJumlahSiklus.setBounds(10, 35, 90, 19);
pnlParameter.add(tfJumlahSemut);
tfJumlahSemut.setText("30");
tfJumlahSemut.setBounds(10, 75, 90, 19);
pnlParameter.add(tfNilaiAlfa);
tfNilaiAlfa.setText("1");
tfNilaiAlfa.setBounds(10, 115, 90, 19);
pnlParameter.add(tfNilaiBeta);
tfNilaiBeta.setText("1");
tfNilaiBeta.setBounds(10, 155, 90, 19);
pnlParameter.add(tfNilaiQ);
tfNilaiQ.setText("1");
tfNilaiQ.setBounds(10, 195, 90, 19);
pnlParameter.add(tfNilaiRho);
tfNilaiRho.setText("0.1");
tfNilaiRho.setBounds(10, 235, 90, 19);
pnlParameter.add(tfNilaiTij);
tfNilaiTij.setText("0.01");
tfNilaiTij.setBounds(10, 275, 90, 19);
pnlParameter.add(tfJumlahTitik);
tfJumlahTitik.setBounds(10, 315, 90, 19);

//---- label jumlah siklus ----


lbljmlsiklus.setText("Jumlah Siklus");
lbljmlsiklus.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlParameter.add(lbljmlsiklus);
lbljmlsiklus.setBounds(10, 20, 92, 14);

//---- label jumlah semut ----


lbljmlsemut.setText("Jumlah Semut");
lbljmlsemut.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlParameter.add(lbljmlsemut);
lbljmlsemut.setBounds(10, 60, 75, 14);

//---- label nilai alfa ----


lblnalfa.setText("Nilai Alfa");
lblnalfa.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlParameter.add(lblnalfa);
lblnalfa.setBounds(10, 100, 50, 14);

//---- label nilai beta ----


lblnbeta.setText("Nilai Beta");
lblnbeta.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlParameter.add(lblnbeta);
lblnbeta.setBounds(10, 140, 50, 14);

//---- label tij ----


lbltij.setText("Nilai Tij");
lbltij.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlParameter.add(lbltij);
lbltij.setBounds(10, 260, 65, 14);

//---- label rho----


lblrho.setText("Nilai Rho");
lblrho.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlParameter.add(lblrho);
lblrho.setBounds(10, 220, 50, 14);

//---- label nilai Q ----


lblq.setText("Nilai Q");
lblq.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlParameter.add(lblq);
lblq.setBounds(10, 180, 50, 14);

//---- label jumlah titik ----


lbljmltitik.setText("Jumlah Titik");
lbljmltitik.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlParameter.add(lbljmltitik);
lbljmltitik.setBounds(10, 300, 65, 14);
//pnlParameter.add(tfTitikSem);
//tfTitikSem.setBounds(10, 340, 90, 19);

{ // compute preferred size


Dimension preferredSize = new Dimension();
for(int i = 0; i < pnlParameter.getComponentCount(); i++) {
Rectangle bounds =
pnlParameter.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x +
bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y +
bounds.height, preferredSize.height);
}
Insets insets = pnlParameter.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
pnlParameter.setMinimumSize(preferredSize);
pnlParameter.setPreferredSize(preferredSize);
}
}
contentPane.add(pnlParameter);
pnlParameter.setBounds(5, 60, 115, 370);

//======== pnlTitikPeta ========


{
pnlTitikPeta.setBorder(new
TitledBorder(LineBorder.createBlackLineBorder(), "Titik Peta",
TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.TOP, null, Color.black));
pnlTitikPeta.setBackground(new Color(204, 204, 255));
pnlTitikPeta.setLayout(null);

//---- btLoad ----


btLoad.setText("Load Peta");
btLoad.setFont(new Font("Tahoma", Font.PLAIN, 9));
btLoad.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btLoadActionPerformed(e);
}
});
pnlTitikPeta.add(btLoad);
btLoad.setBounds(10, 15, 80, 22);

//---- btRandom ----


btRandom.setText("Titik/jalur Random");
btRandom.setFont(new Font("Tahoma", Font.PLAIN, 9));
btRandom.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btRandomActionPerformed(e);
}
});
pnlTitikPeta.add(btRandom);
btRandom.setBounds(180, 15, 125, 22);

//---- btSave ----


btSave.setText("Save Peta");
btSave.setFont(new Font("Tahoma", Font.PLAIN, 9));
btSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btSaveActionPerformed(e);
}
});
pnlTitikPeta.add(btSave);
btSave.setBounds(95, 15, 80, 22);

//---- btClear ----


btClear.setText("Clear Peta/Hasil");
btClear.setFont(new Font("Tahoma", Font.PLAIN, 9));
btClear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btClearActionPerformed(e);
}
});
pnlTitikPeta.add(btClear);
btClear.setBounds(305, 15, 110, 22);

{ // compute preferred size


Dimension preferredSize = new Dimension();
for(int i = 0; i < pnlTitikPeta.getComponentCount(); i++) {
Rectangle bounds =
pnlTitikPeta.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x +
bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y +
bounds.height, preferredSize.height);
}
Insets insets = pnlTitikPeta.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
pnlTitikPeta.setMinimumSize(preferredSize);
pnlTitikPeta.setPreferredSize(preferredSize);
}
}
contentPane.add(pnlTitikPeta);
pnlTitikPeta.setBounds(5, 435, 425, 45);

//======== pnlhasil ========


{
pnlhasil.setBorder(new
TitledBorder(LineBorder.createBlackLineBorder(), "Hasil Komputasi Jalur Terdekat dengan
Algoritma Semut", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.TOP, null,
Color.black));
pnlhasil.setLayout(null);

//======== scrollPane1 ========


{
scrollPane1.setViewportView(rptHasil);
}
pnlhasil.add(scrollPane1);
scrollPane1.setBounds(10, 15, 840, 115);

{ // compute preferred size


Dimension preferredSize = new Dimension();
for(int i = 0; i < pnlhasil.getComponentCount(); i++) {
Rectangle bounds =
pnlhasil.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x +
bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y +
bounds.height, preferredSize.height);
}
Insets insets = pnlhasil.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
pnlhasil.setMinimumSize(preferredSize);
pnlhasil.setPreferredSize(preferredSize);
}
}
contentPane.add(pnlhasil);
pnlhasil.setBounds(5, 485, 860, 135);

//======== pnlMenggambarObjekPeta ========


{
pnlMenggambarObjekPeta.setBorder(new
TitledBorder(LineBorder.createBlackLineBorder(), "Menggambar Objek Langsung Pada Peta",
TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.TOP, null, Color.black));
pnlMenggambarObjekPeta.setBackground(new Color(204, 204, 255));
pnlMenggambarObjekPeta.setLayout(null);

//---- btTitik ----


btTitik.setText("Titik");
btTitik.setFont(new Font("Tahoma", Font.PLAIN, 9));
btTitik.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btTitikActionPerformed(e);
lblStatus.setText("Menggambar Titik");
}
});
pnlMenggambarObjekPeta.add(btTitik);
btTitik.setBounds(10, 15, 55, 22);

//---- btJalur ----


btJalur.setText("Jalur");
btJalur.setFont(new Font("Tahoma", Font.PLAIN, 9));
btJalur.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btJalurActionPerformed(e);
lblStatus.setText("Menggambar Jalur");
}
});
pnlMenggambarObjekPeta.add(btJalur);
btJalur.setBounds(65, 15, 55, 22);

//---- label6 ----


label6.setText("X :");
label6.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlMenggambarObjekPeta.add(label6);
label6.setBounds(new Rectangle(new Point(215, 20),
label6.getPreferredSize()));
pnlMenggambarObjekPeta.add(tfX);
tfX.setBounds(235, 15, 43, tfX.getPreferredSize().height);

//---- label10 ----


label10.setText("Y :");
label10.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlMenggambarObjekPeta.add(label10);
label10.setBounds(280, 20, 13, 14);
pnlMenggambarObjekPeta.add(tfY);
tfY.setBounds(295, 15, 40, 19);

//---- lblStatus ----


lblStatus.setText("Menggambar Titik");
lblStatus.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlMenggambarObjekPeta.add(lblStatus);
lblStatus.setBounds(125, 15, 85, 20);

{ // compute preferred size


Dimension preferredSize = new Dimension();
for(int i = 0; i <
pnlMenggambarObjekPeta.getComponentCount(); i++) {
Rectangle bounds =
pnlMenggambarObjekPeta.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x +
bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y +
bounds.height, preferredSize.height);
}
Insets insets = pnlMenggambarObjekPeta.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
pnlMenggambarObjekPeta.setMinimumSize(preferredSize);
pnlMenggambarObjekPeta.setPreferredSize(preferredSize);
}
}
contentPane.add(pnlMenggambarObjekPeta);
pnlMenggambarObjekPeta.setBounds(435, 436, 340, 45);

//======== panel3 ========


{
pnltitikkoord.setBorder(new TitledBorder("Titik dg Koordinat"));
pnltitikkoord.setBackground(new Color(204, 204, 255));
pnltitikkoord.setLayout(null);

//---- tbGbrTitik ----


tbGbrTitik.setText("Gambar Titik");
tbGbrTitik.setFont(new Font("Tahoma", Font.PLAIN, 9));
tbGbrTitik.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// tbHapusJalurActionPerformed(e);
boolean ketemu=false;
int tmpx=Integer.valueOf(tfX2.getText()).intValue()
+125;
int tmpy=Integer.valueOf(tfY2.getText()).intValue()
+70;
int lokasi=0;
ketemu=false;
if (tmpx>125 && tmpx<735 && tmpy>70 && tmpy<450)
{ //deteksi apakah clickpada region peta
for (int i=0;i<daftartitik.size();i++){

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);

//---- label12 ----


label12.setText("X :");
label12.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnltitikkoord.add(label12);
label12.setBounds(35, 35, 11, 11);
pnltitikkoord.add(tfY2);
tfY2.setBounds(55, 50, 40, 19);

//---- label15 ----


label15.setText("Y :");
label15.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnltitikkoord.add(label15);
label15.setBounds(35, 55, 13, 14);

{ // compute preferred size


Dimension preferredSize = new Dimension();
for(int i = 0; i < pnltitikkoord.getComponentCount(); i++) {
Rectangle bounds =
pnltitikkoord.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x +
bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y +
bounds.height, preferredSize.height);
}
Insets insets = pnltitikkoord.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
pnltitikkoord.setMinimumSize(preferredSize);
pnltitikkoord.setPreferredSize(preferredSize);
}
}
contentPane.add(pnltitikkoord);
pnltitikkoord.setBounds(740, 180, 125, 110);

//======== pnlkomputasi ========


{
pnlkomputasi.setBorder(new TitledBorder("Proses Komputasi"));
pnlkomputasi.setBackground(new Color(204, 204, 255));
pnlkomputasi.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlkomputasi.setLayout(null);

//---- btProses ----


btProses.setText("Proses...");
btProses.setFont(new Font("Tahoma", Font.PLAIN, 9));
btProses.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btProsesActionPerformed(e);
}
});
pnlkomputasi.add(btProses);
btProses.setBounds(10, 105, 105, 22);

//---- cmbTitikAsal ----


cmbTitikAsal.setFont(new Font("Tahoma", Font.PLAIN, 9));
cmbTitikAsal.setModel(new DefaultComboBoxModel(new String[] {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8"
}));
pnlkomputasi.add(cmbTitikAsal);
cmbTitikAsal.setBounds(10, 33, 105,
cmbTitikAsal.getPreferredSize().height);

//---- cmbTitikTujuan ----


cmbTitikTujuan.setFont(new Font("Tahoma", Font.PLAIN, 9));
cmbTitikTujuan.setModel(new DefaultComboBoxModel(new String[] {
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8"
}));
pnlkomputasi.add(cmbTitikTujuan);
cmbTitikTujuan.setBounds(10, 76, 105,
cmbTitikTujuan.getPreferredSize().height);

//---- label13 ----


label13.setText("Titik Asal");
label13.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlkomputasi.add(label13);
label13.setBounds(new Rectangle(new Point(10, 20),
label13.getPreferredSize()));

//---- label14 ----


label14.setText("Titik Tujuan");
label14.setFont(new Font("Tahoma", Font.PLAIN, 9));
pnlkomputasi.add(label14);
label14.setBounds(new Rectangle(new Point(10, 61),
label14.getPreferredSize()));

{ // compute preferred size


Dimension preferredSize = new Dimension();
for(int i = 0; i < pnlkomputasi.getComponentCount(); i++) {
Rectangle bounds =
pnlkomputasi.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x +
bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y +
bounds.height, preferredSize.height);
}
Insets insets = pnlkomputasi.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
pnlkomputasi.setMinimumSize(preferredSize);
pnlkomputasi.setPreferredSize(preferredSize);
}
}
contentPane.add(pnlkomputasi);
pnlkomputasi.setBounds(740, 295, 125, 135);

//---- btSelesai ----


btSelesai.setText("Selesai");
btSelesai.setFont(new Font("Tahoma", Font.PLAIN, 9));
btSelesai.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btSelesaiActionPerformed(e);
}
});
contentPane.add(btSelesai);
btSelesai.setBounds(780, 440, 80, 40);

{ // compute preferred size


Dimension preferredSize = new Dimension();
for(int i = 0; i < contentPane.getComponentCount(); i++) {
Rectangle bounds = contentPane.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x + bounds.width,
preferredSize.width);
preferredSize.height = Math.max(bounds.y + bounds.height,
preferredSize.height);
}
Insets insets = contentPane.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
contentPane.setMinimumSize(preferredSize);
contentPane.setPreferredSize(preferredSize);
}
pack();
setLocationRelativeTo(null);
// JFormDesigner - End of component initialization //GEN-
END:initComponents
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables


// Generated using JFormDesigner Open Source Project license - unknown
private JPanel pnlheader;
private JPanel pnlParameter;
private JPanel pnlTitikPeta;
private JPanel pnlhasil;
private JPanel pnlMenggambarObjekPeta;
private JPanel pnltitikkoord;
private JPanel pnlkomputasi;

private JTextField tfJumlahSiklus;


private JTextField tfJumlahSemut;
private JTextField tfNilaiAlfa;
private JTextField tfNilaiBeta;
private JTextField tfNilaiQ;
private JTextField tfNilaiRho;
private JTextField tfNilaiTij;
private JTextField tfJumlahTitik;
private JTextField tfTitikSem;
private JTextField tfX;
private JTextField tfY;
private JTextField tfX2;
private JTextField tfY2;

private JLabel lbljudul;


private JLabel lbljmlsiklus;
private JLabel lbljmlsemut;
private JLabel lblnalfa;
private JLabel lblnbeta;
private JLabel lbltij;
private JLabel lblrho;
private JLabel lblq;
private JLabel lbljmltitik;
private JLabel label6;
private JLabel label10;
private JLabel lblStatus;
private JLabel label13;
private JLabel label14;
private JLabel label15;
private JLabel label12;

private JButton btLoad;


private JButton btRandom;
private JButton btSave;
private JButton btClear;
private JButton btTitik;
private JButton btJalur;
private JButton btProses;
private JButton btSelesai;
private JButton tbGbrTitik;

private JScrollPane scrollPane1;


private JTextArea rptHasil;

private JComboBox cmbTitikAsal;


private JComboBox cmbTitikTujuan;

// JFormDesigner - End of variables declaration //GEN-END:variables

public static void main(String[] args) {


AlgoSemut frame = new AlgoSemut();
frame.setVisible(true);
} // end of main method

FileChoicer
import javax.swing.*;
import java.io.*;
import java.io.File;
import java.awt.*;
import java.awt.event.*;

public class FileChoicer extends JFrame {


private JFileChooser fChoicer;
private File f;
public String namaFullFile;
private int pilihan;
Container c;

/** Konstruktor class FileChoicer


*/
public FileChoicer() { // hampir semua statement ada di constructor
super("Pilih file untuk dibuka");
c = getContentPane();
fChoicer = new JFileChooser();
pilihan = fChoicer.showOpenDialog(c);
if (pilihan == JFileChooser.APPROVE_OPTION) {
f = fChoicer.getSelectedFile();
namaFullFile = f.getAbsolutePath();
// JOptionPane.showMessageDialog(c,"Anda telah memilih
file \""+namaFullFile+"\"");
}
else {
// JOptionPane.showMessageDialog(c,"Anda tidak memilih file apa pun!");
}
this.setVisible(false);
}
}

FileChooser
import javax.swing.*;
import java.io.*;
import java.io.File;
import java.awt.*;
import java.awt.event.*;

public class FileChooser extends JFrame {


private JFileChooser fChooser;
private File f;
public String namaFullFile;
private int pilihan;
Container c;

/** Konstruktor dari class FileChooser


*/
public FileChooser() { // hampir semua statement ada di constructor
super("Tentukan nama file dan folder untuk penyimpanan");
c = getContentPane();
fChooser = new JFileChooser();
pilihan = fChooser.showSaveDialog(c);
if (pilihan == JFileChooser.APPROVE_OPTION) {
f = fChooser.getSelectedFile();
namaFullFile = f.getAbsolutePath();
// JOptionPane.showMessageDialog(c,"Anda telah memilih
file \""+namaFullFile+"\"");
}
else {
// JOptionPane.showMessageDialog(c,"Anda tidak memilih file apa pun!");
}
this.setVisible(false);
}
}

Semut :
import java.util.Random;

public class Semut{


private String nomor;
private float tij;
private String titikawal;
private String titikakhir;
private float q;
private float alfa;
private float beta;
private String[][] jarak = new String[1000][1000];
private String[][] prob = new String[1000][1000];
private String jalur;
private float jarakterdekat;
private int jmltitik;
private String status="gagal";

/** merupakan konstruktor class semut


@param pdatajarak data jarak titik
@param jumlah titik banyak titik yang diketahui
*/
public Semut(String[][] pdatajarak,int pjmltitik) {
BacaJarak(pdatajarak,pjmltitik);
this.jmltitik=pjmltitik;

} // Akhir Konsutruktor Semut

/** Digunakan untuk membaca jarak dari sejumlah titik


@param datajarak data jarak antar titik
@param jumlahtitik Banyak titik yang diketahui
*/
public void BacaJarak(String[][] datajarak, int jumlahtitik){
for (int j=0;j<=jumlahtitik;j++) {
for (int k=0;k<=jumlahtitik;k++) {
jarak[j][k]=datajarak[j][k];
jarak[k][j]=datajarak[k][j];
prob[j][k]="0";
}
}
} //akhir bacajarak

/** Digunakan untuk mengeset nomor semut


@param pnomor nomor semut
*/
public void setNomor(String pnomor){
this.nomor=pnomor;
}

/** Digunakan untuk mengeset nilai tij


@param tij nilai tij
*/
public void setTij(float pTij){
this.tij=pTij;
}
/** Digunakan untuk mendapatkan nilai tij
*/
public float getTij(){
return tij;
}
/** Digunakan untuk mengeset titik awal
@param TitikAwal titik awal perjalanan semut
*/
public void setTitikAwal(String pTitikAwal){
this.titikawal=pTitikAwal;
}

/** Digunakan untuk mengeset titik akhir


@param TitikAkhir titk akhir perjalanan semut
*/

public void setTitikAkhir(String pTitikAkhir){


this.titikakhir=pTitikAkhir;
}

/** Digunakan untuk mengeset nilai Q


@param pQ nilai Q
*/
public void setQ(float pQ){
this.q=pQ;
}

/** Digunakan untuk mendapatkan nilai Q


*/
public float getQ(){
return q;
}

/** Digunakan untuk mengeset nilai alfa


@param pAlfa nilai alpha
*/

public void setAlfa(float pAlfa){


this.alfa=pAlfa;
}

/** Digunakan untuk mengeset nilai beta


@param pBeta
*/
public void setBeta(float pBeta){
this.beta=pBeta;
}

/** Digunakan untuk melakukan proses komputasi*/

public void Hitung() {


//inisialisasi variabel perhitungan
jalur=this.titikawal;
jarakterdekat=0;
boolean masih=true;
String titikmulai=this.titikawal;
double bawah=0;
int jumkotaberikut=0;
float terdekat=0;
String kota="";
float jaraknya=0;

//simpan titikawal ke jalur


int posisikota=0;

//mencegah titik mulai untuk tidak dikunjungi


for (int j=1;j<=jmltitik;j++) {
if (jarak[0][j].equals(titikmulai)){
for (int k=1;k<=jmltitik;k++) {
jarak[k][j]="100000";
}
}
}

// iterasi perjalanan semut dari titik awal ke titik tujuan


while (masih==true){
jumkotaberikut=0;
bawah=0;
//cari titik awal perjalanan di kolom 0 tabel jarak
for (int i=1;i<=jmltitik;i++) {
if (jarak[i][0].equals(titikmulai)) {
posisikota=i;
for (int j=1;j<=jmltitik;j++) {
if ((!jarak[i][j].equals("0"))&&(!jarak[i]
[j].equals("100000"))){
//menghitung komponen rumus
probabilitas bagian bawah
bawah=bawah+
(Math.pow(tij,alfa)*Math.pow((1/Float.valueOf(jarak[i][j]).floatValue()),beta));
jumkotaberikut++;
}
}
}
}

System.out.println("jmltitik berikut : "+jumkotaberikut);

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]);
}
}

//menentukan angka untuk kota yang hendak dibandingkan dg bi


random
int iter=1;
String angkasebelum="0";
for (int j=1;j<=jmltitik;j++) {
if ((!jarak[posisikota][j].equals("0"))&&(!
jarak[posisikota][j].equals("100000"))){
if (iter>1) {
prob[posisikota][j]=""+
(Float.valueOf(angkasebelum).floatValue()+Float.valueOf(prob[posisikota]
[j]).floatValue());
}
angkasebelum=prob[posisikota][j];
iter++;
System.out.println("angkaprob :
"+prob[posisikota][j]);
}
}

//membangkitkan bilangan random


Random bilrandomsemut=new Random();
double bilrandom=bilrandomsemut.nextDouble();
// System.out.println("Bil
random:"+bilrandomsemut);
//cari selisih bilrandom semut dengan nilai pij
for (int j=1;j<=jmltitik;j++) {
if ((!jarak[posisikota][j].equals("0"))&&(!
jarak[posisikota][j].equals("100000"))){
prob[posisikota][j]=""+
(Float.valueOf(prob[posisikota][j]).floatValue()-bilrandom);
System.out.println("selisih : "+jarak[0][j]+"
adalah "+prob[posisikota][j]);
}
}

//cari titik probabilitas terdekat bilangan random semut


terdekat=100000;
kota=jarak[0][1];
jaraknya=0;
for (int j=1;j<=jmltitik;j++) {
System.out.println("nilaiprob : "+prob[posisikota]
[j]);
float nilaiprob=Float.valueOf(prob[posisikota]
[j]).floatValue();
if ((nilaiprob>0)&&(nilaiprob<terdekat)){
terdekat=nilaiprob;
kota=jarak[0][j];
jaraknya=Float.valueOf(jarak[posisikota]
[j]).floatValue();
}
}

}//
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;

//jika titik terdekat tersebut kota tujuan maka iterasi


berakhir
if (titikmulai.equals(this.titikakhir))
{
masih=false;
status="berhasil";}

jarakterdekat=jarakterdekat+jaraknya;

//melakukan blocking data jarak supaya kota yang sudah


dilalui tidak dikunjungi lagi
for (int j=1;j<=jmltitik;j++) {
if (jarak[0][j].equals(kota)){
for (int k=1;k<=jmltitik;k++) {
jarak[k][j]="100000";
}
}
}

}//akhir if
} //akhir while

}
/** Digunakan untuk mendapatkan jalur
*/
public String getJalur(){
return jalur;
}

/** Digunakan untuk mendapatkan jarak terdekat


*/

public float getJarakTerdekat() {


return jarakterdekat;
}
/** Digunakan untuk mendapatkan status
*/
public String getStatus(){
return status;
}

/** Digunakan untuk mendapatkan jarak


*/

public String getJarak(int asal,int tujuan){


return jarak[asal][tujuan];
}
} // akhir class Semut

Titik :
import java.util.*;

public class titik {


protected int x;
protected int y;
protected int nomor;

/** konstraktor class titik


@param px titik X
@param py titik Y
@param pnomor nomor titik
*/
public titik(int px, int py,int pnomor) {
x=px;
y=py;
nomor=pnomor;
}
}

Anda mungkin juga menyukai