Masalah Minimum Cost Flow

Pengenalan Optimisasi Jaringan

Masalah Minimum Cost Flow

In [1]:
#Install library Mixed Integer Programming sebagai tools yang digunakan dalam workshop ini
!pip install mip #Apabila library mip sudah terinstall, berikan comment (tanda #) sebelum !pip
import mip #memanggil library Mixed Integer Programminh
import numpy as np #memanggil library Numerical Python
Collecting mip
  Downloading mip-1.13.0-py3-none-any.whl (48.0 MB)
     |████████████████████████████████| 48.0 MB 47 kB/s 
Requirement already satisfied: cffi in /usr/local/lib/python3.7/dist-packages (from mip) (1.14.6)
Requirement already satisfied: pycparser in /usr/local/lib/python3.7/dist-packages (from cffi->mip) (2.20)
Installing collected packages: mip
Successfully installed mip-1.13.0

Contoh 2

Mia ingin berangkat dari kota A ke kota D,
Terdapat beberapa alternatif untuk mencapai tujuan.
Jalur alternatif dan biaya untuk masing-masingnya terlampir pada gambar
Tentukan biaya minimum untuk Mia berangkat dari kota A ke D ! image.png

Formulasi Contoh 2 :


Misalkan :

  • $x_{i,j}$ merupakan jalur dari kota-$i$ ke kota-$j$
    • $x_{i,j}=1$ apabila jalur terpilih
    • $x_{i,j}=0$ apabila jalur TIDAK dipilih
  • $c_{i,j}$ merupakan biaya perjalanan kpta-$i$ ke kota-$j$

dengan $i\in\{0,1,2\}$ dan $j\in\{0,1,2,3\}$ (indeks pada python dimulai dari nol)

Minimumkan biaya perjalanan : $$f(\mathbb{x})=2x_{0,1}+10x_{0,2}+20x_{0,3}+10x_{1,2}+2x_{1,3}+5x_{2,3}$$

Kendala Aliran (Flow), misalkan "keluar" dari kota bertanda +, dan "masuk" ke kota bertanda negatif

  • Pilihan Mia keluar dari kota A adalah menuju kota B atau C atau D, Mia perlu memilih satu jalur, jadi
    • $x_{0,1}+x_{0,2}+x_{0,3}=1$
  • Andaikan Mia berada di kota B, artinya Mia masuk dari kota A ke kota B (-), dan pilihan keluar dari kota B adalah menuju kota C atau D, jadi
    • $ -x_{0,1}+x_{1,2}+x_{1,3}=0$
  • Andaikan Mia berada di kota C, artinya Mia masuk dari kota A ke kota C (-) atau dari kota B ke kota C (-), dan selanjutnya Mia ergi ke kota D, jadi
    • $ -x_{0,2}-x_{1,2}+x_{2,3}=0$
  • Andaikan Mia berada di kota D, artinya Mia masuk dari kota A ke kota D (-) atau dari kota B ke kota D (-), atau dari kota C ke kota D (-), jadi
    • $ -x_{0,3}-x_{1,3}-x_{2,3}=-1$
In [4]:
m = mip.Model("Contoh Masalah Minimum Cost Flow")
x = [[m.add_var(var_type=mip.BINARY) for j in range(4) ] for i in range(3) ]

m.objective = mip.minimize( 2*x[0][1]+10*x[0][2]+20*x[0][3]+10*x[1][2]+
                           3*x[1][3]+5*x[2][3] )
#Kendala
m += x[0][1]+x[0][2]+x[0][3] == 1
m += -x[0][1]+x[1][2]+x[1][3] == 0
m += -x[0][2]-x[1][2]+x[2][3] == 0
m += -x[0][3]-x[1][3]-x[2][3] == -1


m.optimize()
print(m.status)
print('Biaya minimum perjalanan Mia =',m.objective_value)
print('Jalur terpilih :')
for i in range(3): 
    for j in range(4): 
        if(x[i][j].x>=0.5): print("x[",i,",",j,"]=",x[i][j].x)
OptimizationStatus.OPTIMAL
Biaya minimum perjalanan Mia = 5.0
Jalur terpilih :
x[ 0 , 1 ]= 1.0
x[ 1 , 3 ]= 1.0
In [ ]:
m = mip.Model("Contoh Masalah Minimum Cost Flow")
x = [[m.add_var(var_type=mip.BINARY) for j in range(4) ] for i in range(3) ]

m.objective = mip.minimize( 2*x[0][1]+10*x[0][2]+20*x[0][3]+10*x[1][2]+
                           3*x[1][3]+5*x[2][3] )
#Kendala
m += x[0][1]+x[0][2]+x[0][3] == 1
m += -x[0][1]+x[1][2]+x[1][3] == 0
m += -x[0][2]-x[1][2]+x[2][3] == 0
m += -x[0][3]-x[1][3]-x[2][3] == -1


m.optimize()
print(m.status)
print('minimum dari f objektif =',m.objective_value)

for i in range(3): 
    for j in range(4): 
        if(x[i][j].x>=0.5): print("x[",i,",",j,"]=",x[i][j].x)
OptimizationStatus.OPTIMAL
minimum dari f objektif = 5.0
x[ 0 , 1 ]= 1.0
x[ 1 , 3 ]= 1.0

Ada yang mau didiskusikan?
Silahkan hubungi Ridwan

Comments

Popular posts from this blog

Fungsi Rekursif

Aljabar Python

Pengolahan Matriks (manual)

Metode Penalti