Pengoptimalan Batasan

Pengoptimalan batasan, atau pemrograman batasan (CP), adalah nama yang diberikan untuk mengidentifikasi solusi yang layak dari sekumpulan kandidat yang sangat besar, yang mana masalah tersebut dapat dimodelkan dari segi batasan arbitrer. Masalah CP muncul di banyak disiplin ilmu dan teknik. (Kata "pemrograman" adalah istilah yang sedikit keliru, mirip dengan istilah "komputer" yang dulunya berarti "orang yang menghitung". Di sini, "pemrograman" mengacu pada pengaturan rencana, bukan pemrograman dalam bahasa komputer.)

CP didasarkan pada kelayakan (menemukan solusi yang layak), bukan pengoptimalan (menemukan solusi yang optimal) dan berfokus pada batasan dan variabel, bukan fungsi objektif. Bahkan, masalah CP bahkan mungkin tidak memiliki fungsi objektif — tujuannya mungkin untuk mempersempit kumpulan kemungkinan solusi yang sangat besar ke subkumpulan yang lebih mudah dikelola dengan menambahkan batasan pada masalah.

Contoh masalah yang sangat sesuai untuk CP adalah penjadwalan karyawan. Masalah muncul ketika perusahaan yang beroperasi secara terus-menerus — seperti pabrik — perlu membuat jadwal mingguan untuk karyawannya. Berikut ini contoh yang sangat sederhana: perusahaan menjalankan tiga shift 8 jam per hari dan menugaskan tiga dari empat karyawannya untuk shift yang berbeda setiap hari, sekaligus memberikan hari libur keempat. Bahkan dalam kasus sekecil itu, jumlah kemungkinan jadwal sangat banyak: setiap hari, ada 4! = 4 * 3 * 2 * 1 = 24 kemungkinan penetapan karyawan, sehingga jumlah kemungkinan jadwal mingguan adalah 247, atau lebih dari 4,5 miliar. Biasanya akan ada batasan lain yang mengurangi jumlah solusi yang layak — misalnya, setiap karyawan bekerja setidaknya jumlah hari minimum per minggu. Metode CP melacak solusi mana yang tetap layak saat Anda menambahkan batasan baru, sehingga menjadikannya alat yang efektif untuk memecahkan masalah penjadwalan yang besar dan di dunia nyata.

CP memiliki komunitas yang luas dan sangat aktif di seluruh dunia dengan jurnal ilmiah khusus, konferensi, dan berbagai teknik pemecahan masalah. CP telah berhasil diterapkan dalam perencanaan, penjadwalan, dan banyak domain lainnya dengan batasan heterogen.

Alat

Google menyediakan beberapa cara untuk menyelesaikan masalah CP:

  • Pemecah CP-SAT: Pemecah pemrograman batasan yang menggunakan metode SAT (kepuasan).
  • Pemecah CP asli: Pemecah pemrograman batasan yang digunakan di library perutean.

Jika masalah Anda dapat dimodelkan dengan tujuan linear dan batasan linear, Anda memiliki masalah pemrograman linear dan harus mempertimbangkan MPSolver. (Namun, masalah pemilihan rute biasanya paling tepat diselesaikan dengan library pemilihan rute kendaraan meskipun dapat direpresentasikan dengan model linear.)

Contoh

Bagian berikutnya menjelaskan pemecah CP-SAT, pemecah masalah OR-Tools utama untuk pemrograman batasan. (SAT adalah singkatan dari satisfiability: pemecah masalah menggunakan teknik untuk memecahkan masalah SAT bersama dengan metode CP.)

Berikut adalah beberapa contoh masalah penjadwalan yang sangat cocok untuk pemecah masalah CP-SAT:

Dua masalah CP klasik adalah masalah N-queens dan puzzle kriptoaritmatika.