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

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

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

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

تعريف

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

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

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

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

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

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

تاريخ

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

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

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

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

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

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

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

مجالات التطبيق

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

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

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

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

المبرمجون

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

انظر أيضًا

المراجع

  1. Biermann, A.W. (1992)، Shapiro, S.C. (المحرر)، "Automatic programming"، Encyclopedia of Artificial Intelligence: 18–35.
  2. Rich, C.؛ Waters, R.C. (1993)، Yovits, M.C. (المحرر)، Approaches to automatic programming (PDF)، Advances in Computers، ج. 37، ص. 1–57، doi:10.1016/S0065-2458(08)60402-7، ISBN 9780120121373، مؤرشف من الأصل (PDF) في 29 أغسطس 2017.
  3. Lowry, M.L.؛ McCarthy, R.D., المحررون (1991)، Automatic software design.
  4. 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.
  5. Flener, P. (2002)، "Achievements and prospects of program synthesis"، في Kakas, A.؛ Sadri, F. (المحررون)، Computational Logic: Logic Programming and Beyond، Computational Logic: Logic Programming and Beyond; Essays in Honour of Robert A. Kowalski، Lecture Notes in Computer Science، ج. LNAI 2407، ص. 310–346، doi:10.1007/3-540-45628-7_13، ISBN 978-3-540-43959-2.
  6. 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.
  7. Smith, D.R. (1984)، Biermann, A.W.؛ Guiho, G. (المحررون)، "The synthesis of LISP programs from examples: a survey"، Automatic Program Construction Techniques: 307–324، مؤرشف من الأصل في 30 أكتوبر 2018.
  8. 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.
  9. 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
  10. Shapiro, E.Y. (1983)، Algorithmic program debugging، The MIT Press، مؤرشف من الأصل في 18 مارس 2022.
  11. 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.
  12. Plotkin, Gordon D. (1970)، Meltzer, B.؛ Michie, D. (المحررون)، "A Note on Inductive Generalization" (PDF)، Machine Intelligence، 5: 153–163، مؤرشف من الأصل (PDF) في 22 أكتوبر 2021.
  13. Plotkin, Gordon D. (1971)، Meltzer, B.؛ Michie, D. (المحررون)، "A Further Note on Inductive Generalization"، Machine Intelligence، 6: 101–124.
  14. Muggleton, S.H.؛ Feng, C. (1990)، "Efficient induction of logic programs"، Proceedings of the Workshop on Algorithmic Learning Theory، 6: 368–381، S2CID 14992676.
  15. Quinlan, J.R.؛ Cameron-Jones, R.M. (1993)، "Avoiding Pitfalls When Learning Recursive Theories"، IJCAI: 1050–1057، S2CID 11138624.
  16. Quinlan, J.R.؛ Cameron-Jones, R.M. (1995)، "Induction of logic programs: FOIL and related systems" (PDF)، Springer، 13 (3–4): 287–312، مؤرشف من الأصل (PDF) في 7 سبتمبر 2017، اطلع عليه بتاريخ 1 يناير 2022. {{استشهاد بدورية محكمة}}: Cite journal requires |journal= (مساعدة)
  17. 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.
  18. 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.
  19. 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، مؤرشف من الأصل في 10 مارس 2022.
  20. 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
  21. 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.
  22. Lloyd, J.W. (2001)، "Knowledge Representation, Computation, and Learning in Higher-order Logic" (PDF)، مؤرشف من الأصل (PDF) في 4 أبريل 2021. {{استشهاد بدورية محكمة}}: Cite journal requires |journal= (مساعدة)
  23. Lloyd, J.W. (2003)، Logic for learning: learning comprehensible theories from structured data، Springer، ISBN 9783662084069، مؤرشف من الأصل في 2 يناير 2022.
  24. 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.
  25. Henderson, R.J.؛ Muggleton, S.H. (2012)، "Automatic invention of functional abstractions" (PDF)، Advances in Inductive Logic Programming، مؤرشف من الأصل (PDF) في 20 مارس 2020.
  26. A bot will complete this citation soon. Click here to jump the queue أرخايف:1110.5667.
  27. Muggleton, S. (2000)، "Learning stochastic logic programs" (PDF)، Electron. Trans. Artif. Intell.، 4(B): 141–153، مؤرشف من الأصل (PDF) في 7 سبتمبر 2017، اطلع عليه بتاريخ 1 يناير 2022.
  28. De Raedt, L.؛ Kersting, K. (2008)، Probabilistic inductive logic programming، Springer.
  29. 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.
  30. Lieberman, H. (2001)، Your wish is my command: Programming by example، Morgan Kaufmann، ISBN 9781558606883، مؤرشف من الأصل في 2 يناير 2022.
  31. Cypher, E.؛ Halbert, D.C. (1993)، Watch what I do: programming by demonstration، ISBN 9780262032131، مؤرشف من الأصل في 1 يناير 2022.
  32. 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.
  • بوابة برمجة الحاسوب
  • بوابة علم الحاسوب
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.