Constraint in AI Planning and Scheduling

advertisement
Constraint Programming: Suatu Pendekatan dalam
Declarative Programming
Dewi Mairiza
Fakultas Ilmu Komputer Universitas Indonesia
Kampus UI Depok, 16424, Indonesia
Phone: +6221 7863419 - Fax: +6221 7863415
[email protected]
Abstrak
Pemrograman berbasis constraint (Constraint Programming) adalah suatu pendekatan
deklaratif dalam problem solving dengan cara mendeskripsikan permasalahan menjadi
himpunan batasan–batasan (constraints). Untuk menyelesaikan kombinatorial atau
permasalahan optimisasi (optimization problems) dalam constraint programming, kita
cukup memodelkan permasalahan sebagai suatu constraint satisfaction problem, dan
selanjutnya solver yang akan mencari solusi atas permasalahan tersebut. Dalam
memodelkan permasalahan, kita menggunakan variables, domains, dan constraints
yang merepresentasikan himpunan penyelesaian. Constraint programming berkaitan
dengan logic programming. Beberapa logic program dapat diterjemahkan ke dalam
constraint program, dan sebaliknya. Pendekatan ini banyak digunakan dalam aplikasi
komersial seperti Artificial Intelligent, Planning, Scheduling, Bioinformatics, Options
Trading, Aerospace, dan sebagainya.
Kata kunci: constraint, variable, domain, satisfaction, optimization, declarative.
1. Pengantar
Pemrograman berbasis constraint (Constraint Programming atau CP) adalah salah satu
topik yang cukup menarik dalam pengembangan bahasa pemrograman khususnya
dalam bidang Artificial Intelligent pada sepuluh tahun terakhir. Sebuah constraint pada
dasarnya merupakan relasi dari beberapa variable yang memiliki nilai yang dinyatakan
dalam suatu domain. Constraint memberikan batasan terhadap nilai yang mungkin
untuk suatu variable.
Pemrograman deklaratif (Declarative Programming) adalah suatu pendekatan dalam
pemrograman computer (computer programming) dengan memberikan dekripsi dari
kondisi-kondisi yang ada tanpa mempedulikan interpretasi dari langkah-langkah yang
diperlukan untuk mendapatkan penyelesaian. Sehingga perbedaan dari declarative
programming adalah pendekatan ini tidak menyediakan instruksi-instruksi yang harus
dieksekusi untuk mendapatkan solusi. Declarative programming meliputi
pemrograman fungsional (functional programming) dan pemrograman logic (logic
programming). Functional programming terkait dengan evaluasi terhadap fungsi
matematik dan banyak digunakan dalam parallel computing, sedangkan logic
programming berkaitan dengan logika matematik pada pemrograman komputer.
Saat ini, constraint programming banyak diaplikasikan dalam aplikasi optimization
problems yang bersifat operasional dan taktis, dimana memerlukan solusi yang realtime namun teknik pemrograman secara matematis belum mencukupi untuk
menyelesaikan permasalahannya. Biasanya permasalahan ini meliputi logical
constraint yang dapat diselesaikan secara efisien dengan constraint programming.
Karena kemampuannya dalam menyelesaikan permasalahan yang cukup sulit untuk
diselesaikan (hard-real life problem) inilah, maka pendekatan ini banyak diminati
sebagai metode yang digunakan untuk memodelkan kombinatorial dan optimization
problems. Selain itu, constraint juga banyak diaplikasikan dalam bidang komersial
terutama dalam bidang planning and scheduling, sequencing, dan configuration
problems. Dalam aplikasi supply chain management, pendekatan constraint digunakan
untuk menyusun jadwal tentang bagaimana sebuah produk harus dibuat pada jumlah
mesin yang terbatas sehingga mendapatkan profit maksimal. Dalam options trading,
constraint dapat diaplikasikan untuk mendapatkan profit optimal dalam membeli atau
menjual options (put options dan call options). Selain itu pendekatan ini juga banyak
diaplikasikan dalam planning dan scheduling transportasi, workload, penjadwalan mata
pelajaran, dsbnya.
Beberapa kelebihan dari constraint programming:
ƒ outputnya singkat
ƒ programnya sederhana sehingga dapat dengan mudah diadaptasi bila terjadi
perubahan requirements
ƒ karena programnya dapat dibuat dan dimodifikasi dengan cepat, maka sangat
mungkin untuk bereksperimen mendapatkan penyelesaian dengan program
terbaik (efisien) dan waktu komputasi tercepat.
2. Constraints Satisfaction Problem
Berdasarkan domainnya, constraint programming terbagi atas dua bagian yaitu constraint
satisfaction dan constraint solving [1]. Constraint satisfaction terkait dengan
permasalahan yang domainnya terbatas (finite domains) dan biasanya disebut sebagai
Constraint Satisfaction Problems (CSP) sedangkan constraint solving menggunakan
variable yang domainnya tak terbatas (infinite domains) sehingga lebih kompleks dan
harus diselesaikan dengan non linear equation, algebra atau metode numerik dan tidak
hanya sekedar kombinasi dan searching. CSP berfungsi untuk medapatkan nilai dari
variables yang memenuhi semua constraints. Selanjutnya dalam tulisan ini penulis hanya
membahas mengenai constraint programming dan constraint satisfaction dalam domain
yang terbatas
CSP didefinisikan sebagai:
• himpunan variables X = {x1, …, xn}
• domain yang merupakan himpunan terbatas dari nilai yang mungkin untuk setiap
variables (Di)
• himpunan constraints yang membatasi nilai yang mungkin untuk setiap variables
Dalam constraint programming terdapat tiga tahapan yang harus selalu ada, yaitu:
1. deklarasi domains dari setiap variables
2. deskripsi dari constraints poblem (problem model)
3. mencari solusi yang tepat dengan menggunakan backtrack search, atau
mencari solusi optimal berdasarkan branch-and-bound search.
Solusi dalam CSP adalah suatu pemetaan nilai dari domain setiap variables yang
memenuhi semua constraints. Terdapat tiga macam solusi yang bisa didapatkan oleh
CSP:
- hanya satu solusi
- semua solusi
- sebuah solusi optimal (Constraint Satisfaction Optimization Problem)
Solusi dari sebuah CSP diperoleh melalui pencarian (searching) secara sistematik
terhadap semua nilai dari variable yang mungkin berdasarkan constraints yang ada.
Dalam hal ini metode searching untuk mendapatkan solusi dapat dibagi atas dua
kelompok utama, yaitu melalui solusi partial (partial value assignments) dan solusi
lengkap (complete value assignments) terhadap semua variables secara stochastic.
Dalam constraint programming juga dikenal istilah constraint propagation, yaitu
memangkas atau memendekkan pencarian dengan menggunakan constraints yang ada.
Setiap constraints memiliki algoritma filtering yang dapat mengurangi jumlah domain
dari variables yang ada dalam constraint tersebut, dengan cara membuang nilai yang
tidak mungkin menjadi solusi permasalahan. Algoritma ini dipanggil setiap kali sebuah
domain dari variable dalam constraint mengalami perubahan dan perubahan ini
dipropagasikan terhadap domain dari variables lainnya dan begitu seterusnya.
Untuk menutupi kekurangan dari local propagation (incompleteness/lack of shortage),
dilakukan pengelompokan beberapa constraints menjadi sebuah special constraint yang
disebut sebagai global constraint. Global constraints adalah kumpulan dari beberapa
conatraints kecil yang diperlakukan sebagai sebuah unit yang lebih besar (gabungan).
Sebagai contoh adalah constraints “all_different, cumulative, cycle, etc”.
3. Constraint Optimization
Kadangkala dalam kehidupan nyata kita membutuhkan suatu solusi yang terbaik.
Standar dari teknik constraint satisfaction adalah hanya mencari solusi-solusi yang
mungkin, tapi ini dapat diperluas untuk mendapatkan solusi yang optimal. Untuk
mendapatkan solusi yang optimal digunakan Constraint Satisfaction Optimization
Problem (CSOP). Kualitas dari solusi biasanya diukur berdasarkan suatu fungsi yang
disebut objective function. CSOP terdiri atas sebuah CSP standar dan sebuah fungsi
optimisasi yang memetakan setiap solusi terhadap nilai numeriknya. Sebagian besar
aplikasi industri menggunakan konsep CSOP ini.
Algoritma yang paling banyak digunakan untuk mendapatkan solusi yang optimal
dalam CSOP adalah Branch and Bound (B&B). Algroritma B&B ini menggunakan
heuristic function yang memetakan partial labeling terhadap suatu nilai numerik
dengan algoritma depth first search untuk mendapatkan solusi. Dalam proses
pencarian, bila nilai domain melewati constraint yang ada, maka subtree yang ada di
bawah partial labeling tersebut dipangkas untuk melakukan propagasi. Solusi yang
paling optimal berdasarkan constraint dipilih sebagai solusi.
4. Aplikasi Constraint Programming
Dalam bagian ini akan dijelaskan beberapa permasalahan dalam constraint dan
bagaimana memodelkannya.
Assignment Problem
Terdapat beberapa pekerjaan yang harus dialokasikan, seperti kapal ke tempat
berlabuhnya, pesawat ke hangarnya, kru terhadap penerbangan pesawat, mata pelajaran
dalam suatu kelas, pekerjaan dalam sebuah toko, artis/aktor terhadap syuting film,
dsbnya. Contoh sederhana berikut ini menjelaskan tentang sebuah pabrik yang memiliki
empat pekerja yaitu W1, W2, W3, dan W4, dan empat produk yaitu P1, P2, P3, dan P4.
Permasalahannya adalah bagaimana membagi pekerja terhadap produk bila diinginkan
setiap pekerja bertanggung jawab terhadap satu produk dan satu produk hanya
dikerjakan oleh satu pekerja sehingga total profit perusahaan minimal 19 satuan [2].
Profit yang dihasilkan oleh pekerja Wi terhadap produk Pi diperlihatkan pada Tabel 1.
Tabel 1 – Profit yang Dihasilkan Pekerja
W1
W2
W3
W4
P1
7
8
4
3
P2
1
2
3
1
P3
3
5
7
6
P4
4
1
2
3
Kenyataan bahwa setiap pekerja berkerja pada produk yang berbeda dapat digambarkan
sebagai suatu himpunan pertidaksamaan binary atau bisa menggunakan global
constraint all-different. Untuk menggambarkan profit dari pekerja, kita bisa
menggunakan constraint element, kemudian jumlah profit perorangan harus paling
rendah 19. Didefinisikan EWi sebagai profit dari pekerja Wi.
Model constraint dari permasalahan adalah: EW1+EW2+EW3+EW4 #>= 19
Programnya dengan menggunakan Sicstus Prolog dapat dilihat di Lampiran.
Scheduling dalam Transportasi
Scheduling adalah permasalahan dalam menentukan jadwal yang tepat atas suatu
pekerjaan terhadap sumber daya yang tersedia sesuai dengan constraint yang harus
dipenuhi. Contohnya adalah deadlines problem, resource capacities, precedence
constraints pada suatu urutan pekerjaan, dsbnya.
Salah satu permasalahan utama di Indonesia adalah transportasi. Tidak hanya
permasalahan kemacetan lalu lintas tapi juga kurang berfungsinya sarana angkutan
sehingga menyebabkan inefisiensi dan ketidaknyamanan para pemakai jalan. Jakarta
sebagai kota tersibuk di Indonesia telah menjalankan proyek busway sebagai sarana
transportasi umum yang dijanjikan dapat mengatasi masalah kemacetan dan
kenyamanan dalam transportasi. Namun sudah hampir dua tahun proyek ini dijalankan,
masalah kemacetan lalu lintas masih saja terjadi. Saat ini, pemerintah berencana untuk
mengembangkan monorail sebagai alternatif solusi untuk mengatasi permasalahan
kemacetan lalu lintas ini. Walaupun demikian, meskipun sudah banyak sarana
transportasi yang cukup nyaman tapi tidak dijalankan dengan baik tentu tidak ada
artinya juga. Salah satu cara yang dapat dilakukan untuk memaksimalkan pemanfaatan
sarana transportasi umum ini adalah memodelkan pola tingkah laku masyarakat dalam
transportasi kemudian merancang dan merencanakan schedule yang optimal dari sarana
transportasi di atas, sehingga tidak saling tumpang tindih tapi malah memudahkan dan
berguna bagi masyarakat.
Constraint programming dapat memodelkan dan menyelesaikan permasalahan pada
penjadwalan transportasi untuk mendapatkan solusi terbaik. Solusi terbaik berarti
bagaimana mengalokasikan sumber daya yang minimal (busway dan monorail) untuk
melayani maksimal jumlah pemakai jasa transportasi umum. Jika sarana transportasi
umum mudah untuk didapatkan, memiliki penjadwalan yang optimal, dan nyaman tentu
masyarakat akan memilih menggunakan fasilitas ini sebagai trasportasi utama mereka
terutama masyarakat yang selama ini memilih menggunakan mobil pribadi yang
walaupun kurang efisien tapi lebih nyaman dan mudah didapatkan. Dampak lebih jauh
permasalahan kemacetan lalu lintas juga dapat diselesaikan melalu cara ini.
Constraint dalam Bioinformatics
Dalam bioinformatic, constraint programming digunakan untuk merancang 3D struktur
protein pada susunan asam amino (struktur 3D yang menentukan fungsi protein).
Gambar 1 – 3D Protein Structure
Selain itu, constraint juga digunakan dalam menganalisa urutan dari DNA, misalnya
dalam memperkirakan jarak antara DNA dan membandingkan DNA.
Gambar 2 – Analisa Urutan dari DNA
5. Kesimpulan
Dalam tulisan ini, penulis menjelaskan pengantar singkat mengenai pemrograman
berbasis constraint (Constraint Programming atau CP) yang merupakan salah satu
bentuk dari pendekatan pemrograman declarative (declarative proramming) yang
banyak digunakan dalam menyelesaikan hard-real life problems. CP terdiri atas tiga
bagian utama yaitu variables, domains, dan constraints yang membatasi nilai dari
variables. CP juga dapat digunakan untuk mendapatkan solusi optimal (Constraint
Satisfaction Optimization Problem atau CSOP). CP dan CSOP diaplikasikan dalam
beberapa bidang planning and scheduling, bioinformatics, options trading, dsbnya yang
tentunya juga dapat diaplikasikan dalam berbagai sektor kehidupan di Indonesia.
Daftar Pustaka:
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
Roman Bartak – Charles University in Prague, NASSLLI2003, Foundations of
Constraint Satisfaction, http://kti.mff.cuni.cz/~bartak/, accessed on June 29
2005.
Roman Bartak – Charles University in Prague, Practical Constraints: A Tutorial
on Modelling with Constraints, CPDC 2003, http://kti.mff.cuni.cz/~bartak/,
accessed on June 29 2005.
Roman Bartak – Charles University in Prague, Constraint Programming – What
is behind? http://kti.mff.cuni.cz/~bartak/, accessed on June 29 2005.
Manfred W. Padberg & Minendra P. Rijal, Location, Scheduling, Design, and
Integer Programming, Kluwer Academic Publisher, USA, 1996.
Roman Bartak – Charles University in Prague, Constraint-Based Scheduling:
An Introduction for Newcomers, http://kti.mff.cuni.cz/~bartak/, accessed on
June 29 2005.
Kim Marriott and Peter J Stuckey, Programming with Constraints, An
Introduction, MIT Press, Cambridge Maasachusetts.
Edward Tsang, Foundations of Constraint Satisfaction, Academic Press,
University of Essex.
Francisco Azevedo, Constraint Solving Over Multi-Valued Logics; Application
to Digital Circuits, IOS Press, Netherland 2003.
Robert Klein, Scheduling of Resource-Constrained Projects, Kluwer Academic
Publisher, USA 1999.
Lampiran
% Author: Dewi
% Date: 7/14/2005
:- use_module(library(clpfd)).
/*
Goal: to schedule the workers to the products in a company.
| ?- assignment(X).
*/
% The first way = by using Workers as variables and Products as Values
assignment(X) :X=[W1, W2, W3, W4],
domain([W1, W2, W3, W4], 1, 4),
element(W1, [7, 1, 3, 4], EW1),
element(W2, [8, 2, 5, 1], EW2),
element(W3, [4, 3, 7, 2], EW3),
element(W4, [3, 1, 6, 3], EW4),
all_different([W1, W2, W3, W4]),
EW1+EW2+EW3+EW4 #>= 19,
labeling([ff], X).
% If we want to find an optimal solution, we have to append the following algorithm
/*
EW1+EW2+EW3+EW4=E,
maximize(labeling([ff],X), E).
% another way, by using products as variables and workers as values
/*
assignment(X):*/
/*
Y=[P1, P2, P3, P4],
domain(Y, 1, 4),
all_different(Y),
element(P1, [7, 8, 4, 3], EP1),
element(P2, [1, 2, 3, 1], EP2),
element(P3, [3, 5, 7, 6], EP3),
element(P4, [4, 1, 2, 3], EP4),
EP1+EP2+EP3+EP4 #>= 19,
labeling([ff], Y).
*/
Download