إرضاء القيود
في مجال الذكاء الاصطناعي وبحوث العمليات ، يُعرف إرضاء القيود بأنه عملية إيجاد حل من خلال مجموعة من القيود التي تفرض شروطًا يجب أن تستوفيها المتغيرات . [ 1 ] وبالتالي، فإن الحل هو تعيين قيم للمتغيرات بحيث تستوفي جميع القيود ، أي نقطة في المنطقة الممكنة .
تعتمد التقنيات المستخدمة في حل القيود على نوع القيود المطروحة. غالبًا ما تُستخدم القيود المفروضة على نطاق محدود ، لدرجة أن مسائل حل القيود تُعرَّف عادةً بأنها مسائل قائمة على قيود في نطاق محدود. تُحل هذه المسائل عادةً عن طريق البحث ، وتحديدًا باستخدام أسلوب التراجع أو البحث المحلي . يُعد نشر القيود مجموعة أخرى من الأساليب المستخدمة في هذه المسائل؛ ومعظمها غير مكتمل بشكل عام، أي أنها قد تحل المسألة أو تثبت عدم قابليتها للحل، ولكن ليس دائمًا. تُستخدم أساليب نشر القيود أيضًا بالتزامن مع البحث لتسهيل حل المسألة. من أنواع القيود الأخرى التي تُدرس، القيود المفروضة على الأعداد الحقيقية أو النسبية ؛ ويتم حل المسائل المتعلقة بهذه القيود عن طريق حذف المتغيرات أو خوارزمية السمبلكس .
نشأت مسألة إرضاء القيود كمشكلة عامة في مجال الذكاء الاصطناعي في سبعينيات القرن العشرين (انظر على سبيل المثال ( Laurière 1978 ) ). ومع ذلك، عندما تُعبَّر القيود كمعادلات خطية متعددة المتغيرات تُعرِّف متباينات (أو عدم متباينات)، فإن هذا المجال يعود إلى جوزيف فورييه في القرن التاسع عشر: فقد سمح اختراع جورج دانتزيج لخوارزمية سيمبلكس للبرمجة الخطية (وهي حالة خاصة من التحسين الرياضي) في عام 1946 بتحديد حلول ممكنة لمسائل تحتوي على مئات المتغيرات.
خلال ثمانينيات وتسعينيات القرن العشرين، تم تطوير دمج القيود في لغات البرمجة . وكانت لغة برولوج أول لغة مصممة خصيصًا لدعم برمجة القيود بشكل جوهري . ومنذ ذلك الحين، أصبحت مكتبات برمجة القيود متاحة في لغات أخرى، مثل سي++ أو جافا (على سبيل المثال، تشوكو لجافا [ 2 ] ).
مشكلة إرضاء القيود
كما عُرِّفت في الأصل في مجال الذكاء الاصطناعي، تُحدِّد القيود القيم الممكنة التي قد تأخذها مجموعة من المتغيرات في عالم مُعطى. العالم الممكن هو مجموعة كاملة من القيم المُخصصة للمتغيرات، والتي تُمثِّل طريقةً يُمكن أن يكون عليها العالم (حقيقيًا كان أم مُتخيَّلًا). [ 3 ] وبشكلٍ غير رسمي، المجال المحدود هو مجموعة محدودة من العناصر العشوائية. تتضمن مسألة إرضاء القيود على هذا المجال مجموعة من المتغيرات التي لا يُمكن أن تأخذ قيمها إلا من هذا المجال، ومجموعة من القيود، حيث يُحدِّد كل قيد القيم المسموح بها لمجموعة من المتغيرات. حل هذه المسألة هو تقييم المتغيرات الذي يُرضي جميع القيود. بعبارة أخرى، الحل هو طريقة لتخصيص قيمة لكل متغير بحيث تُرضي هذه القيم جميع القيود.
في بعض الحالات، قد توجد متطلبات إضافية: قد لا يقتصر الاهتمام على الحل (وأسرع طريقة أو أكثرها كفاءة حسابية للوصول إليه) فحسب، بل يشمل أيضًا كيفية الوصول إليه؛ على سبيل المثال، قد يرغب المرء في الحل "الأبسط" ("الأبسط" بمعنى منطقي، وليس حسابيًا، ويجب تحديده بدقة). وهذا هو الحال غالبًا في ألعاب المنطق مثل سودوكو .
عملياً، غالباً ما تُصاغ القيود بصيغة مختصرة، بدلاً من سرد جميع قيم المتغيرات التي تُحقق القيد. ومن أكثر القيود استخداماً (بشكل بديهي) القيد الذي ينص على أن قيم المتغيرات المتأثرة يجب أن تكون جميعها مختلفة.
من بين المشكلات التي يمكن التعبير عنها كمشكلات إرضاء القيود، لغز الملكات الثماني ، ومسألة حل سودوكو ، والعديد من الألغاز المنطقية الأخرى، ومسألة الإرضاء البولياني ، ومشكلات الجدولة ، ومشكلات تقدير الخطأ المحدود ، ومشكلات متنوعة على الرسوم البيانية مثل مشكلة تلوين الرسوم البيانية .
على الرغم من أن المعادلات والمتباينات الحسابية لا تُدرج عادةً في التعريف المذكور أعلاه لمسألة إرضاء القيود، إلا أنها تُقيّد قيم المتغيرات التي تحتويها، وبالتالي يمكن اعتبارها شكلاً من أشكال القيود. مجالها هو مجموعة الأعداد (سواء كانت صحيحة أو نسبية أو حقيقية)، وهي مجموعة غير منتهية؛ لذلك، قد تكون علاقات هذه القيود غير منتهية أيضاً؛ على سبيل المثال،يحتوي على عدد لا نهائي من أزواج القيم المُرضية. غالبًا ما تُهمل المعادلات والمتباينات الحسابية ضمن تعريف "مسألة إرضاء القيود"، الذي يقتصر على نطاقات محدودة. ومع ذلك، تُستخدم بكثرة في برمجة القيود .
يمكن إثبات أن المتباينات أو المعادلات الحسابية الموجودة في بعض أنواع ألغاز المنطق المحدود مثل Futoshiki أو Kakuro (المعروفة أيضًا باسم Cross Sums) يمكن التعامل معها كقيود غير حسابية (انظر إرضاء القيود القائم على الأنماط وألغاز المنطق [ 4 ] ).
حل
تُحل مسائل إرضاء القيود في المجالات المحدودة عادةً باستخدام شكل من أشكال البحث . ومن أكثر التقنيات استخدامًا: أشكال مختلفة من التراجع ، ونشر القيود ، والبحث المحلي . وتُستخدم هذه التقنيات في المسائل ذات القيود غير الخطية .
تُستخدم طريقة حذف المتغيرات وخوارزمية السمبلكس لحل المعادلات والمتباينات الخطية ومتعددة الحدود، والمسائل التي تحتوي على متغيرات ذات نطاق غير محدود. وعادةً ما تُحل هذه المسائل كمسائل تحسين ، حيث تكون الدالة المُحسَّنة هي عدد القيود المُنتهكة.
تعقيد
يُعدّ حلّ مسألة إرضاء القيود على نطاق محدود مسألةً كاملةً من نوع NP بالنسبة لحجم النطاق. وقد أظهرت الأبحاث عددًا من الحالات الفرعية القابلة للمعالجة ، بعضها يحدّ من علاقات القيود المسموح بها، وبعضها الآخر يتطلب أن تشكّل نطاقات القيود شجرةً، ربما في نسخة مُعاد صياغتها من المسألة. كما أثبتت الأبحاث أيضًا وجود علاقات بين مسألة إرضاء القيود ومسائل في مجالات أخرى، مثل نظرية النماذج المحدودة .
البرمجة المقيدة
البرمجة المقيدة هي استخدام القيود كلغة برمجة لترميز المشكلات وحلها. ويتم ذلك غالبًا عن طريق تضمين القيود في لغة برمجة تُسمى اللغة المضيفة. نشأت البرمجة المقيدة من صياغة رسمية لمعادلات الحدود في لغة برولوج 2 ، مما أدى إلى إطار عمل عام لتضمين القيود في لغة برمجة منطقية . من أشهر اللغات المضيفة برولوج ، وسي++ ، وجافا ، ولكن استُخدمت لغات أخرى أيضًا.
برمجة المنطق المقيد
برنامج المنطق المقيد هو برنامج منطقي يحتوي على قيود ضمن نصوص بنوده. على سبيل المثال، البند `p` A(X):-X>0,B(X)هو بند يحتوي على القيد `p` X>0في نصه. يمكن أن توجد قيود أيضًا في الهدف. تُجمع القيود في الهدف وفي البنود المستخدمة لإثباته في مجموعة تُسمى مخزن القيود . تحتوي هذه المجموعة على القيود التي افترض المفسر أنها قابلة للتحقيق للمضي قدمًا في التقييم. ونتيجة لذلك، إذا اكتشف المفسر أن هذه المجموعة غير قابلة للتحقيق، فإنه يتراجع. تُعتبر معادلات الحدود، كما هو مستخدم في البرمجة المنطقية، شكلاً خاصًا من أشكال القيود، والتي يمكن تبسيطها باستخدام التوحيد . وبالتالي، يمكن اعتبار مخزن القيود امتدادًا لمفهوم الاستبدال المستخدم في البرمجة المنطقية العادية. أكثر أنواع القيود شيوعًا في برمجة المنطق المقيد هي القيود على الأعداد الصحيحة/النسبية/الحقيقية والقيود على المجالات المحدودة.
تم تطوير لغات برمجة منطقية مقيدة متزامنة . وهي تختلف اختلافًا جوهريًا عن البرمجة المنطقية المقيدة غير المتزامنة، إذ تهدف إلى برمجة العمليات المتزامنة التي قد لا تنتهي. يمكن اعتبار قواعد معالجة القيود شكلًا من أشكال البرمجة المنطقية المقيدة المتزامنة، ولكنها تُستخدم أحيانًا ضمن لغات البرمجة المنطقية المقيدة غير المتزامنة. وتتيح هذه القواعد إعادة كتابة القيود أو استنتاج قيود جديدة بناءً على صحة الشروط.
أدوات حل القيود
مجموعات أدوات إرضاء القيود هي مكتبات برمجية للغات البرمجة الإجرائية تُستخدم لترميز وحل مشكلة إرضاء القيود.
- حل قيود Cassowary ، وهو مشروع مفتوح المصدر لحل القيود (يمكن الوصول إليه من لغات C و Java و Python وغيرها).
- كوميت، لغة برمجة تجارية ومجموعة أدوات
- Gecode ، وهي مجموعة أدوات محمولة مفتوحة المصدر مكتوبة بلغة C++ تم تطويرها كتطبيق عالي الجودة وفعال للغاية لخلفية نظرية كاملة.
- Gelisp ، غلاف برمجي مفتوح المصدر وقابل للنقل من Gecode إلى Lisp . [ 5 ] https://gelisp.sourceforge.net/
- مُحسِّن IBM ILOG CP : مكتبات C++، Python ، Java، و.NET (مملوكة، مجانية للاستخدام الأكاديمي ). [ 6 ] خليفة برنامج ILOG Solver/Scheduler، الذي كان يُعتبر رائدًا في سوق برامج البرمجة المقيدة التجارية حتى عام 2006. [ 7 ]
- JaCoP ، حل قيود جافا مفتوح المصدر.
- Koalog ، وهو برنامج تجاري لحل القيود يعتمد على لغة جافا.
- logilab-constraint ، وهو برنامج مفتوح المصدر لحل القيود مكتوب بلغة بايثون خالصة مع خوارزميات نشر القيود.
- Minion ، وهو برنامج مفتوح المصدر لحل القيود مكتوب بلغة C++، مع لغة صغيرة لغرض تحديد النماذج/المشاكل.
- ZDC، وهو برنامج مفتوح المصدر تم تطويره في مشروع إرضاء القيود بمساعدة الحاسوب لنمذجة وحل مشاكل إرضاء القيود.
لغات برمجة القيود الأخرى
تُعدّ أدوات القيود وسيلةً لتضمين القيود في لغة برمجة إجرائية . مع ذلك، فهي تُستخدم فقط كمكتبات خارجية لترميز المشكلات وحلّها. أما لغة البرمجة "كاليديوسكوب" فتعتمد نهجًا يدمج القيود في لغة البرمجة الإجرائية .
كما تم تضمين القيود في لغات البرمجة الوظيفية .
انظر أيضاً
مراجع
- ↑ تسانغ، إدوارد (13 مايو 2014). أسس إرضاء القيود: النص الكلاسيكي . BoD – كتب حسب الطلب. ISBN 978-3-7357-2366-6أُرشف من الأصل في 6 أكتوبر 2024. تم الاطلاع عليه في 25 أغسطس 2018 .
- ↑ تشوكو: مكتبة جافا مفتوحة المصدر لبرمجة القيود. https://choco-solver.org تاريخ الوصول: ١٢ ديسمبر ٢٠٢١.
- ↑ "4.1.1 المتغيرات والعوالم ‣ 4.1 العوالم الممكنة، والمتغيرات، والقيود ‣ الفصل 4: الاستدلال بالقيود ‣ الذكاء الاصطناعي: أسس العوامل الحاسوبية، الطبعة الثانية" . مؤرشف من الأصل بتاريخ 29-11-2018 . تم الاطلاع عليه بتاريخ 29-11-2018 .
- ↑ (باللغة الإنجليزية) بيرتييه، دينيس (20 نوفمبر 2012). "حل القيود القائم على الأنماط وألغاز المنطق" . دار نشر لولو . رقم ISBN 978-1-291-20339-4تم الاطلاع عليه بتاريخ 24 أكتوبر 2012 .
{{cite news}}: CS1 maint: deprecated archiveal service ( link ) - ↑ ماوريسيو تورو، كارلوس أغون، كاميلو رويدا، جيرارد أساياغ. " GELISP: إطار عمل لتمثيل مشاكل إرضاء القيود الموسيقية واستراتيجيات البحث. مؤرشف بتاريخ 6 أكتوبر 2024 في Wayback Machine ." مجلة تكنولوجيا المعلومات النظرية والتطبيقية 86 (2). 2016. 327-331.
- ↑ لابوري، ب.، روجيري، ج.، شو، ب.، فيليم، ب. (2018). "مُحسِّن IBM ILOG CP للجدولة". القيود . 23 (2): 210-250 . doi : 10.1007/s10601-018-9281-x . S2CID 4360357 .
- ↑ روسي، فرانشيسكا ؛ بيتر فان بيك؛ توبي والش (2006). دليل برمجة القيود . إلسيفير. ص 157. ISBN 978-0-444-52726-4.
- آبت، كريستوف (2003). مبادئ البرمجة المقيدة . مطبعة جامعة كامبريدج. ISBN 978-0-521-82583-2.
- ديتشر، رينا (2003). معالجة القيود . مورغان كوفمان. ISBN 978-1-55860-890-0.
- دينكباس، م.؛ سيمونيس، هـ.؛ فان هينتيريك، ب. (1990). "حل المسائل التوافقية الكبيرة في البرمجة المنطقية" . مجلة البرمجة المنطقية . 8 ( 1-2 ): 75-93 . doi : 10.1016/0743-1066(90)90052-7 .
- فرويدر، يوجين. ماكوورث، آلان، محررون. (1994). المنطق القائم على القيد . مطبعة معهد ماساتشوستس للتكنولوجيا. رقم ISBN 978-0-262-56075-7أُرشف من المصدر الأصلي بتاريخ 2024-10-06 . تم الاطلاع عليه بتاريخ 2020-12-27 .
- فروويرث، ثوم؛ سليم عبد الناظر (2003). أساسيات البرمجة المقيدة . سبرينغر. ISBN 978-3-540-67623-2.
- جيسجوين، هانز؛ هيرتزبيرج، يواكيم (1992). منظور الاستدلال القائم على القيود . سبرينغر. ISBN 978-3-540-55510-0.
- جعفر، جوكسان؛ مايكل ج. ماهر (1994). "برمجة المنطق المقيد: دراسة استقصائية" . مجلة برمجة المنطق . 19/20: 503-581 . doi : 10.1016/0743-1066(94)90033-7 .
- لوريير، جان لويس (1978). "لغة وبرنامج لصياغة وحل المسائل التوافقية". الذكاء الاصطناعي . 10 (1): 29-127 . doi : 10.1016/0004-3702(78)90029-2 .
- ليكوتر، كريستوف (2009). شبكات القيد: التقنيات والخوارزميات . إستي / وايلي. رقم ISBN 978-1-84821-106-3أُرشف من المصدر الأصلي بتاريخ 7 نوفمبر 2017. تم الاطلاع عليه بتاريخ 6 سبتمبر 2009 .
- ماريوت، كيم؛ بيتر ج. ستوكي (1998). البرمجة مع القيود: مقدمة . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-13341-8.
- روسي، فرانشيسكا؛ بيتر فان بيك؛ توبي والش، محرران. (2006). دليل البرمجة المقيدة . إلسيفير. ISBN 978-0-444-52726-4أُرشف من المصدر الأصلي بتاريخ 4 أكتوبر 2012. تم الاطلاع عليه بتاريخ 13 أكتوبر 2006 .
- تسانغ، إدوارد (1993). أسس إرضاء القيود . دار النشر الأكاديمية. ISBN 978-0-12-701610-8أُرشف من المصدر الأصلي بتاريخ 23 أبريل 2021. تم الاطلاع عليه بتاريخ 7 يونيو 2007 .
- فان هنتنريك، باسكال (1989). رضا القيد في البرمجة المنطقية . مطبعة معهد ماساتشوستس للتكنولوجيا. رقم ISBN 978-0-262-08181-8.
- رشيدي، حسن؛ تسانغ، إدوارد. (2012). "نماذج جديدة لإرضاء القيود في مسائل التحسين في محطات الحاويات" . مجلة النمذجة الرياضية التطبيقية . 37 (6): 3601-3634 . doi : 10.1016/j.apm.2012.07.042 .
روابط خارجية
- برنامج تعليمي لـ CSP
مقاطع فيديو
- محاضرة حول إرضاء القيود للدكتور مادهو شارما (3:47)
- مقدمة عن مسائل إرضاء القيود بقلم إدوارد تسانغ (7:34)
- مسائل إرضاء القيود بقلم ويلر رومل (9:18)
- محاضرة حول مسائل إرضاء القيود من المعهد الهندي للتكنولوجيا في مدراس (51:59)
- محاضرة حول حلول الخوارزميات (1:16:39)
- محاضرة حول مسائل إرضاء القيود من إعداد بيركلي للذكاء الاصطناعي (1:17:38)
- دورة الدراسات العليا في الذكاء الاصطناعي 5: إرضاء القيود من تقديم البروفيسور موسام (1:34:29)
- البرمجة المقيدة
