برمجة استقرائية

من ويكيبيديا، الموسوعة الحرة
البرمجة الاستقرائية
صنف فرعي من
نشاط — مهارة
جزء من
علم الحاسوب — تطوير برمجيات
يمتهنه
مبرمج — مهندس برمجيات

البرمجة الاستقرائية[1] (بالإنجليزية: Inductive programming)‏ يرمز الاختصار إلى (IP) هي مجال خاص من البرمجة التلقائية، تغطي الأبحاث من الذكاء الاصطناعي والبرمجة، والتي تتناول تعلم البرامج التقريرية (المنطقية أو الوظيفية) وغالبًا ما تكون متكررة من مواصفات غير كاملة، مثل أمثلة الإدخال / الإخراج أو القيود.

اعتمادًا على لغة البرمجة المستخدمة، هناك عدة أنواع من البرمجة الاستقرائية. البرمجة الوظيفية للبرمجة الاستقرائية، والتي تستخدم لغات وظيفية مثل ليسب (Lisp) أو هاسكل (Haskell) هي لغة برمجة مطابقة للمعايي، للأغراض العامة، وعلى وجه الخصوص البرمجة المنطقية الاستقرائية، التي تستخدم لغات البرمجة المنطقية مثل برولوغ (Prolog) والتمثيلات المنطقية الأخرى مثل منطق الوصف، كانت أكثر بروزًا، مثل البرمجة القيدية أو البرمجة الاحتمالية.

تعريف[عدل]

تتضمن البرمجة الاستقرائية جميع الأساليب التي تهتم ببرامج التعلم أو الخوارزميات من مواصفات غير كاملة. المدخلات المحتملة في نظام البرمجة الاستقرائية IP هي مجموعة من مدخلات التدريب والمخرجات المقابلة أو وظيفة تقييم المخرجات، التي تصف السلوك المطلوب للبرنامج المقصود، أو الآثار أو تسلسل الإجراءات التي تصف عملية حساب مخرجات محددة، والقيود المفروضة على البرنامج الذي سيتم إحداثه فيما يتعلق بكفاءة الوقت أو تعقيده، وأنواع مختلفة من المعرفة الأساسية مثل أنواع البيانات القياسية، والوظائف المحددة مسبقًا لاستخدامها، ومخططات البرنامج أو القوالب التي تصف تدفق البيانات للبرنامج المقصود، والاستدلالات لتوجيه البحث عن حل أو تحيزات أخرى.[2][3]

ناتج نظام البرمجة الاستقرائية (IP) هو برنامج في بعض لغات البرمجة التعسفية يحتوي على بنى تحكم شرطية وحلقة أو متكررة، أو أي نوع آخر من لغة تمثيل تورينج كومبليت.

في العديد من التطبيقات، يجب أن يكون برنامج الإخراج صحيحًا فيما يتعلق بالأمثلة والمواصفات الجزئية، وهذا يؤدي إلى اعتبار البرمجة الاستقرائية كمنطقة خاصة داخل البرمجة التلقائية أو تخليق البرنامج، وعادةً ما يكون ذلك في مقابل توليف البرنامج الاستنتاجي، حيث تكون المواصفات عادة ما تكون كاملة.[4][5]

في حالات أخرى، يُنظر إلى البرمجة الاستقرائية على أنها مجال أكثر عمومية حيث يمكن استخدام أي لغة برمجة أو تمثيل، وقد يكون لدينا درجة من الخطأ في الأمثلة، كما هو الحال في التعلم الآلي العام، أو المجال الأكثر تحديدًا لتعدين الهيكل أو مجال الذكاء الاصطناعي الرمزي. السمة المميزة هي عدد الأمثلة أو المواصفات الجزئية المطلوبة. عادة، يمكن أن تتعلم تقنيات البرمجة الاستقرائية من أمثلة قليلة فقط.[4][5]

