Pergunta

Estou fazendo esta pergunta porque eu sei que há um monte de tipos CS bem ler aqui que podem dar uma resposta clara.

Eu estou querendo saber se tal AI existe (ou está sendo pesquisado / desenvolvido) que ele grava programas de geração e compilação de código tudo sobre o seu próprio e, em seguida, progride aprendendo com ex-iterações. Eu estou falando sobre como trabalhar para fazer de nós, programadores, obsoleto. Eu estou imaginando algo que aprende o que funciona eo que não funciona em uma linguagem de programação por tentativa e erro.

Eu sei que isso soa pie-in-the-sky por isso estou pedindo para descobrir o que tem sido feito, se alguma coisa.

Claro que mesmo um programador humano precisa de insumos e especificações, de modo tal experiência tem que ter parâmetros cuidadosamente definidos. Como se a AI estava indo para explorar diferentes funções temporais, esse aspecto deve ser claramente definido.

Mas com um aprendizado sofisticado AI eu estaria curioso para ver o que ele pode gerar.

Eu sei que há um monte de qualidades humanas computadores não podem se replicar como nosso julgamento, gostos e preconceitos. Mas minha imaginação gosta da idéia de um programa que cospe um web site depois de um dia de pensar e me deixa ver o que ele veio com, e mesmo ainda muitas vezes eu ia esperar que ele seja lixo; mas talvez uma vez por dia eu talvez dar-lhe feedback e ajuda-o aprender.

Outra avenida deste pensamento é que seria bom para dar uma descrição de alto nível como o "website menued" ou "ferramentas de imagem" e gera o código com profundidade suficiente para que seria útil como um módulo de conclusão de código para mim, em seguida, código nos detalhes. Mas suponho que poderia ser imaginado como um esquema de conclusão de código hierárquica estática não-inteligente.

Como sobre isso?

Foi útil?

Solução

Existem tais ferramentas. Eles são o tema de uma disciplina chamada Programação Genética. Como você avalia o seu sucesso depende do âmbito da sua aplicação.

Eles foram extremamente bem sucedidas (ordens de grandeza mais eficiente do que os seres humanos) para projetar programas otimizados para a gestão do processo industrial, diagnóstico médico automatizado, ou projeto de circuitos integrados. Esses processos são bem restrito, com uma medida explícita e imutável sucesso, e uma grande quantidade de "conhecimento universo", que é um grande conjunto de regras sobre o que é um válido trabalho, programa, eo que não é.

Eles têm sido totalmente inútil na tentativa de programas gerais de construção, que exigem interação do usuário, porque o principal item de um sistema que aprenda necessidades é um explícito " função de aptidão ", ou avaliação da qualidade da solução atual que surgiu com.

Outro domínio que pode ser visto em lidar com a "aprendizagem programa" é indutivo lógica de programação, embora seja mais usada para fornecer demonstração automática ou / aprendizagem de línguas taxonomia.

Outras dicas

Disclaimer: Eu não sou um falante nativo Inglês, nem um especialista na área, eu sou um amador - esperar imprecisões e / ou erros no que seguir. Assim, no espírito do stackoverflow, não tenha medo de corrigir e melhorar minha prosa e / ou meu conteúdo. Note-se também que este é não um levantamento completo de técnicas programação automática ( geração de código (CG) de Arquiteturas Model-Driven (MDA) méritos pelo menos uma menção de passagem).

Eu quero adicionar mais para o Varkhan respondidas (que é essencialmente correto).

A abordagem Genetic Programming (GP) para automática Programação conflates , com a sua funções de aptidão , dois problemas diferentes (" self-compilação" é conceitualmente um acéfalo):

  • auto-aperfeiçoamento / adaptação - do programa de sintetizado e, se assim o desejar, do próprio sintetizador; e
  • síntese de programas .

