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
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 !
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)
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)
Ada yang mau didiskusikan?
Silahkan hubungi Ridwan
Comments
Post a Comment