عادةً ما يأتي تنوع البرمجة الاستقرائية من التطبيقات واللغات المستخدمة: بصرف النظر عن البرمجة المنطقية والبرمجة الوظيفية، تم استخدام نماذج البرمجة ولغات التمثيل الأخرى أو اقتراحها في البرمجة الاستقرائية، مثل البرمجة المنطقية الوظيفية، برمجة القيد، الاحتمالية البرمجة، والبرمجة المنطقية الاختطاف، والمنطق النموذجي، ولغات العمل، ولغات الوكيل وأنواع كثيرة من اللغات الحتمية.[5][6]

البرمجة الاستقرائية

تاريخ[عدل]

بدأ البحث عن التوليف الاستقرائي للبرامج الوظيفية العودية في أوائل السبعينيات وتم إدخاله على أسس نظرية ثابتة باستخدام نظام أطروحة سمرز [7] وعمل بيرمان. تم تقسيم هذه الأساليب إلى مرحلتين: أولاً، يتم تحويل أمثلة المدخلات والمخرجات إلى برامج غير متكررة باستخدام مجموعة صغيرة من العوامل الأساسية؛ ثانيًا، يتم البحث عن الانتظام في الآثار واستخدامها لطيهم في برنامج تعاودي. تم مسح النتائج الرئيسية حتى منتصف الثمانينيات من قبل سميث. بسبب التقدم المحدود فيما يتعلق بمجموعة البرامج التي يمكن تجميعها، انخفضت أنشطة البحث بشكل كبير في العقد المقبل.[8][9]

جلب ظهور البرمجة المنطقية اتجاهًا جديدًا ولكن أيضًا اتجاهًا جديدًا في أوائل الثمانينيات، خاصة بسبب نظام المعلومات الإدارية (MIS)[10] لشابيرو الذي أدى في النهاية إلى ظهور مجال جديد لبرمجة المنطق الاستقرائي, كان لأعمال بلوتكين المبكرة، والتعميم النسبي الأقل تعميمًا، [11] تأثير هائل في برمجة المنطق الاستقرائي. تتناول معظم أعمال برمجة المنطق الاستقرائي ILP فئة أوسع من المشكلات، [12] حيث أن التركيز ليس فقط على برامج المنطق العودي ولكن على التعلم الآلي للفرضيات الرمزية من التمثيلات المنطقية. ومع ذلك، كانت هناك بعض النتائج المشجعة في تعلم برامج برولوغ (Prolog) [13] العودية مثل الفرز السريع من الأمثلة جنبًا إلى جنب مع المعرفة الخلفية المناسبة، على سبيل المثال مع جولم (GOLEM). ولكن مرة أخرى، بعد النجاح الأولي، أصيب المجتمع بخيبة أمل بسبب التقدم المحدود حول استقراء البرامج التكرارية مع تركيز أقل وأقل من برمجة المنطق الاستقرائي (ILP) [14] على البرامج العودية والميل أكثر فأكثر نحو إعداد التعلم الآلي مع التطبيقات في التنقيب عن البيانات العلائقية واكتشاف المعرفة.[15][16][17][18]

بالتوازي مع العمل في برمجة المنطق الاستقرائي، (ILP) اقترح كوزا البرمجة الجينية في أوائل التسعينيات كنهج قائم على التوليد والاختبار لبرامج التعلم. تم تطوير فكرة البرمجة الجينية إلى نظام البرمجة الاستقرائي [19] والنظام القائم على البحث المنهجي [20] يتم تعلم البرامج الوظيفية من مجموعات من الأمثلة الإيجابية جنبًا إلى جنب مع وظيفة تقييم المخرجات (الملاءمة) التي تحدد سلوك الإدخال / الإخراج المطلوب للبرنامج المطلوب تعلمه.

يرتبط العمل المبكر في الاستقراء النحوي (المعروف أيضًا باسم الاستدلال النحوي) بالبرمجة الاستقرائية، حيث يمكن استخدام أنظمة إعادة الكتابة أو البرامج المنطقية لتمثيل قواعد الإنتاج. في الواقع، اعتبرت الأعمال المبكرة في الاستدلال الاستقرائي الاستقراء النحوي واستدلال برنامج ليسب (Lisp) نفس المشكلة في الأساس. كانت النتائج من حيث قابلية التعلم مرتبطة بالمفاهيم الكلاسيكية، مثل التعريف في الحد، كما تم تقديمه في العمل الأساسي للذهب. في الآونة الأخيرة، تمت معالجة مشكلة تعلم اللغة من قبل مجتمع البرمجة الاستقرائي.[21][22]

