इंडक्टिव प्रोग्रामिंग

इंडक्टिव प्रोग्रामिंग (आईपी) स्वचालित प्रोग्रामिंग का विशेष क्षेत्र है, जो कृत्रिम बुद्धिमत्ता और कंप्यूटर प्रोग्रामिंग से अनुसंधान को आवरण करता है, जो सामान्यतः प्रकाशक प्रोग्रामिंग (तर्क प्रोग्रामिंग या कार्यात्मक प्रोग्रामिंग) की मशीन लर्निंग को संबोधित करता है और अधिकांशतः इनपुट / आउटपुट जैसे अपूर्ण विनिर्देशों से प्रत्यावर्तन प्रोग्राम को संबोधित करता है। उदाहरण या सीमाएं है.

प्रयुक्त प्रोग्रामिंग भाषा के आधार पर, इंडक्टिव प्रोग्रामिंग कई प्रकार की होती है। इस प्रकार इंडक्टिव कार्यात्मक प्रोग्रामिंग, जो लिस्प (प्रोग्रामिंग भाषा) या हास्केल (प्रोग्रामिंग भाषा) जैसी कार्यात्मक प्रोग्रामिंग भाषाओं का उपयोग करती है, और विशेष रूप से इंडक्टिव तर्क प्रोग्रामिंग, जो प्रोलॉग जैसी तर्क प्रोग्रामिंग भाषाओं और विवरण तर्क जैसे अन्य तार्किक प्रतिनिधित्व का उपयोग करती है, किन्तु अन्य (प्रोग्रामिंग) भाषा प्रतिमानों का भी उपयोग किया गया है, जैसे कांस्ट्रेन्ट प्रोग्रामिंग या संभाव्य प्रोग्रामिंग भाषा है।

परिभाषा
इंडक्टिव प्रोग्रामिंग में वे सभी दृष्टिकोण सम्मिलित होते हैं जो अपूर्ण (औपचारिक विनिर्देश) विनिर्देशों से सीखने के प्रोग्रामो या एल्गोरिदम से संबंधित हैं। आईपी सिस्टम में संभावित इनपुट प्रशिक्षण इनपुट और संबंधित आउटपुट या आउटपुट मूल्यांकन फ़ंक्शन का सेट है, जो इच्छित प्रोग्राम के वांछित व्यवहार, ट्रेसिंग (सॉफ़्टवेयर) या एक्शन अनुक्रमों का वर्णन करता है जो विशिष्ट आउटपुट, कांस्ट्रेन्ट (गणित) की गणना करने की प्रक्रिया का वर्णन करता है। इस प्रकार प्रोग्राम को उसकी समय दक्षता या उसकी जटिलता के संबंध में प्रेरित करने के लिए, विभिन्न प्रकार के पृष्ठभूमि ज्ञान जैसे मानक डेटा प्रकार, उपयोग किए जाने वाले पूर्वनिर्धारित फ़ंक्शन, प्रोग्राम योजनाएं या इच्छित प्रोग्राम के डेटा प्रवाह का वर्णन करने वाले टेम्पलेट, खोज के मार्गदर्शन के लिए अनुमान समाधान या अन्य पूर्वाग्रह का उपयोग किया जाता है.

आईपी ​​सिस्टम का आउटपुट कुछ इच्छानुसार प्रोग्रामिंग भाषा में प्रोग्राम है जिसमें सशर्त और लूप या पुनरावर्ती नियंत्रण संरचनाएं, या किसी अन्य प्रकार की ट्यूरिंग पूर्णता या ट्यूरिंग-पूर्ण ज्ञान प्रतिनिधित्व और तर्क भाषा सम्मिलित है।

इस प्रकार कई अनुप्रयोगों में आउटपुट प्रोग्राम को उदाहरणों और आंशिक विनिर्देशों के संबंध में सही होना चाहिए, और इससे स्वचालित प्रोग्रामिंग या प्रोग्राम संश्लेषण के अंदर विशेष क्षेत्र के रूप में इंडक्टिव प्रोग्रामिंग पर विचार किया जाता है, सामान्यतः 'निगमनात्मक' प्रोग्राम संश्लेषण का विरोध किया जाता है,   जहां विशिष्टता सामान्यतः पूर्ण होती है.

