Newsgroup: it.comp.ia
Titolo: Programmazione automatica

E' giusto dire che il caso più di successo di programmazione
automatica (programmi che scrivono programmi) a tuttoggi è la
programmazione genetica?
il linguaggio di programmazione di eccellenza il lisp
quali altre alternative - casi di successo?
Ciao!

 il linguaggio di programmazione di eccellenza il lisp
 > quali altre alternative - casi di successo?
Intendi nella programmazione genetica? I linguaggi funzionali in genere. 
Diverse persone che conosco considerano il LISP superato, e preferiscono 
altri standard come Haskell o OCamL (con cui sono stati fatti diversi 
programmi di un certo successo, anche se sono programmini).
Come al solito, però, uno, volendo, può fare programmazione funzionale 
in quasi qualsiasi linguaggio (esiste anche FC++).
Trovi un po' di casi di studio su 
www.genetic-programming.org
 - nota 
che, con "successo" in questi casi si intende, molto operativamente, che 
i risultati prodotti dal software sono competitivi rispetto a quelli 
raggiunti dagli esseri umani in situazioni analoghe, dimostrando quindi 
la potenziale utilità dell'approccio genetico.
-- 
C++U,
   GiO

 Trovi un po' di casi di studio suwww.genetic-programming.org- nota


la potenziale utilità dell'approccio genetico.
tnx
Ciao
Chairam

 Ma generare un algoritmo genetico ex novo non l'ho mai sentito.
Anche a me non sembra ci siano stati grandi risultati, perciò dipende da 
quello che intendi con "successo".
Sono quelle cose che si sentono alle conferenze e che, secondo me, sanno 
di fuffa.
Tra l'altro, a mio parere, un algoritmo genetico che crea un altro 
algoritmo genetico può essere semplificato ad un solo algoritmo genetico 
quasi con la stessa logica con cui una routine ricorsiva può diventare 
iterativa. Mi rendo ben conto della differenza: l'esempio è solo per 
chiarire il concetto di "srotolamento" (unrolling).
-- 
C++U,
   GiO

 è con che facilità un programma ne può comporre una atro 
Il paragone tra linguaggi è molto relativo. Come ho detto, dipende più 
che altro dall'espressività del linguaggio in relazione al modo di 
pensare del programmatore.
-- 
C++U,
   GiO

Ho parecchi dubbi sull'effettivo successo della programmazione genetica 
soprattutto in considerazione del teorema NFL.
Per quanto riguarda "programmi che scrivono programmi" credo che sia un 
tranello logico in cui si cade facilmente e che sia un finto problema.
In generale un qualsiasi programma P(x) dove x è il parametro se P è 
universale si può tranquillamente dimostrare che esisterà sempre un P(P1(x)) 
dove P1 è a sua volta un programma universale.
Le capacità di scrivere altri programmi indipendentemente da una 
interpretazione prettamente personale nel riconoscimento del "programma" è 
una caratteristica intrinseca di ogni programma universale.
Un bel esempio a mio avviso è l'implementazione ricorsiva dell' algoritmo 
della soluzione del problema delle torri di Hanoi dove si potrebbe 
facilmente interpretare come un programma che scrive il programma di 
spostamenti sullo stack , e questo indipendentemente dal linguaggio 
utilizzato.
Denis.


Spiegati meglio

 Spiegati meglio
A lettere di mazzacane: è troppo facile dire "programmazione automatica" 
intendendo "programmi che scrivono programmi" perché bisogna vedere bene 
cosa si intende.
Come ho detto nel primo post, qualsiasi compilatore è un programma che 
scrive programmi, ma non impressiona nessuno.
Qualsiasi software che interagisce con un database SQL scrive query 
(programmi) dinamicamente, ma nessuno si è mai soffermato a chiamare 
questa programmazione automatica, ecc.
Insomma, in molti casi è solo una "cosa" mentale - bisogna invece vedere 
che risultati si ottengono. :)
-- 
C++U,
   GiO

[CUT]
finto problema in che senso?
intendi che non esiste una effettiva utilità?
fantastico un po':
poniamo che i programmi scritti dal programma che scrive programmi
(chiedo venia per la prolissità) interagiscano con un dominio molto
ampio (per esempio la realtà (robot-realtà fisica))
puoi dire che i programmi generati di volta in volta non potrebbero
avere utilità maggiore?
So che non ho definito utilità (o fitness), ma so anche che, più in
generale non ho definito neppure una 'motivazione' a generare
programmi e a lanciarli.
un esempio che mi viene in mente, spero corretto:
penso a un sistema classificatore
esso insegue il rinforzo ottenuto dall'ambiente
cosa succederebbe se, dopo un certa quantità di esecuzioni (periodo di
tempo o chessoio...) il criterio con cui gli viene assegnato il
rinforzo cambiasse (il che in un certo senso equivale a cambiare il
mondo con cui interagisce) e i programmi generati fossero mattoni
utili per generarne altri nella direzione del nuovo rinforzo?
Ciao
Chairam

 questa programmazione automatica, ecc.
Se ricordo bene, SQL nella sue versioni standard non è Turing-
completo, quindi scrivere query in SQL non è programmare. :D


 completo, quindi scrivere query in SQL non è programmare. :D
Giusto! ma di esempi se ne possono fare altri. :) Ho fatto anche 
l'esempio del PHP che genere Javascript e ne puoi inventare altri.
-- 
C++U,
   GiO