في السنوات الأخيرة، تم استئناف الأساليب الكلاسيكية وتطويرها بنجاح كبير. لذلك، تمت إعادة صياغة مشكلة التوليف على خلفية أنظمة إعادة كتابة المصطلح المبني [23][24][25] على المُنشئ مع مراعاة التقنيات الحديثة للبرمجة الوظيفية، بالإضافة إلى الاستخدام المعتدل للاستراتيجيات القائمة على البحث واستخدام المعرفة الأساسية وكذلك الاختراع التلقائي للبرامج الفرعية. ظهرت مؤخرًا العديد من التطبيقات الجديدة والناجحة خارج توليف البرنامج، وخاصة في مجال معالجة البيانات والبرمجة بالقدوة والنمذجة المعرفية.

تم استكشاف أفكار أخرى أيضًا مع السمة المشتركة لاستخدام اللغات التقريرية لتمثيل الفرضيات. على سبيل المثال، تمت الدعوة إلى استخدام ميزات أو مخططات أو مسافات منظمة ذات ترتيب أعلى من أجل معالجة أفضل لأنواع وهياكل البيانات العودية؛ تم استكشاف التجريد أيضًا باعتباره نهجًا أكثر قوة للتعلم التراكمي والاختراع الوظيفي.[26][27]

أحد النماذج القوية التي تم استخدامها مؤخرًا لتمثيل الفرضيات في البرمجة الاستقرائية (بشكل عام في شكل نماذج توليدية) هو البرمجة الاحتمالية (والنماذج ذات الصلة، مثل برامج المنطق العشوائي والبرمجة المنطقية البايزية).[27][28][29][30]

مجالات التطبيق[عدل]

حددت ورشة العمل الأولى حول مناهج وتطبيقات البرمجة الاستقرائية (AAIP) التي عقدت بالاشتراك مع المؤتمر الدولي للتعلم الآلي (ICML 2005) جميع التطبيقات التي يُطلب فيها "تعلم البرامج أو القواعد العودية، أولاً في مجال هندسة البرمجيات حيث التعلم الهيكلي، يمكن أن يساعد مساعدو البرامج ووكلاء البرامج في إعفاء المبرمجين من المهام الروتينية، أو تقديم دعم البرمجة للمستخدمين النهائيين، أو دعم المبرمجين المبتدئين وأنظمة معلم البرمجة.المجالات الأخرى للتطبيق هي تعلم اللغة، وتعلم قواعد التحكم العودية لتخطيط الذكاء الاصطناعي، والتعلم التكراري مفاهيم في التنقيب على الويب أو للتحولات في تنسيق البيانات.

منذ ذلك الحين، أظهرت هذه المجالات والعديد من المجالات الأخرى أنها مجالات تطبيق ناجحة للبرمجة الاستقرائية، مثل برمجة المستخدم النهائي، [31] والمجالات ذات الصلة بالبرمجة عن طريق المثال والبرمجة عن طريق العرض،[32] وأنظمة التدريس الذكية.

المجالات الأخرى التي تم فيها تطبيق الاستدلال الاستقرائي مؤخرًا هي اكتساب المعرفة والذكاء العام الاصطناعي والتعلم المعزز وتقييم النظرية والعلوم المعرفية بشكل عام.[30][33] قد تكون هناك أيضًا تطبيقات محتملة في الوكلاء الأذكياء والألعاب والروبوتات والتخصيص والذكاء المحيط والواجهات البشرية.

قائمة ببعض لغات البرمجة[عدل]

المبرمجون[عدل]

مبرمجو الحاسوب هم الذين يكتبون برامج الحاسوب. وظائفهم تشمل بشكل عام:

انظر أيضًا[عدل]