इस प्रकार अन्य स्थितियों में, इंडक्टिव प्रोग्रामिंग को अधिक सामान्य क्षेत्र के रूप में देखा जाता है जहां किसी भी प्रकाशक प्रोग्रामिंग या प्रतिनिधित्व भाषा का उपयोग किया जा सकता है और हमें उदाहरणों में कुछ सीमा तक त्रुटि भी हो सकती है, जैसे सामान्य मशीन लर्निंग में, संरचना माइनिंग का अधिक विशिष्ट क्षेत्र या प्रतीकात्मक कृत्रिम बुद्धिमत्ता का क्षेत्र है। विशिष्ट विशेषता आवश्यक उदाहरणों की संख्या या आंशिक विशिष्टता है। सामान्यतः, इंडक्टिव प्रोग्रामिंग तकनीकें केवल कुछ उदाहरणों से सीखी जा सकती हैं।

इंडक्टिव प्रोग्रामिंग की विविधता सामान्यतः अनुप्रयोगों और उपयोग की जाने वाली भाषाओं से आती है: इस प्रकार तर्क प्रोग्रामिंग और कार्यात्मक प्रोग्रामिंग के अतिरिक्त, अन्य प्रोग्रामिंग प्रतिमान और प्रतिनिधित्व भाषाओं का उपयोग इंडक्टिव प्रोग्रामिंग में किया गया है या सुझाया गया है, जैसे कार्यात्मक तर्क प्रोग्रामिंग, कांस्ट्रेन्ट प्रोग्रामिंग, संभाव्य प्रोग्रामिंग भाषा, अपहरणात्मक तर्क प्रोग्रामिंग, मोडल तर्क, क्रिया भाषाएँ, एजेंट भाषाएँ और कई प्रकार की अनिवार्य भाषाएँ है।

इतिहास
पुनरावर्ती कार्यात्मक प्रोग्रामो के इंडक्टिव संश्लेषण पर अनुसंधान 1970 के दशक की प्रारंभ में प्रारंभ हुआ और इस प्रकार इसे समर्स की मौलिक थीसिस सिस्टम के साथ सशक्त सैद्धांतिक नींव पर लाया गया था। और बर्मन का कार्य इन दृष्टिकोणों को दो चरणों में विभाजित किया गया था: पहला, इनपुट-आउटपुट उदाहरणों को मूलभूत संचालको के छोटे सेट का उपयोग करके गैर-पुनरावर्ती प्रोग्रामो (ट्रेस) में बदल दिया जाता है; दूसरा, निशानों में नियमितताओं की खोज की जाती है और उन्हें पुनरावर्ती प्रोग्राम में मोड़ने के लिए उपयोग किया जाता है। 1980 के दशक के मध्य तक मुख्य परिणामों का सर्वेक्षण स्मिथ द्वारा किया गया था। संश्लेषित किए जा सकने वाले प्रोग्रामो की श्रृंखला के संबंध में सीमित प्रगति के कारण, अगले दशक में अनुसंधान गतिविधियों में अधिक कमी आई थी।

लॉजिक प्रोग्रामिंग के आगमन ने 1980 के दशक की प्रारंभ में नई उत्साह के साथ-साथ नई दिशा भी लाई थी, विशेष रूप से शापिरो की एमआईएस सिस्टम के कारण अंततः इंडक्टिव तर्क प्रोग्रामिंग (आईएलपी) के नए क्षेत्र को जन्म दिया था। प्लॉटकिन के प्रारंभिक कार्य, और उनके सापेक्ष न्यूनतम सामान्यीकरण (आरएलजीजी) का इंडक्टिव तर्क प्रोग्रामिंग में भारी प्रभाव पड़ा था। इस प्रकार आईएलपी का अधिकांश कार्य समस्याओं के व्यापक वर्ग को संबोधित करता है, क्योंकि फोकस न केवल पुनरावर्ती तर्क प्रोग्रामो पर है, किन्तु तार्किक अभ्यावेदन से प्रतीकात्मक परिकल्पनाओं की मशीन सीखने पर भी है। चूँकि, पुनरावर्ती प्रोलॉग प्रोग्राम सीखने पर कुछ उत्साहजनक परिणाम मिले जैसे उदाहरण के लिए उपयुक्त पृष्ठभूमि ज्ञान के साथ उदाहरणों से त्वरित सॉर्ट, गोलेम के साथ किन्तु फिर, प्रारंभिक सफलता के बाद, पुनरावर्ती प्रोग्रामो को सम्मिलित करने के बारे में सीमित प्रगति से समूह निराश हो गया था   इस प्रकार आईएलपी के साथ पुनरावर्ती प्रोग्रामो पर कम से कम ध्यान केंद्रित किया जा रहा है और रिलेशनल डेटा माइनिंग और ज्ञान खोज में अनुप्रयोगों के साथ मशीन लर्निंग सेटिंग की ओर अधिक से अधिक झुकाव हो रहा है।

