least cost program
DESCRIPTION
least cost progamTRANSCRIPT
RISET OPERASIPROGRAM APLIKASI BIAYA TERKECIL
Kelompok 5I Wayan Aditya Setiawan
1208605057
Ni Luh Putu Ratna Sri Andi Yani
1208605061PROGRAM STUDI TEKNIK INFORMATIKA
JURUSANILMUKOMPUTER
FAKULTASMATEMATIKADANILMUPENGETAHUANALAM
UNIVERSITASUDAYANABUKIT JIMBARAN
2014Metode TransportasiPada umumnya masalah transportasi berhubungan dengan distribusi suatu produk tunggal dari beberapa sumber, dengan penawaran terbatas, menuju beberapa tujuan, dengan permintaan tertentu, pada biaya transport minimum. Karena hanya ada satu macam barang, suatu tempat tujuan dapat memenuhi permintaanya dari satu atau lebih sumber. Asumsi dasar model ini adalah bahwa biaya transport pada suatu rute tertentu proporsional dengan banyaknya unit yang dikirimkan. Unit yang dikirimkan sangat tergantung pada jenis produk yang diangkut. Yang penting, satuan penawaran dan permintaan akan barang yang diangkut harus konsisten. Ada beberapa metode yang digunakan dalam metode transportasi, yaitu :
1. Metode North West Corner
2. Metode Biaya Terkecil
3. Metode Aproksimasi Vogel
Namun pada pembahasaan laporan ini kami hanya menggunakan metode transportasi biaya terkecil pada pembuatan program aplikasi ini.
Metode Transportasi Biaya TerkecilLangkah-langkahnya adalah mengisi sel yang masih dapat diisi dengan biaya yang paling kecil. Jumlah yang dialokasikan pada sel kosong tidak boleh melebihi jumlah suplai pada supply dan demand. Contoh kasusnya:Sebuah perusahaan berkepentingan mengangkut beras dari tiga pabrik ke tiga pasar. Kapasitas penawaran ketiga pabrik, permintaan pada ketiga pasar dan biaya transport perunit adalah sebagai berikut:PasarPenawaran
123
Pabrik1856120
215101280
3391080
Permintaan1507060280
Kemudian Tabel Ttansportasi yang diperoleh:Pabrik/Pasar123Penawaran
156120
215101280
31080
Permintaan1507060280
Langkah-langkahnya adalah sebagai berikut:1. Pilih variable Xij (kotak) dengan biaya transport (cij) terkecil dan alokasikan sebanyak mungkin. Ini akan menghabiskan baris i atau kolom j.2. Dari kotak-kotak sisanya yang layak (yaitu yang tidak terisi atau dihilangkan) pilih cij terkecil dan alokasikan sebanyak mungkin.3. Lanjutkan proses ini sampai semua penawaran dan permintaan terpenuhi.
Pabrik/Pasar123Penawaran
1(2)70(3)50120
2(5)70(4)1080
3(1)801080
Permintaan1507060280
Dari table 1.3 diatas dapat diketahui bahwa biaya transport total adalah sebagai berikut: Z = (3 x 80) + (5 x 70) + (6 x 50) + (12 x 10) + (15 x 70) = 2060Implementasi Program
Algoritma Biaya Terkecil
(inisialisasi biaya = 0)1. (mencari sel dengan cost terkecil)
i = 0
j = 0min = cost[0][0]
selama sel[i][j] != NULL dan i kebutuhan[kolom_terkecil], maka: Sel[baris_terkecil][kolom_terkecil] = kebutuhan[kolom_terkecil]
Kebutuhan[kolom_terkecil] = 0
Kapasitas[baris_terkecil] = kapasitas[baris_terkecil] - kebutuhan[kolom_terkecil]
Biaya = biaya + sel[baris_terkecil][kolom_terkecil] * cost[baris_terkecil][kolom_terkecil]
Jika kapasitas[baris_terkecil] = kebutuhan[kolom_terkecil], maka:
sel[baris_terkecil][kolom_terkecil] = kapasitas[baris_terkecil]
kapasitas[baris_terkecil] = 0
kebutuhan[kolom_terkecil] = 0
biaya = biaya + sel[baris_terkecil][kolom_terkecil] * cost[baris_terkecil][kolom_terkecil]
3. (mengecek kapasitas dan kebutuhan apakah sudah saling memenuhi)Jika semua kapasitas[i] = 0 dan semua kebutuhan[j] = 0, maka: ke langkah 4.
Jika tidak, kembali ke langkah 1
4. cetak biaya
Source Code Program/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package simpleleastcost;
import javax.swing.table.DefaultTableModel;
/**
*
* @author Suarbawa
*/
public class CostDialog extends javax.swing.JDialog {
/**
* Creates new form CostDialog
*/
DefaultTableModel costModel;
private int disposeStatus;
public CostDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
this.costModel = new DefaultTableModel();
}
public void setCostModel(DefaultTableModel costModelIN) {
this.costModel = costModelIN;
this.jTable_costTable.setModel(costModel);
}
private boolean isInputValid() {
boolean valid = true;
for (int i = 0; i < this.costModel.getRowCount(); i++) {
for (int j = 1; j < this.costModel.getColumnCount(); j++) {
if(this.costModel.getValueAt(i, j)==null)
{
valid = false;
}else if ((!this.costModel.getValueAt(i, j).toString().matches("[0-9][0-9]*[.]?[0-9]*"))) {
valid = false;
}
}
}
return valid;
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
//
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable_costTable = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jTable_costTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable_costTable);
jButton1.setText("OK");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("Cancel");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(343, Short.MAX_VALUE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(21, 21, 21))
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 309, Short.MAX_VALUE)
.addGap(38, 38, 38)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addGap(7, 7, 7))
);
pack();
}//
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if (this.isInputValid() == true) {
this.disposeStatus = 1;
this.dispose();
} else {
javax.swing.JOptionPane.showMessageDialog(rootPane, "One or more input is invalid", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
this.disposeStatus = 0;
this.dispose();
}
public int getDisposeStatus()
{
return this.disposeStatus;
}
public DefaultTableModel getCostModel()
{
return this.costModel;
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(CostDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(CostDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(CostDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(CostDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//
/* Create and display the dialog */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
CostDialog dialog = new CostDialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable_costTable;
// End of variables declaration
}
Pengujian
Berikut ini adalah beberapa screenshoot ketika program dijalankan:Tampilan awal source code yang sudah dijalankan :
Pertama pada kali ini kita menggunakan compiler netbeans , dimana untuk menguji program ini berhasil atau tidak kita harus menjalankan source code yang telah diselesaikan, pertama inputkan jumlah supply yang anda inginkan dan jumlah demand yang anda inginkan , seperti gambar berikut :
Inputkan nilai nilai supply dan demand sehingga seperti gambar dibawah ini :
Lalu masukan cost dari masing-masing sel seperti dibawah ini
Setelah penginputan cost berhasil muncullah gamabr seperti dibawah ini :
Sehingga di peroleh biaya yang dikeluarkan pada bagian bawah
8
5
12
6
15
9
10
10
3
8
5
6
15
10
12
3
9
10
6