Domanda

Chiedo questa domanda, perché so che ci sono un sacco di tipi CS ben leggere su qui che possono dare una risposta chiara.

Mi chiedo se un simile AI esiste (o è oggetto di ricerca / sviluppo) che scrive programmi per la generazione e la compilazione del codice tutti su di essa la propria e poi procede imparando dai precedenti iterazioni. Sto parlando di lavoro per farci, i programmatori, obsoleto. Sto immaginando qualcosa che viene a sapere che cosa funziona e cosa no in linguaggi di programmazione per tentativi ed errori.

So che questo suona torta-in-the-sky quindi mi sto chiedendo di scoprire che cosa è stato fatto, se non altro.

Naturalmente, anche un programmatore umano ha bisogno di input e le specifiche, in modo tale esperimento deve avere parametri definiti con cura. Come se l'IA stava andando a esplorare le diverse funzioni di temporizzazione, questo aspetto deve essere chiaramente definita.

Ma con una sofisticata intelligenza artificiale apprendimento Sarei curioso di vedere che cosa potrebbe generare.

So che ci sono un sacco di qualità umane computer non può replicare come il nostro giudizio, i gusti e pregiudizi. Ma la mia immaginazione piace l'idea di un programma che sputa fuori un sito web dopo una giornata di pensare e mi permette di vedere ciò che si avvicinò con, e persino ancora spesso mi si aspetterebbe che fosse spazzatura; ma forse una volta al giorno ho forse do un feedback e aiutarla a imparare.

Un altro viale di questo pensiero è che sarebbe bello dare una descrizione di alto livello come il "sito menued" o "strumenti di immagine" e genera codice con sufficiente profondità che sarebbe utile come modulo il completamento del codice per me di allora codice nei dettagli. Ma suppongo che potrebbe essere immaginato come un sistema di completamento del codice gerarchico statica non-intelligente.

Che ne dici?

È stato utile?

Soluzione

esistono tali strumenti. Esse sono oggetto di una disciplina chiamata genetica programmazione . Come si valuta il loro successo dipende dalla portata della loro applicazione.

Sono stati di grande successo (ordini di grandezza più efficiente di esseri umani) per la progettazione di programmi ottimali per la gestione dei processi industriali, la diagnosi medica automatizzata, o progettazione di circuiti integrati. Quei processi sono ben limitate, con una misura di successo esplicito e immutabile, e una grande quantità di "conoscenza dell'universo", che è un grande insieme di regole su ciò che è una valida, di lavoro, programma e ciò che non è.

Sono stati del tutto inutile nel tentativo di costruire programmi generali, che richiedono l'interazione con l'utente, perché l'elemento principale di un sistema che apprende esigenze è un esplicito " funzione di fitness ", o di valutazione della qualità della soluzione attuale che ha messo a punto.

Un altro dominio che può essere visto nel trattare con "Programma di apprendimento" è logica induttiva programmazione , anche se è più utilizzato per fornire la dimostrazione automatica o l'apprendimento delle lingue / tassonomia.

Altri suggerimenti

Avviso: non sono un madrelingua inglese né un esperto in materia, sono un amatoriale - si aspettano imprecisioni e / o errori in quello che seguirà. Così, nello spirito di StackOverflow, non abbiate paura di correggere e migliorare la mia prosa e / o il mio contenuto. Si noti inoltre che questo è non una panoramica completa delle tecniche programmazione automatica ( generazione di codice (CG) da architetture Model-Driven (MDA) merita almeno un passaggio menzione).

Voglio aggiungere di più per quello che Varkhan risposta (che è essenzialmente corretto).

approccio

Il genetica programmazione (GP) per Programmazione automatica fonde, con la sua funzioni di fitness , due problemi diversi (" auto-compilation" è concettualmente un gioco da ragazzi):

  • auto-miglioramento / adeguamento - del programma sintetizzato e, se lo si desidera, del sintetizzatore stesso; e
  • sintesi programma .