المراجع[عدل]

  1. ^ معجم البيانات والذكاء الاصطناعي (PDF) (بالعربية والإنجليزية)، الهيئة السعودية للبيانات والذكاء الاصطناعي، 2022، ص. 77، QID:Q111421033
  2. ^ Biermann، A.W. (1992). Shapiro، S.C. (المحرر). "Automatic programming". Encyclopedia of Artificial Intelligence: 18–35.
  3. ^ Rich، C.؛ Waters، R.C. (1993). Yovits، M.C. (المحرر). Approaches to automatic programming (PDF). ج. 37. ص. 1–57. DOI:10.1016/S0065-2458(08)60402-7. ISBN:9780120121373. مؤرشف من الأصل (PDF) في 2017-08-29. {{استشهاد بكتاب}}: |صحيفة= تُجوهل (مساعدة)
  4. ^ أ ب Lowry، M.L.؛ McCarthy، R.D.، المحررون (1991). Automatic software design.
  5. ^ أ ب ت Manna، Z.؛ Waldinger، R. (1992). "Fundamentals of deductive program synthesis". IEEE Trans Softw Eng. ج. 18 ع. 8: 674–704. CiteSeerX:10.1.1.51.817. DOI:10.1109/32.153379.
  6. ^ Flener، P. (2002). "Achievements and prospects of program synthesis". في Kakas، A.؛ Sadri، F. (المحررون). Computational Logic: Logic Programming and Beyond. Lecture Notes in Computer Science. ج. LNAI 2407. ص. 310–346. DOI:10.1007/3-540-45628-7_13. ISBN:978-3-540-43959-2. {{استشهاد بكتاب}}: |صحيفة= تُجوهل (مساعدة)
  7. ^ Summers، P.D. (1977). "A methodology for LISP program construction from examples". J ACM. ج. 24 ع. 1: 161–175. DOI:10.1145/321992.322002. S2CID:7474210.
  8. ^ Smith، D.R. (1984). Biermann، A.W.؛ Guiho، G. (المحررون). "The synthesis of LISP programs from examples: a survey". Automatic Program Construction Techniques: 307–324. مؤرشف من الأصل في 2018-10-30.
  9. ^ Biermann، A.W. (1978). "The inference of regular LISP programs from examples". IEEE Trans Syst Man Cybern. ج. 8 ع. 8: 585–600. DOI:10.1109/tsmc.1978.4310035. S2CID:15277948.
  10. ^ Džeroski، Sašo (1996)، "Inductive Logic Programming and Knowledge Discovery in Databases"، في Fayyad، U.M.؛ Piatetsky-Shapiro، G.؛ Smith، P.؛ Uthurusamy، R. (المحررون)، Advances in Knowledge Discovery and Data Mining، MIT Press، ص. 117–152
  11. ^ Shapiro، E.Y. (1983). Algorithmic program debugging. The MIT Press. مؤرشف من الأصل في 2022-03-18.
  12. ^ Muggleton، S. (1991). "Inductive logic programming". New Generation Computing. ج. 8 ع. 4: 295–318. CiteSeerX:10.1.1.329.5312. DOI:10.1007/BF03037089. S2CID:5462416.
  13. ^ Plotkin، Gordon D. (1970). Meltzer، B.؛ Michie، D. (المحررون). "A Note on Inductive Generalization" (PDF). Machine Intelligence. ج. 5: 153–163. مؤرشف من الأصل (PDF) في 2021-10-22.
  14. ^ Plotkin، Gordon D. (1971). Meltzer، B.؛ Michie، D. (المحررون). "A Further Note on Inductive Generalization". Machine Intelligence. ج. 6: 101–124.
  15. ^ Muggleton، S.H.؛ Feng، C. (1990). "Efficient induction of logic programs". Proceedings of the Workshop on Algorithmic Learning Theory. ج. 6: 368–381. S2CID:14992676.
  16. ^ Quinlan، J.R.؛ Cameron-Jones، R.M. (1993). "Avoiding Pitfalls When Learning Recursive Theories". IJCAI: 1050–1057. S2CID:11138624.
  17. ^ Quinlan، J.R.؛ Cameron-Jones، R.M. (1995). "Induction of logic programs: FOIL and related systems" (PDF). Springer. ج. 13 ع. 3–4: 287–312. مؤرشف من الأصل (PDF) في 2017-09-07. اطلع عليه بتاريخ 2022-01-01. {{استشهاد بدورية محكمة}}: الاستشهاد بدورية محكمة يطلب |دورية محكمة= (مساعدة)
  18. ^ Flener، P.؛ Yilmaz، S. (1999). "Inductive synthesis of recursive logic programs: Achievements and prospects". The Journal of Logic Programming. ج. 41 ع. 2: 141–195. DOI:10.1016/s0743-1066(99)00028-x.
  19. ^ Angluin، D.؛ C.H.، Smith (1983). "Inductive inference: Theory and methods". ACM Computing Surveys. ج. 15 ع. 3: 237–269. DOI:10.1145/356914.356918. S2CID:3209224.
  20. ^ Olsson، J.R. (1995). "Inductive functional programming using incremental program transformation". Artificial Intelligence. ج. 74 ع. 1: 55–83. DOI:10.1016/0004-3702(94)00042-y. مؤرشف من الأصل في 2022-03-10.
  21. ^ Muggleton، Stephen (1999). "Inductive Logic Programming: Issues, Results and the Challenge of Learning Language in Logic". Artificial Intelligence. ج. 114 ع. 1–2: 283–296. DOI:10.1016/s0004-3702(99)00067-3.; here: Sect.2.1
  22. ^ Olsson، J.R.؛ Powers، D.M.W. (2003). "Machine learning of human language through automatic programming". Proceedings of the International Conference on Cognitive Science: 507–512.
  23. ^ Lloyd، J.W. (2001). "Knowledge Representation, Computation, and Learning in Higher-order Logic" (PDF). مؤرشف من الأصل (PDF) في 2021-04-04. {{استشهاد بدورية محكمة}}: الاستشهاد بدورية محكمة يطلب |دورية محكمة= (مساعدة)
  24. ^ Lloyd، J.W. (2003). Logic for learning: learning comprehensible theories from structured data. Springer. ISBN:9783662084069. مؤرشف من الأصل في 2022-01-02.
  25. ^ Estruch، V.؛ Ferri، C.؛ Hernandez-Orallo، J.؛ Ramirez-Quintana، M.J. (2014). "Bridging the gap between distance and generalization". Computational Intelligence. ج. 30 ع. 3: 473–513. DOI:10.1111/coin.12004. S2CID:7255690.
  26. ^ Henderson، R.J.؛ Muggleton، S.H. (2012). "Automatic invention of functional abstractions" (PDF). Advances in Inductive Logic Programming. مؤرشف من الأصل (PDF) في 2020-03-20.
  27. ^ أ ب A bot will complete this citation soon. Click here to jump the queue أرخايف:1110.5667.
  28. ^ Muggleton، S. (2000). "Learning stochastic logic programs" (PDF). Electron. Trans. Artif. Intell. ج. 4(B): 141–153. مؤرشف من الأصل (PDF) في 2017-09-07. اطلع عليه بتاريخ 2022-01-01.
  29. ^ De Raedt، L.؛ Kersting، K. (2008). Probabilistic inductive logic programming. Springer.
  30. ^ أ ب Stuhlmuller، A.؛ Goodman، N.D. (2012). "Reasoning about reasoning by nested conditioning: Modeling theory of mind with probabilistic programs". Cognitive Systems Research. ج. 28: 80–99. DOI:10.1016/j.cogsys.2013.07.003. S2CID:7602205.
  31. ^ Lieberman، H. (2001). Your wish is my command: Programming by example. Morgan Kaufmann. ISBN:9781558606883. مؤرشف من الأصل في 2022-01-02.
  32. ^ Cypher، E.؛ Halbert، D.C. (1993). Watch what I do: programming by demonstration. ISBN:9780262032131. مؤرشف من الأصل في 2022-01-01.
  33. ^ Schmid، U.؛ Kitzelmann، E. (2011). "Inductive rule learning on the knowledge level". Cognitive Systems Research. ج. 12 ع. 3: 237–248. DOI:10.1016/j.cogsys.2010.12.002. S2CID:18613664.