w.r.t. auto-aperfeiçoamento / adaptação referem-se a de Jürgen Schmidhuber Gödel máquinas : solucionadores de problemas universal auto-referenciais que fazem auto-melhorias comprovadamente ótimas . (Como uma nota lateral: interessante é o seu trabalho sobre artificial curiosidade .) Também relevante para esta discussão são sistemas autonômicos .

w.r.t. programa de síntese de , eu acho que é possível classificar 3 ramos principais: estocástica (probabilística - como acima mencionado GP), indutiva e dedutivo .

GP é essencialmente estocástica , pois produz o espaço de programas susceptíveis de heurísticas, tais como cruzamento, mutação aleatória, duplicação de genes , deleção do gene, etc ... (que ele testa programas com o aptidão função e deixar o mais aptos sobrevivem e se reproduzem).

programa indutivo síntese é geralmente conhecido como Programação indutivo (IP ), dos quais indutivo lógica de programação (PLI) é um sub-campo. Isto é, em geral, a técnica não se limita a síntese programa de lógica ou sintetizadores escritos em uma linguagem de programação lógica (nem tanto se limitam a " .. demonstração automática ou / aprendizagem de línguas taxonomia ").

IP ié muitas vezes determinista (mas há exceções): começa a partir de um incompleta especificação (como exemplo de entrada / pares de saída) e usar isso para restrição do espaço de busca de programas susceptíveis satisfazendo tal especificação e, em seguida, para testá-la ( abordagem gerar-e-teste ) ou directamente sintetizar um programa detectando recidivas nos exemplos dados, os quais são, em seguida, generalizadas ( dados orientada ou analítica abordagem ). O processo como um todo é essencialmente estatísticas indução / inferência - ou seja, considerando o que incluir na especificação incompleta é semelhante a amostragem aleatória.

Gerar-and-test e Data-Driven / analítica § aproxima pode ser bastante rápido, então ambos são promissoras (mesmo que apenas programas pouco sintetizados são demonstrados em público até agora), mas gerar-e- test (como GP) é embaraçosamente paralelo e melhorias em seguida notáveis ??(escala para realista tamanhos programa) pode ser esperado. Mas nota que Programação Incremental indutivo (IIP) § , o que é inerentemente sequencial, tem demonstrado ser ordens de grandeza mais eficaz das abordagens não-incrementais.

§ Esses links são diretamente para arquivos PDF: desculpe, eu sou incapaz de encontrar um resumo

.

Programação por Demonstração (privacidade desde a concepção) e Programação por exemplo (PBE) são desenvolvimento do usuário final técnicas conhecidas para alavancagem programa indutivo síntese na prática.

programa dedutivo síntese começar com (supostos) / strong> (formal) de especificação (condições lógicas) completos automatizado teorema provers : para sintetizar um programa, ele constrói uma prova da existência de um objecto encontro da especificação; portanto, via Curry-Howard-de Bruijn isomorfismo (provas-as-programas de correspondência e fórmulas-como-tipos correspondência), ele extrai um programa de prova. Outras variantes incluem o uso de restrição resolver e composição dedutiva da sub-rotina de bibliotecas .

Na minha opinião indutiva e dedutivo síntese na prática estão atacando o mesmo problema por dois ângulos um pouco diferentes, porque o que constitui um completo especificação é discutível (além disso, uma especificação completa hoje pode se tornar amanhã incompleta - o mundo não é estático)

.

Quando (se) essas técnicas (auto-aperfeiçoamento / adaptação e de síntese de programa) vai amadurecer, eles prometem a subir a quantidade de automação fornecido por declarativa programação (que tal definição é para ser considerado " programação " é algumas vezes debatido ): vamos nos concentrar mais em Engenharia de domínio e Análise de Requisitos e Engenharia que em software de desenho manual e desenvolvimento, depuração manual, o ajuste de desempenho manual do sistema e assim por diante (possivelmente com menos acidental complexidade comparada à introduzida com o manual atual, não é auto-melhoria / adaptação de técnicas) Isso também irá promover um nível de agilidade ainda não foi demonstrada por técnicas atuais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top