आईएलपी, कोज़ा में कार्य करने के समानांतर 1990 के दशक की प्रारंभ में सीखने के प्रोग्रामो के लिए जनरेट-एंड-टेस्ट आधारित दृष्टिकोण के रूप में प्रस्तावित जेनेटिक प्रोग्रामिंग के विचार को आगे चलकर इंडक्टिव प्रोग्रामिंग सिस्टम एडेट में विकसित किया गया था और इस प्रकार व्यवस्थित-खोज-आधारित सिस्टम मैजिकहास्केलर द्वारा किया जाता है। यहां फिर से, कार्यात्मक प्रोग्रामो को आउटपुट मूल्यांकन (फिटनेस) फ़ंक्शन के साथ सकारात्मक उदाहरणों के सेट से सीखा जाता है जो सीखे जाने वाले प्रोग्राम के वांछित इनपुट/आउटपुट व्यवहार को निर्दिष्ट करता है।

व्याकरण प्रेरण (व्याकरणिक अनुमान के रूप में भी जाना जाता है) में प्रारंभिक कार्य इंडक्टिव प्रोग्रामिंग से संबंधित है, क्योंकि उत्पादन नियमों का प्रतिनिधित्व करने के लिए पुनर्लेखन सिस्टम या तर्क प्रोग्रामो का उपयोग किया जा सकता है। वास्तव में, इंडक्टिव अनुमान के प्रारंभी कार्यों में व्याकरण प्रेरण और लिस्प प्रोग्राम अनुमान को मूल रूप से ही समस्या माना जाता है। इस प्रकार सीखने की क्षमता के संदर्भ में परिणाम मौलिक अवधारणाओं से संबंधित थे, जैसे कि सीमा में पहचान, जैसा कि गोल्ड के मौलिक कार्य में प्रस्तुत किया गया था। वर्तमान में, भाषा सीखने की समस्या को इंडक्टिव प्रोग्रामिंग समूह द्वारा संबोधित किया गया था।

वर्तमान के वर्षों में, मौलिक दृष्टिकोण को फिर से प्रारंभ किया गया है और इस प्रकार बड़ी सफलता के साथ आगे बढ़ाया गया है। इसलिए, कार्यात्मक प्रोग्रामिंग की आधुनिक तकनीकों के साथ-साथ खोज-आधारित रणनीतियों के मध्यम उपयोग और पृष्ठभूमि ज्ञान के उपयोग के साथ-साथ उपप्रोग्राम के स्वचालित आविष्कार को ध्यान में रखते हुए, इस प्रकार संश्लेषण समस्या को कंस्ट्रक्टर-आधारित शब्द पुनर्लेखन सिस्टम्स की पृष्ठभूमि पर फिर से तैयार किया गया है। वर्तमान में प्रोग्राम संश्लेषण से परे कई नए और सफल अनुप्रयोग सामने आए हैं, विशेष रूप से डेटा परिवर्तन, उदाहरण के द्वारा प्रोग्रामिंग और संज्ञानात्मक मॉडलिंग (नीचे देखें) के क्षेत्र में किया जाता है।

इस प्रकार परिकल्पनाओं के प्रतिनिधित्व के लिए प्रकाशक भाषाओं का उपयोग करने की सामान्य विशेषता के साथ अन्य विचारों का भी पता लगाया गया है। उदाहरण के लिए, पुनरावर्ती डेटा प्रकार और संरचनाओं के उत्तम प्रबंधन के लिए उच्च-क्रम सुविधाओं, योजनाओं या संरचित दूरियों के उपयोग की वकालत की गई है;  संचयी सीखने और फ़ंक्शन आविष्कार के लिए एब्स्ट्रेक्ट को अधिक शक्तिशाली दृष्टिकोण के रूप में भी खोजा गया है।

