"غوفر يحمل القواعد"
import "github.com/hyperjumptech/grule-rule-engine"
Grule هي مكتبة Rule Engine للغة البرمجة Go (Golang). مستوحاة من لعبة JBOSS Drools المشهورة، ويتم تنفيذها بطريقة أبسط بكثير.
مثل Drools ، لدى Grule لغة DSL خاصة بها أو لغة خاصة بالمجال.
فيما يلي مثال على لغة DRL أو Drools Rule الخاصة بـ Drools:
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 هو كما يلي:
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 ;
}
لا يوجد تفسير أفضل من المقال الذي كتبه مارتن فاولر. يمكنك قراءة المقال هنا (RulesEngine بقلم مارتن فاولر).
مأخوذة من موقع TutorialsPoint (مع تعديلات طفيفة)،
محرك Grule Rule هو نظام قواعد إنتاج يستخدم النهج القائم على القواعد لتنفيذ نظام خبير. الأنظمة الخبيرة هي أنظمة قائمة على المعرفة تستخدم تمثيلات المعرفة لمعالجة المعرفة المكتسبة في قاعدة معرفية يمكن استخدامها للاستدلال.
نظام قواعد الإنتاج هو نظام تورينج الكامل مع التركيز على تمثيل المعرفة للتعبير عن المنطق المقترح والمنطق الأول بطريقة موجزة وغير غامضة وتصريحية.
إن عقل نظام قواعد الإنتاج هو محرك استدلالي يمكنه التوسع إلى عدد كبير من القواعد والحقائق. يقوم محرك الاستدلال بمطابقة الحقائق والبيانات مع قواعد الإنتاج - والتي تسمى أيضًا الإنتاجات أو القواعد فقط - لاستنتاج الاستنتاجات التي تؤدي إلى اتخاذ إجراءات.
قاعدة الإنتاج عبارة عن بنية مكونة من جزأين تستخدم منطق الدرجة الأولى للتفكير في تمثيل المعرفة. محرك قواعد العمل هو نظام برمجي ينفذ قاعدة عمل واحدة أو أكثر في بيئة إنتاج وقت التشغيل.
يتيح لك محرك القواعد تحديد "ما يجب فعله" وليس "كيفية القيام بذلك".
(مأخوذة أيضًا من TutorialsPoint)
القواعد عبارة عن أجزاء من المعرفة غالبًا ما يتم التعبير عنها على النحو التالي: "عند حدوث بعض الظروف، قم ببعض المهام".
When
< Condition is true >
Then
< Take desired Action >
الجزء الأكثر أهمية من القاعدة هو الجزء الخاص بها. إذا تم استيفاء الجزء "متى" ، فسيتم تشغيل الجزء "بعد ذلك" .
rule < rule_name > < rule_description >
< attribute > < value > {
when
< conditions >
then
< actions >
}
تسهل القواعد التعبير عن حلول للمشكلات الصعبة والحصول على عمليات التحقق أيضًا. على عكس التعليمات البرمجية، تتم كتابة القواعد بلغة أقل تعقيدًا؛ يمكن لمحللي الأعمال قراءة مجموعة من القواعد والتحقق منها بسهولة.
البيانات موجودة في كائنات المجال ومنطق الأعمال موجود في القواعد. اعتمادًا على نوع المشروع، يمكن أن يكون هذا النوع من الفصل مفيدًا جدًا.
باستخدام القواعد، يمكنك إنشاء مستودع للمعرفة (قاعدة المعرفة) وهو قابل للتنفيذ. إنها نقطة الحقيقة الوحيدة بالنسبة لسياسة الأعمال. ومن الناحية المثالية، تكون القواعد سهلة القراءة بحيث يمكن استخدامها أيضًا كوثائق.
نظرًا لأن قواعد العمل يتم التعامل معها فعليًا على أنها بيانات. إن تعديل القاعدة وفقاً للطبيعة الديناميكية للأعمال يصبح أمراً تافهاً. لا حاجة إلى إعادة بناء التعليمات البرمجية أو النشر كما يفعل تطوير البرامج العادي - ما عليك سوى نشر مجموعات من القواعد وتطبيقها على مستودع المعرفة.
يتم حل الحالات التالية بشكل أفضل باستخدام محرك القواعد:
نظام خبير يجب عليه تقييم الحقائق لتقديم نوع من الاستنتاجات الواقعية. إذا لم يتم استخدام محرك قواعد على غرار RETE، فيمكن للمرء ترميز مجموعة متتالية من عبارات if
/ else
، وسرعان ما ستصبح إدارة التباديل بين مجموعات كيفية تقييم تلك البيانات مستحيلة. قد يكون محرك القواعد المبني على الجدول كافيًا، لكنه لا يزال أكثر هشاشة في مواجهة التغيير، وليس من السهل جدًا برمجته. يسمح لك نظام مثل Grule بوصف قواعد وحقائق نظامك، مما يحررك من الحاجة إلى وصف كيفية تقييم القواعد مقابل تلك الحقائق، ويخفي عنك الجزء الأكبر من هذا التعقيد.
نظام تصنيف. على سبيل المثال، قد يرغب النظام البنكي في إنشاء "نقاط" لكل عميل بناءً على سجلات معاملات العميل (الحقائق). يمكننا أن نرى تغير درجاتهم بناءً على عدد المرات التي يتفاعلون فيها مع البنك، ومقدار الأموال التي يحولونها إلى الداخل والخارج، ومدى سرعة دفع فواتيرهم، ومقدار الفائدة المتراكمة، ومقدار ما يكسبونه لأنفسهم أو للبنك، و قريباً. ويمكن توفير محرك القواعد من قبل المطور، ومن ثم يمكن توفير مواصفات الحقائق والقواعد من قبل خبراء متخصصين داخل قسم تحليلات العملاء بالبنك. إن فصل هذه الفرق المختلفة يضع المسؤوليات في مكانها الصحيح.
العاب كمبيوتر. تعد حالة اللاعب والمكافآت والعقوبات والأضرار والنتائج وأنظمة الاحتمالات العديد من الأمثلة المختلفة حيث تلعب القواعد دورًا مهمًا في معظم ألعاب الكمبيوتر. يمكن أن تتفاعل هذه القواعد بطرق معقدة للغاية، وفي كثير من الأحيان بطرق لم يتوقعها المطور. يمكن أن يصبح ترميز هذه المواقف الديناميكية من خلال استخدام لغة البرمجة النصية (مثل Lua) أمرًا معقدًا للغاية، ويمكن أن يساعد محرك القواعد في تبسيط العمل بشكل كبير.
أنظمة التصنيف. هذا في الواقع تعميم لنظام التصنيف الموصوف أعلاه. باستخدام محرك القواعد، يمكننا تصنيف أشياء مثل الأهلية الائتمانية، وتحديد الكيمياء الحيوية، وتقييم المخاطر لمنتجات التأمين، والتهديدات الأمنية المحتملة، وغير ذلك الكثير.
نظام النصائح والاقتراحات. "القاعدة" هي ببساطة نوع آخر من البيانات، مما يجعلها مرشحًا رئيسيًا للتعريف بواسطة برنامج آخر. يمكن أن يكون هذا البرنامج نظامًا خبيرًا آخر أو ذكاءً اصطناعيًا. يمكن التلاعب بالقواعد بواسطة أنظمة أخرى من أجل التعامل مع أنواع جديدة من الحقائق أو المعلومات المكتشفة حديثًا حول المجال الذي تهدف مجموعة القواعد إلى تصميمه.
هناك العديد من حالات الاستخدام الأخرى التي قد تستفيد من استخدام Rule-Engine. الحالات المذكورة أعلاه لا تمثل سوى عدد قليل من الحالات المحتملة.
ومع ذلك، من المهم أن نتذكر أن محرك القواعد ليس الحل السحري بالطبع. توجد العديد من البدائل لحل مشاكل "المعرفة" في البرمجيات، ويجب استخدام تلك البدائل حيثما تكون أكثر ملاءمة. لن يستخدم المرء محرك قاعدة حيث يكفي فرع if
/ else
البسيط، على سبيل المثال.
هناك شيء آخر يجب ملاحظته: بعض تطبيقات محركات القواعد مكلفة للغاية، ومع ذلك تكتسب العديد من الشركات قيمة كبيرة منها بحيث يتم تعويض تكلفة تشغيلها بسهولة بهذه القيمة. حتى بالنسبة لحالات الاستخدام المعقدة إلى حد ما، فإن فائدة محرك القواعد القوي الذي يمكنه فصل الفرق وترويض تعقيد الأعمال تبدو واضحة تمامًا.
صفحة التوثيق هنا
للتعمق في البرنامج التعليمي، راجع مستندات Wiki هنا على Github.
Loading rules into KnowledgeBase
:
لتحميل 100
قاعدة في KnowledgeBase، استغرق الأمر 99342047 ns/op
(أخذ القيمة الأعلى) التي تساوي ~99.342047ms
و( 49295906 B/op
) ~49.295906MB
من الذاكرة لكل عملية
لتحميل 1000
قاعدة في KnowledgeBase، استغرق الأمر 933617752 ns/op
(أخذ القيمة الأعلى) التي تساوي ~933.617752ms
و( 488126636 B/op
) ~488.126636
ذاكرة لكل عملية
Executing rules against a fact
:
لتنفيذ حقيقة مقابل 100 قاعدة، استغرق Grule Engine ~9697 ns/op
(أخذ القيمة الأعلى كأساس) والتي لا تكاد ~0.009697ms
و 3957 B/op
وهو سريع جدًا.
لتنفيذ حقيقة مقابل 1000 قاعدة، استغرق Grule Engine ~568959 ns/op
(أخذ القيمة الأعلى كقاعدة) والتي لا تكاد تصل ~0.568959ms
و 293710 B/op
وهي أيضًا سريعة جدًا.
يمكنك قراءة التقرير التفصيلي هنا
نعم. نحن بحاجة إلى مساهمين لجعل Grule أفضل وأكثر فائدة لمجتمع المصادر المفتوحة.
إذا كنت تريد مساعدتنا حقًا، فما عليك سوى Fork
المشروع والتقدم بطلب سحب. يرجى قراءة دليل المساهمة ومدونة قواعد السلوك الخاصة بنا