6

मैं इस सवाल से पूछ रहा हूं क्योंकि मुझे पता है कि यहां बहुत सारे पढ़े गए सीएस प्रकार हैं जो स्पष्ट उत्तर दे सकते हैं।इंटेलिजेंट कोड-पूरा करने? सीखने के द्वारा कोड लिखने के लिए एआई है?

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

मुझे पता है कि यह पाई-इन-द-आकाश लगता है, इसलिए मैं यह जानने के लिए कह रहा हूं कि क्या किया गया है, अगर कुछ भी हो।

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

लेकिन एक परिष्कृत सीखने एआई के साथ मैं यह देखने के लिए उत्सुक होगा कि यह क्या उत्पन्न कर सकता है।

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

इस विचार का एक और तरीका यह है कि "मेन्यूड वेबसाइट" या "छवि उपकरण" जैसे उच्च स्तरीय विवरण देना अच्छा होगा और यह पर्याप्त गहराई वाला कोड उत्पन्न करता है जो मेरे लिए कोड पूर्णता मॉड्यूल के रूप में उपयोगी होगा फिर विवरण में कोड। लेकिन मुझे लगता है कि एक गैर बुद्धिमान स्थिर पदानुक्रमित कोड समापन योजना के रूप में कल्पना की जा सकती है।

इसके बारे में कैसे?

+0

मैंने अक्सर इस बारे में सोचा है। एआई के मुताबिक, औसत परिणामों के साथ दशकों तक इसकी कोशिश की गई है: एक आधुनिक दृष्टिकोण। – AaronLS

+0

मेरे पास वह पुस्तक है, इसे पढ़ा नहीं है। मैंने सुना यह मानक है। कॉलेज में एआई कभी नहीं लिया और हमेशा सिद्धांत पर पढ़ना चाहता था, मुख्य रूप से इसलिए मैं बेहतर गेम लिख सकता था। – tkotitan

उत्तर

12

ऐसे उपकरण मौजूद हैं। वे Genetic Programming नामक एक अनुशासन का विषय हैं। आप उनकी सफलता का मूल्यांकन कैसे करते हैं उनके आवेदन के दायरे पर निर्भर करता है।

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

वे मुख्यधारा के कार्यक्रमों को बनाने की कोशिश में पूरी तरह से बेकार हैं, जिसके लिए उपयोगकर्ता की बातचीत की आवश्यकता होती है, क्योंकि मुख्य आइटम एक सिस्टम जो जरूरतों को सीखता है वह एक स्पष्ट "fitness function" है, या वर्तमान समाधान की गुणवत्ता का मूल्यांकन हुआ है साथ में।

"प्रोग्राम लर्निंग" से निपटने में देखा जा सकता है एक और डोमेन Inductive Logic Programming है, हालांकि इसका उपयोग स्वचालित प्रदर्शन या भाषा/वर्गीकरण सीखने के लिए अधिक उपयोग किया जाता है।

7

अस्वीकरण: मैं एक देशी अंग्रेजी वक्ता है और न ही क्षेत्र में एक विशेषज्ञ नहीं हूँ, मैं एक amateur हूँ - क्या पालन में imprecisions और/या त्रुटियों की उम्मीद है। तो, स्टैक ओवरफ्लो की भावना में, मेरे गद्य और/या मेरी सामग्री को सही और सुधारने से डरो मत। ध्यान दें कि यह automatic programming तकनीकों (code generation (सीजी) Model-Driven Architectures (एमडीए) से कम से कम एक उत्तीर्ण उल्लेख का एक पूरा सर्वेक्षण है)।

मैं Varkhan उत्तर (जो अनिवार्य रूप से सही है) में और जोड़ना चाहता हूं।

Genetic Programming (जीपी) Automatic Programming इंगित, अपने fitness functions, दो अलग अलग समस्याओं के साथ करने के लिए दृष्टिकोण ("आत्म संकलन" धारणात्मक एक चाहती हैं):

  • आत्म-सुधार/अनुकूलन - की संश्लेषित प्रोग्राम और, अगर सिंथेसाइज़र के लिए वांछित है; और
  • program synthesis

w.r.t. स्व-सुधार/अनुकूलन जुर्गन श्मिटहुबर के Goedel machines: आत्म-संदर्भित सार्वभौमिक समस्या हलकों को स्पष्ट रूप से इष्टतम स्व-सुधार बनाने का संदर्भ लें। (एक साइड नोट के रूप में: artificial curiosity पर उनका काम दिलचस्प है।) इस चर्चा के लिए भी प्रासंगिक Autonomic Systems है।

w.r.t. -, आगमनात्मक और निगमनात्मकstochastic (जैसा कि ऊपर उल्लेख जीपी तरह संभाव्य): program synthesis, मुझे लगता है कि 3 मुख्य शाखाओं वर्गीकृत करने के लिए संभव है।

GP अनिवार्य है stochastic क्योंकि यह इस तरह के विदेशी, यादृच्छिक उत्परिवर्तन, जीन दोहराव, जीन विलोपन, आदि के रूप में heuristics के साथ होने की संभावना कार्यक्रमों के अंतरिक्ष ... (की तुलना में यह fitness function और जाने के साथ कार्यक्रमों का परीक्षण करती है पैदा करता है सबसे ज्यादा जीवित रहें और पुनरुत्पादित करें)।

