least cost program

23
RISET OPERASI PROGRAM APLIKASI BIAYA TERKECIL Kelompok 5 I Wayan Aditya Setiawan 1208605057 Ni Luh Putu Ratna Sri Andi Yani 1208605061 PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM 1

Upload: aditya-setiawan

Post on 25-Nov-2015

396 views

Category:

Documents


83 download

DESCRIPTION

least cost progam

TRANSCRIPT

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