Hubungan antara Mesin Aturan Bisnis dan bahasa Pemrograman Kendala

20

Jika seseorang melihat (mungkin lebih tua) manual Drools atau mesin aturan lainnya, salah satu ilustrasi dari nilai tambah mereka adalah memecahkan teka-teki seperti puzzle Miss Manners (manual Drools). Sekarang, teka-teki tersebut diformulasikan dan dipecahkan secara alami menggunakan Prolog atau bahasa Constraint Programming yang lebih baru, dan orang bertanya-tanya mengapa ada orang yang akan menggunakan Drools untuk tujuan ini. Nilai tambah yang diberikan Prolog dan CPL dalam hal ini adalah kemampuan mereka untuk secara alami merumuskan teka-teki sebagai seperangkat predikat logis dan secara otomatis mencari ruang solusi (dengan CPL lebih efisien dalam hal ini). Tapi apa nilai tambah produk seperti Drools (maksud saya selain lonceng dan peluit mengambil, misalnya, file Excel dan menerjemahkannya ke dalam seperangkat aturan)?

Lebih khusus lagi, Prolog mengimplementasikan pencarian backtrack, CLP mengimplementasikan pencarian backtrack dengan propagasi kendala, dan karena itu alih-alih mencari, sehingga dapat dikatakan, seluruh produk ruang Cartesian untuk variabel individual, mereka memangkas sebagian besar ruang produk ini. Inilah yang membuatnya efektif dan berguna. Prolog dan CLP dibahas dengan baik dalam literatur.

Di sisi lain, sementara itu jelas bahwa algoritma Rete cache set aturan dalam bentuk beberapa struktur data, sehingga (untuk pemahaman saya) membuatnya lebih efektif untuk mengevaluasi output jika beberapa input telah berubah, dan memberi sarana untuk secara efektif memperbarui struktur data ini untuk perubahan tambahan, sulit (bagi saya) untuk memahami ide dasar, dan bahkan lebih efektif lagi, efektivitasnya (dibandingkan dengan apa? dengan Prolog? ke CLP)? Sayangnya, sulit untuk menemukan referensi bagus yang melihat algoritma Rete dalam konteks yang lebih luas ini.

Dokumentasi Drools sayangnya tidak terlalu informatif dalam hal ini. Yang paling bisa saya temukan adalah "Algoritme Rete, algoritma Leaps, dan turunannya seperti Retrooo Drools (dan Leaps), menyediakan cara yang sangat efisien untuk mencocokkan pola aturan dengan data objek domain Anda. Ini terutama efisien ketika Anda memiliki kumpulan data yang jangan berubah seluruhnya (karena mesin aturan dapat mengingat pertandingan sebelumnya). Algoritma ini terbukti pertempuran ". Sangat efisien - dibandingkan dengan apa? Pertempuran terbukti - dapatkah satu titik ke aplikasi dunia nyata?

Saya akan sangat menghargai jika seseorang dapat menjelaskan lebih lanjut tentang hal ini atau memberikan referensi yang valid.

John Donn
sumber
1
Pertanyaan ini agak luas dan tidak benar-benar 'milik' di sini ...
3
Yah, saya khawatir bahwa untuk cstheory.stackexchange.com terlalu "berorientasi pada industri" .. Apa yang benar-benar menarik minat saya apa poin dasar tentang mesin aturan bisnis dan mengapa menggunakan mereka lebih menguntungkan daripada menggunakan Prolog atau CLP. Jika Anda memiliki saran untuk tempat yang lebih baik untuk mempostingnya, saya akan senang mendengarnya.

Jawaban:

7

Saya pikir argumen untuk banyak Sistem Aturan Bisnis komersial menggunakan mesin forward chaining (mis. Drools) vs backward chaining (Prolog) adalah bahwa banyak "programmer Joe" digunakan untuk berurusan dengan logika IF / THEN / ELSE - dan ini membuatnya menjadi keseluruhan jauh lebih mudah dipasarkan ke massa. Saya tidak berpikir manfaat teknis ada hubungannya dengan itu.

Saya memposting ini sebagai komunitas wiki karena ini pendapat saya yang agak berwarna dan bukan jawaban yang nyata.

NealB
sumber
4