एक शक्तिशाली प्रतिमान जिसका उपयोग वर्तमान में इंडक्टिव प्रोग्रामिंग (सामान्यतः जनरेटिव मॉडल के रूप में) में परिकल्पनाओं के प्रतिनिधित्व के लिए किया गया है, संभाव्य प्रोग्रामिंग भाषा (और संबंधित प्रतिमान, जैसे स्टोकेस्टिक लॉजिक प्रोग्राम और बायेसियन लॉजिक प्रोग्रामिंग) है।

अनुप्रयोग क्षेत्र
आईसी एमएल 2005 के संयोजन में आयोजित इंडक्टिव प्रोग्रामिंग (एएआईपी) के दृष्टिकोण और अनुप्रयोगों पर पहली कार्यशाला ने उन सभी अनुप्रयोगों की पहचान की जहां प्रोग्रामो को सीखना या पुनरावर्ती नियमों की आवश्यकता होती है, इस प्रकार सबसे पहले सॉफ्टवेयर इंजीनियरिंग के क्षेत्र में जहां संरचनात्मक शिक्षण, सॉफ्टवेयर सहायक और सॉफ्टवेयर एजेंट प्रोग्रामर को नियमित कार्यों से आराम देने में सहायता कर सकते हैं, अंतिम उपयोगकर्ताओं के लिए प्रोग्रामिंग सहायता दे सकते हैं, या इस प्रकार प्राथमिक प्रोग्रामर और प्रोग्रामिंग का समर्थन कर सकते हैं ट्यूटर सिस्टम. अनुप्रयोग के अन्य क्षेत्र हैं इस प्रकार भाषा सीखना, एआई-योजना के लिए पुनरावर्ती नियंत्रण नियम सीखना, वेब-माइनिंग में पुनरावर्ती अवधारणाओं को सीखना या डेटा-प्रारूप परिवर्तनों के लिए किया जाता है।

तब से, ये और कई अन्य क्षेत्र इंडक्टिव प्रोग्रामिंग के लिए सफल एप्लिकेशन क्षेत्र सिद्ध हुए हैं, जैसे एंड-यूज़र प्रोग्रामिंग, उदाहरण के लिए प्रोग्रामिंग के संबंधित क्षेत्र और प्रदर्शन द्वारा प्रोग्रामिंग, और बुद्धिमान ट्यूशन सिस्टम का उपयोग किया जाता है।

इस प्रकार अन्य क्षेत्र जहां इंडक्टिव अनुमान को वर्तमान में प्रयुक्त किया गया है वे हैं ज्ञान प्राप्ति, कृत्रिम सामान्य बुद्धि, सुदृढीकरण सीखना और सिद्धांत मूल्यांकन, और सामान्यतः संज्ञानात्मक विज्ञान बुद्धिमान एजेंटों, गेम, रोबोटिक्स, वैयक्तिकरण, परिवेश बुद्धिमत्ता और मानव इंटरफेस में भी संभावित अनुप्रयोग हो सकते हैं।

यह भी देखें

 * विकासवादी प्रोग्रामिंग
 * विवेचनात्मक तार्किकता
 * परीक्षण संचालित विकास

अग्रिम पठन

 * https://web.archive.org/web/20040906084947/http://www-ai.ijs.si/SasoDzeroski/ILPBook/
 * https://web.archive.org/web/20040906084947/http://www-ai.ijs.si/SasoDzeroski/ILPBook/
 * https://web.archive.org/web/20040906084947/http://www-ai.ijs.si/SasoDzeroski/ILPBook/
 * https://web.archive.org/web/20040906084947/http://www-ai.ijs.si/SasoDzeroski/ILPBook/
 * https://web.archive.org/web/20040906084947/http://www-ai.ijs.si/SasoDzeroski/ILPBook/
 * https://web.archive.org/web/20040906084947/http://www-ai.ijs.si/SasoDzeroski/ILPBook/
 * https://web.archive.org/web/20040906084947/http://www-ai.ijs.si/SasoDzeroski/ILPBook/

बाहरी संबंध

 * Inductive Programming community page, hosted by the University of Bamberg.