BAB II TINJAUAN PUSTAKA Pada bab ini akan diuraikan mengenai dasar-dasar teori yang digunakan dalam pengerjaan tugas akhir ini. Teori-teori yang dibahas meliputi stochastic programming, stochastic integer programming, dekomposisi Benders, disjunctive decomposition, dan ILOG OPL. 2.1 Stochastic Programming Seringkali pada suatu pengambilan keputusan terdapat unsurunsur ketidakpastian dalam pertimbangannya. Hal ini merupakan konsekuensi dari keputusan itu sendiri, model keputusan yang optimal seringkali menempatkan ketidakpastian dengan rataan atau estimasi yang terbaik. Kemajuan komputasional dalam pemrograman matematika telah membantu pembuatan keputusan dalam berbagai macam area, salah satu pengaruh kuat adalah pembuatan keputusan dengan ketidakpastian menggunakan stochastic programming, cabang dari optimasi dengan memperhatikan model yang mengandung parameter acak (random). Keperluan untuk memasukkan ketidakpastian dalam model keputusan yang kompleks muncul di awal sejarah pemrograman matematika. Bentuk model pertama, terdiri dari sebuah aksi yang diikuti dengan observasi dan reaksi atau recourse. Sedangkan model yang kedua disebut chance atau probabilistically constrained programming. Kedua bentuk tersebut memiliki pangkal dalam teori keputusan statistikal, perbedaannya adalah bahwa stochastic programming menekankan pada metode solusi dan solusi analitikal melalui prosedur untuk membangun fungsi tujuan dan meng-update probabilitas. Ukuran dari stochastic programming berkembang secara proporsional dengan jumlah realisasi dari kemungkinan parameter yang tidak pasti. Jumlah ini secara umum akan meningkat secara eksponensial dalam beberapa periode waktu dan parameter. Jadi 5 6 semakin panjang periode waktu dan parameter tidak pasti yang akan dipakai, maka ukuran dari stochastic programming ini juga akan semakin besar. 2.1.1 Space Probabiltas dan Variabel Acak Beberapa parameter permasalahan dapat dianggap tidak pasti dan direpresentasikan sebagai variabel acak. Ketidakpastian direpresentasikan dalam percobaan acak dengan keluaran (skenario) yang ditunjukkan dengan ω. Himpunan dari seluruh keluaran direpresentasikan dengan Ω. Keluaran tersebut dapat dikombinasikan kedalam subset Ω yang disebut event. Kumpulan dari event acak ditunjukkan dengan A. Untuk setiap event A ∈ A dihubungkan dengan dengan nilai P(A), yang disebut probabilitas, seperti 0 ≤ P(A) ≤ 1, dan P (φ ) = 0, P (Ω ) = 1 P( A1 ∪ A2 ) = P ( A1 ) + P( A2 ) jika A1 ∩ A2 = φ . Triplet (Ω, A, P) disebut dengan space probabilitas yang harus memenuhi sejumlah kondisi. Untuk variabel acak tertentu ξ , didefinisikan distribusi kumulatifnya adalah sebagai Fξ ( x) = P (ξ ≤ x) atau lebih tepatnya Fξ ( x ) = P ({ω | ξ ≤ x}) . Sehingga ada dua kasus utama yang harus dipertimbangkan. Suatu variabel acak diskrit menggunakan nilai yang berbeda dalam jumlah yang dapat dihitung atau finit. Hal ini dideskripsikan oleh distribusi probabilitasnya, dimana daftar nilai yang mungkin, ξ k , k ∈ K , dengan probabilitas f (ξ k ) = P (ξ = ξ k ) s.t. ∑ f (ξ k ) = 1 k ∈K Varibel acak kontinyu sering dideskripsikan melalui fungsi so-called density f( ξ ). Probabilitas ξ pada interval [a,b] didefinisikan dengan b P (a ≤ ξ ≤ b) = ∫ f (ξ )dξ a atau sama dengan 7 b P(a ≤ ξ ≤ b) = ∫ dF (ξ ) a dimana F(.) adalah distribusi kumulatif. Berbeda dengan kasus diskrit, probabilities dari nilai tunggal P (ξ = a ) adalah selalu nol untuk variable acak kontinyu. Distribusi F(.) harus memenuhi ∫ ∞ −∞ dF (ξ ) = 1 Ekspektasi dari variable acak didefinisikan dengan ∞ µ = ∑k∈K ξ f (ξ ) atau µ = ∫ dF (ξ ) untuk kasus diskrit k k −∞ dan kontinyu. Varian dari random acak adalah E [(ξ − µ ) 2 ] . Ekspektasi dari ξ r disebut dengan momen ke-r dan dinyatakan ξ ( r ) = Ε[ξ r ] . Titik η disebut α -quantile dari ξ jika dan hanya jika untuk 0 < α < 1, η = min{x | F ( x) ≥ α } . 2.1.2 Keputusan dan Stage Stochastic linear program adalah liner program dimana beberapa data permasalahan mengandung ketidakpastian. Recourse program adalah program di atas yang beberapa aksi keputusan atau recourse dapat diambil setelah ketidakpastian diperlihatkan. Untuk lebih tepatnya, ketidakpastian data berarti beberapa data permasalahan dapat direpresentasikan sebagai variabel acak. Suatu deskripsi probabilistik yang akurat dari variabel acak diasumsikan ada, menurut bentuk distribusi probabilitas, densiti, atau lebih umumnya ukuran probabilistik. Sebagaimana biasanya, nilai dari bermacam-macam variabel acak yang akan diambil hanya dapat diketahui setelah percobaan acak, yaitu vektor ξ = ξ (ω ) hanya dapat diketahui setelah percobaan. Kumpulan keputusan dibagi menjadi dua kelompok: o Sejumlah keputusan harus diambil sebelum percobaan. Semua keputusan ini disebut first-stage decisions dan periode ketika keputusan tersebut diambil disebut stage pertama. 8 Sejumlah keputusan dapat diambil setelah percobaan. Keputusan tersebut disebut second-stage decisions dan periodenya disebut stage ke-dua. Keputusan stage pertama direpresentasikan dengan vektor x, sedangkan keputusan stage kedua direpresentasikan dengan vektor y atau y(ω) atau bahkan y(ω,x) jika ingin ditekankan bahwa keputusan stage kedua merupakan suatu fungsi dari keluaran percobaan acak dan keputusan stage pertama. Urutan event dan keputusan dapat disimpulkan sebagai berikut: o x → ξ (ω ) → y (ω , x ) 2.1.3 Program Dua Stage dengan Recourse Tetap Stochastic linear program dua stage dengan recourse tetap adalah permasalahan dalam hal pencarian: [ min z = c T x + Eξ min q(ω ) T y (ω ) s.t. Ax = b, T (ω ) x + Wy (ω ) = r (ω ), x ≥ 0, y (ω ) ≥ 0 ] (2.1) Suatu perbedaan dibuat di antara stage pertama dan stage kedua. Keputusan stage pertama direpresentasikan oleh n1 × 1 vektor x. Sesuai dengan x, juga direpresentasikan vektor stage pertama dan matriks c, b, dan A, dengan ukuran n1 ×1 , m1 × 1, dan m1 × n1 secara berurutan. Pada stage kedua, sejumlah event acak ω ∈ Ω mungkin akan didapat. Untuk realisasi ω yang diberikan, data permasalahan stage kedua q(ω), r(ω) dan T(ω) menjadi diketahui, dimana q(ω) adalah n2 × 1 , r(ω) adalah m2 × 1 , dan T(ω) adalah m2 × n1 . Tiap komponen q, T, dan r merupakan suatu variabel acak yang mungkin. Ti(ω) adalah baris ke-i dari T(ω). Dengan menggabungkan komponen stochastic dari data stage kedua, didapatkan sebuah vektor ξ T (ω ) = (q(ω ) T , r (ω ) T , T1 (ω ),..., Tm (ω )) , 2 9 dengan kemungkinan besar mencapai N = n2 + m2 + (m2 × n1 ) komponen. Event acak tunggal ω mempengaruhi beberapa variabel acak, di sini, semua komponen dari ξ . Ξ ⊂ ℜ N merupakan pendukung dari ξ , yaitu subset tertutup yang paling kecil dalam ℜ N seperti P (Ξ) = 1 . Ketika didapat event acak ω, data permasalahan stage kedua, q, r, dan T, menjadi diketahui. Kemudian keputusan stage kedua y (ω ) atau ( y (ω , x)) harus diambil. Ketergantungan y pada ω merupakan sesuatu yang sama sekali berbeda sifatnya dari ketergantungan q atau parameter lainnya pada ω, karena keputusan keputusan y secara khusus tidak sama untuk realisasi ω yang berbeda. Fungsi obyektif berisi sebuah deterministik cTx dan obyektif stage kedua q (ω ) T y (ω ) mengambil alih seluruh realisasi event acak ω. Stage kedua ini jauh lebih sulit karena untuk tiap ω, nilai y(ω) merupakan solusi dari linear program. Untuk menekan permasalahan tersebut, terkadang digunakan dugaan deterministic equivalent program, dimana untuk setiap realisasi ω yang diberikan T Q ( x, ξ (ω )) = min q (ω ) y | Wy = h(ω ) − T (ω )x, y ≥ 0 y { } merupakan fungsi nilai stage kedua. Kemudian, didefinisikan fungsi nilai ekspektasi stage kedua Q(x) = Eξ Q (x, ξ (ω )) dan deterministic equivalent program (DEP) min z = c T x + Q(x) s.t. Ax = b, (2.2) x≥0 Representasi stochastic program di atas secara jelas menggambarkan bahwa perbedaan utama dari perumusan deterministik adalah pada fungsi nilai stage kedua. Apabila fungsi tersebut diberikan, maka stochastic program hanya merupakan program nonlinear biasa. 10 Perumusan (2.1) merupakan bentuk stochastic program dua stage paling sederhana. Perluasan dari perumusan tersebut bisa saja dilakukan. Sebagai contoh, jika keputusan stage pertama atau stage kedua adalah integer, maka batasan paling akhir dari perumusan (2.1) dapat diganti dengan bentuk yang lebih umum seperti berikut x ∈ X , y (ω ) ∈ Y Dimana X = Ζ n+ dan Y = Z +n2 . Demikian pula dengan stage pertama nonlinear dan obyektif atau batasan stage kedua dapat dengan mudah digabungkan. 1 2.2 Stochastic Integer Programming Perumusan umum integer program dua stage mirip dengan permasalahan linier pada umumnya dimana beberapa variabel yang ada baik pada stage pertama atau stage kedua merupakan integer. Pada banyak situasi penerapan, dalam suatu batasan variabel harus berupa biner, yaitu nilai satu atau nol. Secara umum, dapat ditulis seperti berikut: (SIP) min z = c T x + Eξ min q(ω )T y | Wy = r (ω ) − T (ω )x, y ∈ Y x∈ X { } s.t. Ax = b, X dan/atau Y berisi beberapa integralitas atau batasan biner pada x dan/atau y. Bentuk DEP dari definisi tersebut adalah (DEP) min z = c T x + Q(x) x∈ X s.t. Ax = b, dengan Q(x) adalah nilai yang diharapkan dari stage kedua. 2.3 Dekomposisi Benders Dekomposisi Benders atau Nested L-Shaped merupakan suatu metode yang pada dasarnya adalah untuk memperkirakan hubungan non-linear dalam fungsi obyektif dari permasalahan. Prinsip umum metode ini adalah membangun sebuah master 11 problem x dan mengevaluasi fungsi recourse sebagai sub problem. Pada metrode ini, diasumsikan bahwa vektor acak ξ memiliki dukungan yang terbatas. Didefinisikan indeks k = 1, ..., K untuk kemungkinan realisasi dan pk sebagai realisasinya. Berdasarkan asumsi tersebut, dituliskan kembali DEP dalam bentuk perluasan. Bentuk ini dibuat dengan sekumpulan keputusan stage kedua, yaitu yk, untuk setiap realisasi ξ , yaitu qk, rk, dan Tk. Berikut ini adalah bentuk perluasan dari DEP, yang disebut EF (Extensive Form): K min z = c T x + ∑ p k q kT y k k =1 Ax = b, s.t. Tk (ω ) x + Wy k (ω ) = rk (ω ), k = 1, ..., K y k (ω ) ≥ 0 k = 1, ..., K x ≥ 0, Struktur dari permasalahan EF dapat digambarkan dengan Gambar 2.1 berikut ini: Master problem A T1 T2 Tk Sub Problem1 W W Sub Problem 2 W Sub Problem k Gambar 2.1 Struktur blok dari EF dua stage Dari gambar di atas, dapat dilihat bahwa struktur bentuknya menyerupai huruf L, karena dari itu metode ini disebut metode LShaped. 12 Metode nested L-Shaped menyelesaikan permasalahan dengan membaginya menjadi master problem dan sub problem kecil-kecil, dan permasalahan yang diselesaikan sudah dalam bentuk EF, sehingga master problem dapat ditulis seperti berikut ini: min z = cT x + EsQ( x, s) s.t Ax = b Di x ≥ di (2.3) l = 1,..., r E j x +θ ≥ ej j = 1,..., t x ≥ 0, θ ∈ ℜ Sedangkan bentuk sub problem dapat ditulis seperti di bawah ini: Q( x * , s) = min qs ys W s y s ≥ rs − Ts x * Q( x* ) = ∑s =1Q( x* , s) S s = 1,....S (2.4) (2.5) Master problem akan menjadi node root dari pohon skenario, sedangkan sub problem akan menjadi node-node child sesuai dengan stage dan urutan nodenya. Secara garis besar, metode penyelesaian ini dapat dituliskan seperti berikut ini: o Forward Pass : Dimulai dengan menyelesaikan master problem terlebih dahulu, dengan x* sebagai solusi optimal dari master problem tersebut. Kemudian nilai dari solusi tersebut dimasukkan ke dalam sub problem – sub problem sesuai dengan urutan pada pohon skenario. Pada tahap ini terdapat kemungkinan dimana timbul permasalahan yang tidak layak. Pada tahap ini didapat feasibility cut seperti yang ada pada persamaan (2.3), tepatnya pada batasan yang kedua. Langkah forward digambarkan dengan garis putus-putus berwarna biru pada gambar (2.2). o Backward Pass : Kebalikan dari forward pass, langkah ini dimulai dari node skenario terakhir, lalu bergerak menuju node root. Apabila permasalahan sudah layak, maka optimality cut yang didapat, di-generate untuk memastikan bahwa solusi yang didapatkan sudah optimal. Optimality cut dituliskan sesuai dengan batasan ketiga dari persamaan (2.3). 13 Langkah backward digambarkan dengan garis putus-putus berwarna merah pada gambar (2.2). Kedua langkah di atas dilakukan berkali-kali (iterasi) sampai didapatkan cut yang konvergen. Gambar 2.2 Ilustrasi forward pass dan backward pass 2.3.1 Feasibility Cut Nilai x* yang dihasilkan dari perhitungan master problem dapat menjadikan permasalahan pada sub problem menjadi tidak layak. Oleh karena itu, diperlukan kondisi kelayakan, dengan cara mendefinisikan Cone(Ws ) = {W s y s y ≥ 0} dan x* adalah layak, jika rs − Ts x * ∈ Cone(Ws )∀s . Diasumsikan ∃s ′ dimana rs ' − Ts ' x ∉ Cone(W s ' )∀s . Diasumsikan pula, terdapat ∃σ dimana σ T t > 0 ∀t ∈ Cone(W s ' ) dan σ T ( rs ' − T s ' x * ) ≤ 0 . Nilai σ didapat dengan menggunakan weak duality pada sub problem bersangkutan. Primal dari sub-problem dapat dituliskan sebagai berikut: * Min eT v + + eT v − Ws ys + Iv + − Iv − ≥ rs − Ts x* (2.6) ys ≥ 0, v + ≥ 0, v − ≥ 0 Setelah itu dilanjutkan dengan pendefinisian dual seperti berikut ini: Max ρ (rs − Ts x* ) ρ T Ws ≤ 0 (2.7) 14 Sehingga weak duality dapat didefiniskan seperti nerikut ini: e T v + + e T v − ≥ ρ ( rs − Ts x * ) Dimana ρ ( rs − Ts x * ) ≥ 0 adalah feasibility cut. Misalkan r adalah indeks feasibility cut, maka r = r + 1 , Dr = ρTs , dan d r = ρrs . Nilai-nilai tersebut digunakan untuk merubah master problem menjadi seperti di bawah ini: min z = c T x s.t Ax = b (2.8) Di x ≥ d i l = 1,..., r x ≥ 0, θ ∈ ℜ 2.3.2 Optimality Cut Pada tiap sub problem yang sudah dinyatakan layak, diperlukan kondisi optimal yang harus dicapai. Untuk mendapatkan kondisi optimal tersebut, digunakan optimality cut. Untuk mendapatkan optimality cut ini dibutuhkan nilai weak duality. Berikut ini adalah bentuk primal dari sub problem yang feasible: Q(x*, s) = Min ρ(rs −Ts x*) (2.9) Ws ys ≥ rs − Ts x* Sedangkan bentuk dari dualnya adalah sebagai berikut: Max π (rs − Ts x * ) (2.10) πWs ≤ q s Sehingga weak duality dapat didefinisikan seperti berikut ini: (2.11) Q ( x * , s ) ≥ π ( rs − Ts x * ) Pada langkah berikutnya nilai kemungkinan dimasukkan pada kedua ruas kanan dan kiri, dimana pertidaksamaannya dapat dituliskan seperti berikut ini: S ∑ p Q( x s =1 s S * , s ) ≥ ∑ p s π (rs − Ts x * ) s =1 (2.12) 15 Dengan men-substitusikan persamaan (2.5), didapat hasil seperti berikut ini: S S Q( x * ) ≥ ∑ p s π rs − ∑ p s πTs x * s =1 s =1 Dengan demikian S p π r − ∑ p s πTs x * . ∑ s s s =1 s =1 bentuk optimality cut adalah S Misalkan t adalah indeks dari S S s =1 s =1 optimality cut, maka t = t + 1 , E t = ∑ p s πTs , dan et = ∑ p s πrs . Nilai tersebut kemudian akan merubah bentuk master problem menjadi seperti di bawah ini: min z = c T x s.t Ax = b Di x ≥ d i i = 1,..., r θ ≥ ej − Ejx j = 1,..., t (2.13) x ≥ 0, θ ∈ ℜ 2.4 Disjunctive Decomposition Pada algoritma disjunctive decomposition (D2) ini, dilakukan aproksimasi terhadap bentuk skenario sub problem. Untuk xk yang diberikan pada k iterasi, bentuknya adalah sebagai berikut: f ck ( x k , ω ) = Min q T y s.t. W k y ≥ r k (ω ) − T k (ω ) x k y ∈ℜ (2.14) n2 + problem ini diinisialisasikan dengan W 1 = W , r 1 (ω ) = r (ω ) , dan T 1 (ω ) = T (ω ) . Elemen-elemen tersebut di- Sub update sebagaimana progress iterasi. Apabila z k (ω ) , nilai yang diberikan pada variabel integer y k (ω ) adalah integer untuk 16 semua ω , maka update tidak diperlukan, dan k + 1 = k untuk iterasi selanjutnya. Sebaliknya, apabila subproblem tidak menghasilkan solusi optimal integer, maka ditetapkan j(k) sebagai indeks, dimana untuk z kj (ω ) adalah non-integer untuk beberapa ω ∈ Ω . z j ( k ) menujukkan salah satu nilai non-integer {z kj (ω )}ω∈Ω . j(k) disebut sebagai variabel disjungsi untuk k iterasi. Karena disjungsi berdasarkan pada kondisi either-or, digunakan H = {0, 1}. Untuk men-generate cut coefficient pada iterasi k, digunakan LP/SLP berikut ini: Max [ ] T E [π 0 (ω~ )] − E y k (ω~ ) π s.t. (2.15.1) π j ≥ λ W − I λ0, 2 ∀j (2.15.2) π j ≥ λ1T,1W jk + I kj λ1, 2 ∀j (2.15.3) T 0 ,1 k j k j π 0 (ω ) ≤ λT0,1 ρ ck (x k , ω ) − λ0, 2 z j ( k ) ∀ω ∈ Ω (2.15.4) π 0 (ω ) ≤ λ1T,1 ρ ck (x k , ω ) + λ1, 2 z j ( k ) ∀ω ∈ Ω (2.15.5) − 1 ≤ π j ≤ 1, ∀j , − 1 ≤ π 0 (ω ) ≤ 1, ∀ω ∈ Ω (2.15.6) λ0,1 , λ0, 2 , λ1,1 , λ1, 2 ≥ 0 (2.15.7) Variabel π dan λ adalah konstan dengan mengacu pada ω , suatu karakteristik yang diketahui sebagai non-antisipativitas. Untuk mengupdate fungsi rk+1 dan Tk+1, dibutuhkan koefisien v k (ω ) dan γ k (ω ) , yaitu untuk menspesifikasikan r k +1 (ω ) = [r k (ω ), v k (ω )] , dan T k +1 (ω ) = [T k (ω ) T ; γ k (ω )]T . Karena disjungsi yang digunakan untuk informasi cut memiliki H = {0,1}, epigraf dari π 0 ( x, ω ) merupakan union dari dua set polihedral. Dimana untuk semua ω ∈ Ω : v0k = λT0,1 r k (ω ) − λ0, 2 z j ( k ) , v1k = λ1T,1r k (ω ) + λ1, 2 z j ( k ) dan 17 [γ hk (ω )]T = λTh ,1T k (ω ), h ∈ H Sedangkan untuk mendefinisikan π ck ( x, ω ) untuk tiap ω ∈ Ω , digunakan LP berikut ini: ( ) σ (ω ) (δ (ω ), σ (ω ), σ (ω )) ∈ (∏ (ω )) Max δ (ω ) − σ 0 (ω ) − x k T + 0 (2.16) k X Dimana Π (ω ) yang merupakan epi-reverse polar (yaitu + X kumpulan permukaan convex hull epigraf) dari π 0k ( x, ω ) dapat dituliskan seperti berikut ini: ∏ +X (ω ) = {σ 0 (ω ) ∈ ℜ, σ (ω ) ∈ ℜ n1 , δ (ω ) ∈ ℜ | ∀h ∈ H , ∃τ h ∈ ℜ m1 ,τ 0 h ∈ ℜ m1 s.t. σ 0 (ω ) ≥ τ 0 h ∑τ 0h =1 ∀h ∈ H (2.17) h σ j (ω ) ≥ τ hT A j + τ 0 h γ hj (ω ) ∀h ∈ H , j = 1,......., n1 δ (ω ) ≤ τ hT b + τ 0 h vh (ω ) ∀h ∈ H τ h ≥ 0, τ 0 h ≥ 0 ∀h ∈ H } Dimana σ 0k (ω ), σ k (ω ) , dan δ k (ω ) merupakan solusi optimal dari (2.17). Dengan demikian, untuk ω ∈ Ω , didapatkan: v k (ω ) = σ k (ω ) σ 0k (ω ) (2.18) γ k (ω ) = δ k (ω ) σ 0k (ω ) (2.19) dan 2.5 Mixed Integer Program (MIP) Mixed integer program (MIP) merupakan minimasi atau maksimasi dari fungsi subyek linear terhadap konstrain linear. Permasalahan MIP dihasilkan ketika beberapa variabel pada model adalah nilai real dan beberapa variabel lainnya adalah integer. Dengan kata lain, pada mixed integer programming 18 (MIP), hanya beberapa keputusan dan variabel slack yang dibatasi oleh nilai integer. Karena dari itu, bentuk dari model permasalahan adalah mixed. Ketika fungsi obyektif dan dan konstrain semuanya dalam bentuk linear, maka bentuk tersebut disebut dengan mixed integer linear program(MILP). Bentuk umum dari MIP dapat dituliskan sebagai: max c T x s.t. Ax ≤ b x ∈ ℜn × Z q Dimana variabel x adalah variabel dengan nilai real atau integer. 2.6 ILOG OPL ILOG OPL Development Studio IDE merupakan suatu solver yang powerfull dalam hal penyelesaian permasalahan optimasi. ILOG OPL Development, atau biasa disebut ILOG terdiri dari beberapa bagian: o Optimization Programming Language (OPL) yang digunakan untuk menghasilkan model optimasi. o Integrated Development Evironment (IDE) yang digunakan untuk menjalankan dan menguji model optimasi. o Command line tool (oplrun) yang digunakan untuk mengeksekusi model comment line. o Application Programming Interfaces (APIs) yang digunakan untuk menyimpan model ke dalam aplikasi standalone. o Optimization Decision Manager (ODM) yang digunakan untuk me-manage keputusan dalam suatu optimasi. Permasalahan mathematic programming, seperti linear programming, integer programming, quadratic programming, serta optimasi kombinatorial berkembang dalam berbagai variasi area aplikasi, termasuk perencanaan, penjadwalan, pengurutan, alokasi sumber, desain, serta konfigurasi. 19 OPL merupakan sebuah bahasa pemrograman permodelan untuk kombinasi optimasi yang bertujuan menyederhanakan penyelesaian dari permasalahan optimasi ini. OPL menyediakan dukungan dalam suatu bentuk computer equivalent untuk pemodelan linear, quadratic, dan pemrograman integer juga menyediakan akses untuk algoritma state-of-the-art untuk linear programming, mathematical integer programming, dan quadratic programming. Gambar (2.3) merupakan layar pembuka untuk ILOG OPL. Gambar 2.3 Layar pembuka ILOG OPL 2.6.1 Model Blok-blok dasar pada OPL adalah integer, floating-point number, identifier, string, dan kata kunci. Identifier pada OPL dapat menerima huruf, digit, dan karakter underscore (_), huruf dalam OPL bersifat case sensitif. Integer bersifat urutan dari digit, dimungkinkan untuk pemberian tanda minus (-). Float dapat dijelaskan dalam notasi desimal (misal, 2.6 atau -1.2) atau dapat juga dalam notasi scientific (misal, 2.6e-2 atau -1.2e7). Berikut ini adalah contoh sederhana model optimasi menggunakan ILOG: dvar float+ A; dvar float+ B; maximize 40*A + 50*B; subject to { ct1: A + B <= 50; 20 ct2: 3*A + 4*B <= 180; ct3: B <= 40;} 2.6.2 Tipe Data Tipe data pada ILOG terdiri dari dua tipe, yaitu: o Basic data, yaitu integer, float, dan string. o Data structure, yaitu tipe data yang menggunakan tipe data basic untuk dikombinasikan dengan arrays, tuples, dan sets untuk menghasilkan struktur data yang kompleks. 2.6.3 Sumber Data Data yang dipakai pada permodelan di ILOG dapat ditulis secara langsung pada file .dat, dapat pula dari spreadsheet (ms. excel) atau dapat pula diambil dari database (ms. access). 2.6.4 Tipe Keputusan Variabel keputusan, yaitu variabel yang dicari pada model optimasi, secara default pada ILOG OPL adalah dvar (decision variable). Selain itu dapat pula digunakan dexpr, yaitu ekspresi yang memungkinkan kita untuk menggunakan ulang variabel keputusan (belum diketahui nilainya). 2.6.5 Batasan Untuk menginisialisasi batasan pada model optimasi, maka digunakan instruksi constraint atau subject to, seperti yang terlihat pada contoh di bawah ini: subject to { forall(r in Resources) sum(p in Products) consumption[p,r] * inside[p] <= capacity[r]; forall(p in Products) inside[p] + outside[p] >= demand[p];}