Drools baru-baru ini menambahkan rantai ke belakang, dengan mulus ke dalam bahasa drl. Jadi sekarang Anda mendapatkan manfaat dari kedua kata tersebut.

Itu belum memiliki semua fitur prolog, misalnya tidak ada 'cut'. Tetapi hasil unifikasi dan deriviasi pohon akan berfungsi seperti yang diharapkan orang, yaitu dukungan penuh untuk penutupan sementara. Dan fitur akan terus tumbuh, seperti dukungan untuk tabling, cut, penyatuan ekspresi.

Anda dapat menggunakan aturan "kueri" maju "mundur" atau mundur secara terpisah, atau menggunakannya bersama-sama; di mana aturan reaktif dapat bergabung dengan hasil kueri.

Satu hal yang kami tambahkan adalah permintaan kami dapat sepenuhnya terwujud sebagai tampilan reaktif. Jadi, Anda dapat memanggil kuota penutupan transititve dan akan tetap terbuka secara reaktif dan menanggapi perubahan dalam data yang digulirkan di bawah tanah - tanpa harus menyurvei kembali kueri.

Lihat bagian Baru & Catatan untuk kapan "rantai mundur" ditambahkan: http://blog.athico.com/2012/05/drools-540final-released.html

Jadi saya pikir pertanyaan Anda akan lebih baik, mengapa Anda ingin menggunakan yang lain, ketika Anda memiliki Hybrid Reasoning System seperti Drools? http://blog.athico.com/2012/05/drools-54-artificial-intelligence.html

Tandai Proctor
sumber
3

Saya setuju dengan Anda bahwa Prolog lebih kuat daripada Drools. Tapi saya pikir Drools menarik bagi klien perusahaan karena alat front-end mewah dan integrasi yang dimiliki Drools dengan aplikasi perusahaan populer lainnya. Saya pikir aturan-aturan ini kemudian bertahan ke database di mana banyak mesin Drools dapat menggunakannya dengan segera.

Mengubah aturan selama runtime adalah cara yang cukup dinamis untuk menggunakan mesin Drools dan didukung. Saya percaya Prolog dapat memiliki sistem yang serupa, tetapi ini tidak ada AFAIK. Ke mana aturan ini atau aturan yang diedit pergi? ditegaskan dalam db program? Saat restart, aturan ini akan hilang. Akankah kita bertahan mereka ke db bersama dan kemudian menegaskannya ke dalam program sesuai kebutuhan? Prolog mungkin bisa digunakan, tetapi Drools sudah terintegrasi dengan baik ke dalam tumpukan aplikasi perusahaan, jadi mengapa membuat diri Anda gila (kecuali untuk bersenang-senang)?


"Saya setuju dengan Anda bahwa Prolog lebih kuat daripada Drools. Tapi saya pikir Drools menarik bagi klien perusahaan karena alat canggih dan integrasi yang dimiliki Drools dengan aplikasi perusahaan populer lainnya"

Sesuai komentar saya di atas, Drools sekarang mengimplementasikan pohon derivasi berbasis tujuan dengan cara yang sama seperti Prolog. Lebih lanjut Drools dapat melakukan sesuatu dengan pohon deivasi yang tidak bisa dilakukan oleh kebanyakan sistem Prolog lainnya. Drools dapat mematerialisasi pohon derivasi menjadi tampilan dan menerima pembaruan reaktif saat istilah grouond yang mendasarinya berubah.

DaveEdelstein
sumber
2
@MarkProctor, secara umum, hal-hal yang bertentangan dengan koreksi harus dilakukan melalui komentar dan (berpotensi) downvoting, sebagai lawan mengedit konten jawaban orang lain.
Charles Duffy
2

Air liur dimulai dengan didasarkan pada CLIPS . CLIPS adalah " sistem produksi " yang lebih tua , dan seperti semua sistem produksi adalah sistem rantai maju. Banyak penelitian tentang Rete telah "menjadi gelap" karena pencetusnya akhirnya akan bekerja untuk perusahaan-perusahaan yang algoritmanya adalah kekayaan intelektual. Rete versi 3 dimiliki oleh orang-orang yang membuat skor FICO , jadi ya, itu "pertempuran terbukti".

Tangurena
sumber