प्रेरक कार्यक्रम संश्लेषण आमतौर पर Inductive Programming (आईपी), जिनमें से Inductive Logic Programming (आईएलपी) एक उप-क्षेत्र के रूप में जाना जाता है। आम तौर पर यह तकनीक logic program संश्लेषण या एक तर्क प्रोग्रामिंग भाषा में लिखे गए सिंथेसाइज़र तक सीमित नहीं है (न ही दोनों "तक सीमित हैं .. स्वचालित प्रदर्शन या भाषा/वर्गीकरण सीखने")।

IP अक्सर है नियतात्मक (लेकिन वहाँ अपवाद हैं): (जैसे कि उदाहरण के इनपुट/आउटपुट जोड़े के रूप में) एक अधूरा विनिर्देश से शुरू होता है और उपयोग करने की संभावना कार्यक्रमों की खोज अंतरिक्ष के लिए इस तरह के विनिर्देश को संतोषजनक और उसके बाद में रोके करने के लिए इसका परीक्षण करें (जेनरेट-एंड-टेस्ट दृष्टिकोण) या दिए गए उदाहरणों में पुनरावृत्ति का पता लगाने वाले प्रोग्राम को सीधे संश्लेषित करने के लिए, जिसे सामान्यीकृत किया जाता है (डेटा संचालित या विश्लेषणात्मक दृष्टिकोण)। पूरी तरह से प्रक्रिया अनिवार्य रूप से statistical induction/inference है - यानी अपूर्ण विनिर्देश में शामिल करने के बारे में विचार करना यादृच्छिक नमूनाकरण जैसा है।

Generate-and-test and data-driven/analytical § दृष्टिकोण काफी तेजी से किया जा सकता है, इसलिए दोनों का वादा कर रहे हैं (भले ही केवल थोड़ा संश्लेषित कार्यक्रमों अब तक सार्वजनिक रूप से प्रदर्शन कर रहे हैं), लेकिन उत्पन्न और परीक्षण (जीपी) की तरह embarrassingly parallel और उसके बाद उल्लेखनीय सुधार (है यथार्थवादी कार्यक्रम आकार के लिए स्केलिंग) की उम्मीद की जा सकती है।लेकिन ध्यान दें कि Incremental Inductive Programming (आईआईपी) §, जो मूल रूप से अनुक्रमिक है, ने परिमाण के आदेशों को गैर-वृद्धिशील दृष्टिकोणों के अधिक प्रभावी होने का प्रदर्शन किया है।

§ ये लिंक सीधे पीडीएफ फाइलों के लिए हैं: क्षमा करें, मैं एक सार नहीं ढूंढ पा रहा हूं।

Programming by Demonstration (PBD) और Programming by Example (PBE) end-user development लाभ उठाने के लिए आगमनात्मक कार्यक्रम संश्लेषण व्यावहारिक रूप में जाना जाता है तकनीक है। एक (प्रकल्पित) पूरा (औपचारिक) विनिर्देश (तर्क की स्थिति) के साथ

Deductive program synthesis शुरू बजाय। तकनीकों का लाभ automated theorem provers: किसी प्रोग्राम को संश्लेषित करने के लिए, यह विनिर्देश को पूरा करने वाली ऑब्जेक्ट के अस्तित्व का सबूत बनाता है; इसलिए, Curry-Howard-de Bruijn isomorphism (सबूत-जैसे-कार्यक्रम पत्राचार और सूत्र-जैसे-प्रकार पत्राचार) के माध्यम से, यह सबूत से एक प्रोग्राम निकालता है। अन्य प्रकारों में constraint solving और deductive composition of subroutine libraries का उपयोग शामिल है।

मेरी राय आगमनात्मक और निगमनात्मक संश्लेषण अभ्यास में दो कुछ हद तक विभिन्न कोणों से एक ही समस्या पर हमला कर रहे हैं, क्योंकि क्या गठन एक पूरा विनिर्देश बहस का मुद्दा है (इसके अलावा, एक पूर्ण विनिर्देश आज अधूरा बन सकता है कल - दुनिया स्थैतिक नहीं है)।

जब (यदि) इन तकनीकों (आत्म-सुधार/अनुकूलन और कार्यक्रम संश्लेषण) परिपक्व होगा, वे declarative programming द्वारा प्रदान की स्वचालन की राशि वृद्धि करने का वादा (कि इस तरह की सेटिंग "प्रोग्रामिंग" माना जा रहा है sometimes debated है) : हम सॉफ़्टवेयर मैनुअल डिज़ाइन और विकास, मैन्युअल डिबगिंग, मैन्युअल सिस्टम प्रदर्शन ट्यूनिंग आदि के मुकाबले Domain Engineering और Requirements Analysis and Engineering पर अधिक ध्यान केंद्रित करेंगे (संभवतया कम accidental complexity के साथ वर्तमान मैनुअल के साथ पेश किए गए, स्वयं सुधार/अनुकूलन तकनीकों के साथ)। यह अभी तक मौजूदा तकनीकों द्वारा प्रदर्शित किए जाने के लिए agility के स्तर को भी बढ़ावा देगा।

संबंधित मुद्दे