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 int int int semx1=0; semy1=0; semx2=0; 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

//

//

//

//

//

//

} /** 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());

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;

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

[j]).floatValue();

jarakterpendek=Float.valueOf(jaraklist[i] 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 //GENBEGIN: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;

} } contentPane.add(pnlMenggambarObjekPeta); pnlMenggambarObjekPeta.setBounds(435, 436, 340, 45);

preferredSize.height += insets.bottom; pnlMenggambarObjekPeta.setMinimumSize(preferredSize); pnlMenggambarObjekPeta.setPreferredSize(preferredSize);

//======== 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() int tmpy=Integer.valueOf(tfY2.getText()).intValue()

// +125; +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); diatas titik yang sudah ada //deteksi apakah ketika di click 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"; [titikcari.nomor]="0"; } 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)); semjarakantartitik[j] } daftartitik.removeElementAt(lokasi);

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",

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

"4", "5", "6", "7", "8"

setLocationRelativeTo(null); // JFormDesigner - End of component initialization //GENEND: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 private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private private JTextField JTextField JTextField JTextField JTextField JTextField JTextField JTextField JTextField JTextField JTextField JTextField JTextField JLabel JLabel JLabel JLabel JLabel JLabel JLabel JLabel JLabel JLabel JLabel JLabel JLabel JLabel JLabel JLabel JButton JButton JButton JButton JButton JButton JButton JButton JButton tfJumlahSiklus; tfJumlahSemut; tfNilaiAlfa; tfNilaiBeta; tfNilaiQ; tfNilaiRho; tfNilaiTij; tfJumlahTitik; tfTitikSem; tfX; tfY; tfX2; tfY2;

lbljudul; lbljmlsiklus; lbljmlsemut; lblnalfa; lblnbeta; lbltij; lblrho; lblq; lbljmltitik; label6; label10; lblStatus; label13; label14; label15; label12; btLoad; btRandom; btSave; btClear; btTitik; btJalur; btProses; btSelesai; tbGbrTitik;

private JScrollPane scrollPane1; private JTextArea rptHasil; private JComboBox cmbTitikAsal; private JComboBox cmbTitikTujuan; // JFormDesigner - End of variables declaration public static void main(String[] args) { AlgoSemut frame = new AlgoSemut(); frame.setVisible(true); //GEN-END:variables

} // end of main method }

FileChoicer
import import import import import javax.swing.*; java.io.*; java.io.File; java.awt.*; 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 import import import import javax.swing.*; java.io.*; java.io.File; java.awt.*; 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]);

[j]); [j]).floatValue();

//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] float nilaiprob=Float.valueOf(prob[posisikota] 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; berakhir //jika titik terdekat tersebut kota tujuan maka iterasi if (titikmulai.equals(this.titikakhir)) { masih=false; status="berhasil";} jarakterdekat=jarakterdekat+jaraknya; dilalui tidak dikunjungi lagi //melakukan blocking data jarak supaya kota yang sudah 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