"Gopher Memegang Aturan"
import "github.com/hyperjumptech/grule-rule-engine"
Grule adalah perpustakaan Rule Engine untuk bahasa pemrograman Go (Golang). Terinspirasi oleh JBOSS Drools yang terkenal, dan dilakukan dengan cara yang lebih sederhana.
Seperti Drools , Grule memiliki DSL atau Bahasa Khusus Domainnya sendiri.
Di bawah ini adalah contoh DRL Drools atau Drools Rule Language:
rule "SpeedUp"
salience 10
when
$TestCar : TestCarClass( speedUp == true && speed < maxSpeed )
$DistanceRecord : DistanceRecordClass()
then
$TestCar.setSpeed($TestCar.Speed + $TestCar.SpeedIncrement);
update($TestCar);
$DistanceRecord.setTotalDistance($DistanceRecord.getTotalDistance() + $TestCar.Speed);
update($DistanceRecord);
end
GRL Grule adalah sebagai berikut:
rule SpeedUp "When testcar is speeding up we keep increase the speed." salience 10 {
when
TestCar . SpeedUp == true && TestCar . Speed < TestCar . MaxSpeed
then
TestCar . Speed = TestCar . Speed + TestCar . SpeedIncrement ;
DistanceRecord . TotalDistance = DistanceRecord . TotalDistance + TestCar . Speed ;
}
Tidak ada penjelasan yang lebih baik dari artikel yang ditulis oleh Martin Fowler. Anda dapat membaca artikelnya di sini (RulesEngine oleh Martin Fowler).
Diambil dari situs TutorialsPoint (dengan sedikit modifikasi),
Grule Rule Engine adalah Sistem Aturan Produksi yang menggunakan pendekatan berbasis aturan untuk mengimplementasikan Sistem Pakar. Sistem Pakar adalah sistem berbasis pengetahuan yang menggunakan representasi pengetahuan untuk memproses pengetahuan yang diperoleh menjadi basis pengetahuan yang dapat digunakan untuk penalaran.
Sistem Aturan Produksi Turing lengkap dengan fokus pada representasi pengetahuan untuk mengekspresikan logika proposisional dan orde pertama secara ringkas, tidak ambigu, dan deklaratif.
Inti dari Sistem Aturan Produksi adalah Mesin Inferensi yang dapat menskalakan sejumlah besar aturan dan fakta. Mesin Inferensi mencocokkan fakta dan data dengan Aturan Produksi – disebut juga Produksi atau sekadar Aturan – untuk menyimpulkan kesimpulan yang menghasilkan tindakan.
Aturan Produksi adalah struktur dua bagian yang menggunakan logika tingkat pertama untuk mempertimbangkan representasi pengetahuan. Mesin aturan bisnis adalah sistem perangkat lunak yang menjalankan satu atau lebih aturan bisnis dalam lingkungan produksi runtime.
Mesin Aturan memungkinkan Anda menentukan “Apa yang Harus Dilakukan” dan bukan “Bagaimana melakukannya”.
(juga diambil dari TutorialsPoint)
Aturan adalah potongan pengetahuan yang sering diungkapkan sebagai, "Ketika kondisi tertentu terjadi, maka lakukanlah beberapa tugas."
When
< Condition is true >
Then
< Take desired Action >
Bagian terpenting dari suatu Peraturan adalah bagian kapannya. Jika bagian kapan terpenuhi, maka bagian tersebut terpicu.
rule < rule_name > < rule_description >
< attribute > < value > {
when
< conditions >
then
< actions >
}
Aturan memudahkan untuk mengungkapkan solusi terhadap masalah sulit dan mendapatkan verifikasi juga. Berbeda dengan kode, Aturan ditulis dengan bahasa yang tidak terlalu rumit; Analis Bisnis dapat dengan mudah membaca dan memverifikasi serangkaian aturan.
Data berada di Objek Domain dan logika bisnis berada di Aturan. Tergantung pada jenis proyeknya, pemisahan semacam ini bisa sangat menguntungkan.
Dengan menggunakan Aturan, Anda membuat gudang pengetahuan (basis pengetahuan) yang dapat dieksekusi. Ini adalah satu kebenaran dalam kebijakan bisnis. Idealnya, Aturan harus mudah dibaca sehingga bisa juga berfungsi sebagai dokumentasi.
Karena aturan bisnis sebenarnya diperlakukan sebagai data. Menyesuaikan aturan menurut sifat dinamis bisnis menjadi hal yang sepele. Tidak perlu membuat ulang kode atau menerapkan seperti yang dilakukan pengembangan perangkat lunak pada umumnya - Anda hanya perlu meluncurkan serangkaian aturan dan menerapkannya pada repositori pengetahuan.
Kasus-kasus berikut lebih baik diselesaikan dengan mesin aturan:
Sebuah sistem pakar yang harus mengevaluasi fakta untuk memberikan semacam kesimpulan dunia nyata. Jika tidak menggunakan mesin aturan gaya RETE, seseorang akan mengkodekan serangkaian pernyataan if
/ else
yang berjenjang, dan permutasi kombinasi bagaimana pernyataan tersebut dapat dievaluasi akan dengan cepat menjadi tidak mungkin untuk dikelola. Mesin aturan berbasis tabel mungkin cukup, namun masih lebih rapuh terhadap perubahan, dan tidak terlalu mudah untuk dikodekan. Sistem seperti Grule memungkinkan Anda mendeskripsikan aturan dan fakta sistem, sehingga Anda tidak perlu mendeskripsikan bagaimana aturan dievaluasi berdasarkan fakta tersebut, dan menyembunyikan sebagian besar kerumitan tersebut dari Anda.
Sebuah sistem penilaian. Misalnya, sistem bank mungkin ingin membuat "skor" untuk setiap pelanggan berdasarkan catatan transaksi pelanggan (fakta). Kita dapat melihat perubahan skor mereka berdasarkan seberapa sering mereka berinteraksi dengan bank, berapa banyak uang yang mereka transfer masuk dan keluar, seberapa cepat mereka membayar tagihan, berapa besar bunga yang mereka peroleh, berapa banyak penghasilan mereka untuk diri mereka sendiri atau untuk bank, dan segera. Mesin aturan dapat disediakan oleh pengembang, dan spesifikasi fakta serta aturan kemudian dapat diberikan oleh ahli di bidang analisis pelanggan bank. Memisahkan tim-tim yang berbeda ini menempatkan tanggung jawab pada tempatnya.
Permainan komputer. Status pemain, penghargaan, penalti, kerusakan, skor, dan sistem probabilitas adalah banyak contoh berbeda di mana aturan memainkan peran penting dalam sebagian besar permainan komputer. Aturan-aturan ini dapat berinteraksi dengan cara yang sangat kompleks, sering kali dengan cara yang tidak diperkirakan oleh pengembang. Pengkodean situasi dinamis ini melalui penggunaan bahasa skrip (misalnya Lua) bisa menjadi sangat rumit, dan mesin aturan dapat sangat membantu menyederhanakan pekerjaan.
Sistem klasifikasi. Ini sebenarnya merupakan generalisasi dari sistem pemeringkatan yang dijelaskan di atas. Dengan menggunakan mesin aturan, kita dapat mengklasifikasikan hal-hal seperti kelayakan kredit, identifikasi biokimia, penilaian risiko produk asuransi, potensi ancaman keamanan, dan masih banyak lagi.
Sistem nasehat/saran. Sebuah "aturan" hanyalah jenis data lain, yang menjadikannya kandidat utama untuk didefinisikan oleh program lain. Program ini dapat berupa sistem pakar lain atau kecerdasan buatan. Aturan dapat dimanipulasi oleh sistem lain untuk menangani jenis fakta baru atau informasi baru yang ditemukan tentang domain yang ingin dimodelkan oleh kumpulan aturan tersebut.
Ada banyak kasus penggunaan lain yang mendapat manfaat dari penggunaan Rule-Engine. Kasus-kasus di atas hanya mewakili sebagian kecil dari kasus-kasus potensial.
Namun, penting untuk diingat bahwa Rule-Engine tentu saja bukanlah solusi terbaik. Ada banyak alternatif untuk memecahkan masalah "pengetahuan" dalam perangkat lunak, dan alternatif tersebut harus digunakan pada tempat yang paling tepat. Seseorang tidak akan menggunakan mesin aturan yang mana cabang sederhana if
/ else
sudah cukup, misalnya.
Ada hal lain yang perlu diperhatikan: beberapa penerapan mesin aturan sangat mahal, namun banyak bisnis mendapatkan begitu banyak manfaat dari penerapannya sehingga biaya menjalankannya dapat dengan mudah diimbangi dengan nilai tersebut. Bahkan untuk kasus penggunaan yang cukup rumit, manfaat dari mesin aturan yang kuat yang dapat memisahkan tim dan menjinakkan kompleksitas bisnis tampaknya cukup jelas.
Halaman dokumentasi di sini
Untuk mendalami Tutorial, lihat Dokumen Wiki di sini di Github.
Loading rules into KnowledgeBase
:
Untuk memuat 100
aturan ke dalam KnowledgeBase dibutuhkan 99342047 ns/op
(mengambil nilai tertinggi) yaitu sama dengan ~99.342047ms
dan ( 49295906 B/op
) ~49.295906MB
memori per operasi
Untuk memuat 1000
aturan ke dalam KnowledgeBase dibutuhkan 933617752 ns/op
(mengambil nilai tertinggi) yaitu sama dengan ~933.617752ms
dan ( 488126636 B/op
) ~488.126636
memori per operasi
Executing rules against a fact
:
Untuk mengeksekusi fakta terhadap 100 aturan, Grule Engine mengambil ~9697 ns/op
(mengambil nilai tertinggi sebagai basis) yang hampir ~0.009697ms
dan 3957 B/op
yang cukup cepat.
Untuk mengeksekusi fakta terhadap 1000 aturan, Grule Engine mengambil ~568959 ns/op
(mengambil nilai tertinggi sebagai basis) yang hampir ~0.568959ms
dan 293710 B/op
yang juga cukup cepat.
Anda dapat membaca laporan detailnya di sini
Ya. Kami membutuhkan kontributor untuk menjadikan Grule lebih baik dan berguna bagi Komunitas Open Source.
Jika Anda benar-benar ingin membantu kami, cukup Fork
proyeknya dan ajukan Permintaan Tarik. Silakan baca Panduan Kontribusi dan Kode Etik kami