w.r.t. auto-miglioramento / adeguamento vedi di Jürgen Schmidhuber macchine Goedel : autoreferenziali problema universale risolutori rendendo dimostrabilmente ottimali auto-miglioramento . (Come nota a margine: interessante è il suo lavoro sulla artificiale curiosità .) Anche rilevanti per questa discussione sono Autonomic Sistemi .

w.r.t. sintesi programma , credo sia possibile classificare 3 rami principali: stocastica (probabilistica - come sopra accennato GP), induttivo e deduttivo .

GP è sostanzialmente stocastico perché produce lo spazio di programmi che possono con l'euristica, come il crossover, mutazione casuale, duplicazione genica , gene cancellazione, ecc ... (che mette alla prova i programmi con la funzione di fitness e lasciare che il più adatti a sopravvivere e riprodursi).

sintesi programma induttivo è generalmente noto come induttivo programmazione (IP ), di cui logica induttiva Programming (ILP) è un sottocampo. Vale a dire, in generale, la tecnica non è limitata a programma di logica sintesi o di sintetizzatori scritti in un linguaggio di programmazione logica (né entrambi sono limitati a " .. dimostrazione automatica o la lingua / tassonomia di apprendimento ").

IP is spesso deterministica (ma ci sono eccezioni): parte da un incompleta specifica (ad esempio coppie esempio input / output) e utilizzarlo per vincolo lo spazio di ricerca di probabili programmi soddisfacenti tale specificazione e quindi per provarlo ( approccio generate-e-test ) o per sintetizzare direttamente un programma rilevare recidive negli esempi riportati, che vengono poi generalizzati ( dati-guidato o analitico approccio). L'intero processo è essenzialmente statistica induzione / inferenza - ie considerando cosa includere nella specifica incompleto è simile al campionamento casuale.

Genera-e-test e data-driven / analitico § approcci possono essere abbastanza veloce, in modo che entrambi sono promettenti (anche se solo i programmi poco sintetizzati sono dimostrate in pubblico fino ad ora), ma generate-e- test (come GP) è imbarazzante parallelo e miglioramenti quindi notevoli (scala a realistica formati di programma) può essere previsto. Ma nota che incrementale induttivo programmazione (IIP) § , che è intrinsecamente sequenziale, ha dimostrato di essere ordini di grandezza più efficace di approcci non incrementali.

§ Questi collegamenti sono direttamente in file PDF:. Spiace, non sono in grado di trovare un abstract

Programmazione Dimostrazione (PbD) e Programmazione by Example (PBE) sono utenti finali tecniche sviluppo notoriamente leva sintesi programma induttivo praticamente.

sintesi programma deduttivo iniziare con (presunti) strong> Specification (formale) (condizioni logiche) completi provers teorema automatizzati : per sintetizzare un programma, costruisce una prova del esistenza di una riunione oggetto della specifica; quindi, tramite Curry-Howard-de Bruijn isomorfismo (Prove-as-programmi corrispondenza e formule-as-tipi di corrispondenza), estrae un programma dalla prova. Altre varianti includono l'uso di risoluzione di vincoli e composizione deduttiva di librerie di subroutine .

A mio parere induttivo e deduttivo sintesi in pratica stanno attaccando lo stesso problema da due angoli un po 'diverse, perché ciò costituirebbe un completo specifica è discutibile (oltre, una completa specificazione di oggi può diventare domani incompleta - il mondo non è statico).

Quando (se) queste tecniche (auto-miglioramento / adattamento e la sintesi del programma) matureranno, essi promettono di aumentare la quantità di automazione fornita da programmazione dichiarativa (che tale impostazione è da considerarsi " di programmazione " è volte dibattuto): ci concentreremo di più su dominio Ingegneria e Analisi dei requisiti e Ingegneria che su software di progettazione manuale e lo sviluppo, il debug manuale, messa a punto le prestazioni del sistema manuale e così via (possibilmente con meno complessità accidentale rispetto a quello introdotto con il manuale corrente, non auto-miglioramento / tecniche di adattamento) Questo sarà anche promuovere un livello di agilità ancora essere dimostrato con le tecniche attuali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top