View Full Version : Programmare una IA
Hardcore
1st July 2009, 21:20
Curiosità personale :D
Come diavolo si programma un IA per un videogioco? vorrei fare tipo un semplice gioco di scacchi in java e non ho la piu pallida idea di come scrivere il codice del pc sulle mosse da eseguire per darmi scacco matto e difendersi da miei attacchi.
Hador
1st July 2009, 21:49
welcome to sbattimento :nod:
ne so molto di teoria ma poco di pratica che non è il mio campo quindi aspetto alka... quel che so è cmq una rottura di coglioni
dipende dal tipo di IA, vuoi fare una IA per gioco di scacchi ?
Allora devi considerare un generatore di mosse, i punti dei pezzi, i valori delle caselle e un algoritmo beta-pruning
Lyuknet
1st July 2009, 22:55
Curiosità personale :D
Come diavolo si programma un IA per un videogioco? vorrei fare tipo un semplice gioco di scacchi in java e non ho la piu pallida idea di come scrivere il codice del pc sulle mosse da eseguire per darmi scacco matto e difendersi da miei attacchi.
è così che skynet ebbe inizio... :afraid:
Credo che gli scacchi siano piuttosto complessi per fare una IA, soprattutto se non ne sai nulla.
lol@voler scrivere un AI per un programma di scacchi senza sapere manco da che parte cominciare. A sto punto perchè non scrivere direttamente un programma che ricrei un'intelligenza senziente? :sneer:
Btw vuoi iniziare? Cercati qualche manuale introduttivo al prolog e gl.
p.s.:
ma nella supergigafantasmagoriganononèverocheèinutile facoltà di ingegneria informatica ste cose non ve le insegnano? lol
Hardcore
2nd July 2009, 00:26
siamo ingegneri le aziende non fanno scacchi ne programmazione di IA :gha:
poi la mia era solo una domanda su un dubbio non c'è bisgono di sboronare subito come se avessi detto na cagata.:gha:
stesso cosa potrei dirti io su qualsiasi circuito digitale :)
siamo ingegneri le aziende non fanno scacchi ne programmazione di IA :gha:
Eh no, infatti :sneer:
poi la mia era solo una domanda su un dubbio non c'è bisgono di sboronare subito come se avessi detto na cagata.:gha:
Nel suo piccolo era una cagata eh :D
stesso cosa potrei dirti io su qualsiasi circuito digitale :)
Utilissimissimissimissimo ai fini dell'informatica mi han detto :sneer:
Mosaik
2nd July 2009, 01:12
Ascolta me ...
Metti una sbrodolata di IF a cascata e risolvi tutti i problemi :metal:
marlborojack
2nd July 2009, 03:38
Ascolta me ...
Metti una sbrodolata di IF a cascata e risolvi tutti i problemi :metal:
Credo che la stragrande maggioranza delle IA dei mobs dei giochi siano fatte così :sneer:. Prima di proseguire in discorsi astrusi, quanta matematica sai? se faccio riferimento al termine gioco dinamico http://www.gametheory.net/dictionary/DynamicGame.html ti dice niente? Altrimenti vanno benissimo gli if.
Ercos
2nd July 2009, 06:28
Ascolta me ...
Metti una sbrodolata di IF a cascata e risolvi tutti i problemi :metal:
:bow:
Evildark
2nd July 2009, 09:04
Credo che la stragrande maggioranza delle IA dei mobs dei giochi siano fatte così :sneer:. Prima di proseguire in discorsi astrusi, quanta matematica sai? se faccio riferimento al termine gioco dinamico http://www.gametheory.net/dictionary/DynamicGame.html ti dice niente? Altrimenti vanno benissimo gli if.
oddio la "teoria dei giochi" :afraid:
Ascolta me ...
Metti una sbrodolata di IF a cascata e risolvi tutti i problemi :metal:
Beh i sistemi a regole praticamente funzionano così :p
Tanek
2nd July 2009, 10:08
p.s.:
ma nella supergigafantasmagoriganononèverocheèinutile facoltà di ingegneria informatica ste cose non ve le insegnano? lol
E nella tua invece non ti insegnano che la produzione di sw va quotata e stimata?
Anche io ho riso quando ho letto:
Per le ore ho fatto una stima così a grandi linee e direi che una 50ina dovrebbe portarmele via, però è pressochè impossibile saperlo a priori.
Non per questo mi sono permesso di denigrarti ("a sto punto sparagli cifre a caso oppure quello che ti va di guadagnare, no?"), nonostante io lo sapessi anche prima di iniziare a lavorare (=univ). Ho continuato ad "aiutarti" (mettici tutte le virgolette che vuoi) senza tirare in ballo il fatto che è ovvio che voi informatici siete inferiori :nod:
Poi se vogliamo essere proprio pignoli, è molto più attinente all'informatica lo studio di un circuito digitale rispetto alla creazione di intelligenza artificiale, che è più una branca dell'automatica.
Per l'autore del 3d: come ti hanno già detto è tutta questione di algoritmi che calcolano "percorsi" con un "profitto" più alto, gli scacchi sicuramente non sono la cosa con cui iniziare (io non credo di essere in grado di farne una per gli scacchi sinceramente, dovrei studiarmi/ripassarmi un po' di cose prima).
Magari potresti iniziare con qualcosa di più semplice, tipo il tris :P
Ma mi raccomando ricordati di mettere la variabile:
long thisAlgorithmBecomingSkynet = 99999999999;
:sneer: (non trovo l'immagine se no ti postavo anche quella :nod: )
Hador
2nd July 2009, 12:40
E nella tua invece non ti insegnano che la produzione di sw va quotata e stimata?
Anche io ho riso quando ho letto:
Non per questo mi sono permesso di denigrarti ("a sto punto sparagli cifre a caso oppure quello che ti va di guadagnare, no?"), nonostante io lo sapessi anche prima di iniziare a lavorare (=univ). Ho continuato ad "aiutarti" (mettici tutte le virgolette che vuoi) senza tirare in ballo il fatto che è ovvio che voi informatici siete inferiori :nod:
Poi se vogliamo essere proprio pignoli, è molto più attinente all'informatica lo studio di un circuito digitale rispetto alla creazione di intelligenza artificiale, che è più una branca dell'automatica.
Per l'autore del 3d: come ti hanno già detto è tutta questione di algoritmi che calcolano "percorsi" con un "profitto" più alto, gli scacchi sicuramente non sono la cosa con cui iniziare (io non credo di essere in grado di farne una per gli scacchi sinceramente, dovrei studiarmi/ripassarmi un po' di cose prima).
Magari potresti iniziare con qualcosa di più semplice, tipo il tris :P
Ma mi raccomando ricordati di mettere la variabile:
long thisAlgorithmBecomingSkynet = 99999999999;
:sneer: (non trovo l'immagine se no ti postavo anche quella :nod: )abbiamo tra gli 8 e i 10 corsi di ingegneria e testing, dei quali in almeno 3 si parla di stima dei costi, analisi di fattibilità, intortamento del cliente e analisi, ma alla triennale sono facoltativi (io li ho fatto ma axet mi pare abbia scelto il percorso IA) e alla specialistica non ci è ancora arrivato.
Discorso IA utile o meno è una stronzata che è una roba poco attinente, discorsi quali motori a regole, agenti, apprendimento non solo sono attuali ma sono ormai molto presenti in vari progetti e applicativi sia a livello aziendale sia a livello di progetti di ricerca, io ora sto facendo un progetto per un software di gestione dei dispositivi di domotica della bticino (nb non basso livello, programma in java per gestire la casa), la gestione delle "cause effetto" è (o meglio sarà) fatta con un motore a regole. Alcune cose sono poco implementabili, a cominciare dalle reti neurali, ma altre quali motori a regole, apprendimento bayesiano e filtri statistici (kalman, markov decision process e compagnia bella) sono cose molto usate e molto usabili (mio socio ha appena pubblicato un articolo sul sole 24 ore sul loro sistema che usa rfid e motore a regole per le banche per indirizzare le persone agli sportelli fornire informazioni ecc). Mi chiedo invece quando ti capiterà mai di fare un circuito digitale, se domani devi implementare nel tuo software una qualsiasi logica di decisione il motore a regole ti serve, il circuito digitale non penso che ricada nei tuoi possibili compiti.
Il confronto ingegneri informatici vs informatici finisce qua, le due facoltà danno accesso entrambe al titolo di stato, i corsi sono molto simili (IA al politecnico c'è, c'è un mio amico che non solo lo ha studiato ma sta facendo il dottorato mo) semplicemente informatica ha quei 5-6 corsi in più inerenti all'informatica perchè il primo anno non devi farti l'anno gavetta di ingegneria (a mio avviso inutile, anzi ora devo dare analisi 3 ed è la stessa prof a dire che è inutile...).
fermorestando che il libro del nostro prof di testing e ingegneria del software è nella top 3 dei libri più importanti usciti negli ultimi 2 anni :sneer:
ma esiste ancora gente così ridicola che flamma per l'indirizzo che ha scelto? nc veramente...
Comunque alle superiori avevo fatto una piccola intelligenza minchiosa per il gioco del tris e ti dirò che di tempo ce ne ho perso una valanga... ma ero ancora niubbo :)
E nella tua invece non ti insegnano che la produzione di sw va quotata e stimata?
Anche io ho riso quando ho letto:
Non per questo mi sono permesso di denigrarti ("a sto punto sparagli cifre a caso oppure quello che ti va di guadagnare, no?"), nonostante io lo sapessi anche prima di iniziare a lavorare (=univ). Ho continuato ad "aiutarti" (mettici tutte le virgolette che vuoi) senza tirare in ballo il fatto che è ovvio che voi informatici siete inferiori :nod:
Tu mi dici che sai a priori, con precisione scientifica, quante ore ci metti per scrivere un programma? Beh auguri, vallo a spiegare a quelli che ritardano le uscite di programmi/giochi di mesi se non anni :nod:
La mia battuta è nata dal fatto che hardcore in passato ha fatto delle uscite varie rasenti l'assurdo sul come ing informatica sarebbe >>> all, non per altro ^^
Poi se vogliamo essere proprio pignoli, è molto più attinente all'informatica lo studio di un circuito digitale rispetto alla creazione di intelligenza artificiale, che è più una branca dell'automatica.
Mi prendi per il culo, vero? :D
Per l'autore del 3d: come ti hanno già detto è tutta questione di algoritmi che calcolano "percorsi" con un "profitto" più alto, gli scacchi sicuramente non sono la cosa con cui iniziare (io non credo di essere in grado di farne una per gli scacchi sinceramente, dovrei studiarmi/ripassarmi un po' di cose prima).
Magari potresti iniziare con qualcosa di più semplice, tipo il tris :P
Ni.
Se tutto si basasse su algoritmi che calcolano il percorso dal profitto più alto si risolverebbe tutto o quasi con A* (e compari), cosa che invece non è assolutamente vera e cmq si tratta di sistemi di pseudo-IA.
Ste robe van bene per i programmi tipo quelli dei navigatori, ma per gli scacchi mi sembra impossibile usare una cosa del genere, anche solo meramente per lo spazio degli stati di proporzioni epiche che si andrebbe a generare.
edit:
@hador:
si ma i sistemi a regole son cazzate alla fin fine eh, io ho preso 30 e lode in ingegneria della conoscenza ma la difficoltà risiede nella rappresentazione della stessa, l'implementazione è a prova di ritardato mentale :D
Rayvaughan
2nd July 2009, 13:01
per gli scacchi mi sembra impossibile usare una cosa del genere, anche solo meramente per lo spazio degli stati di proporzioni epiche che si andrebbe a generare.
è stato tipo dimostrato che è possibile, solo che appunto servirebbe una memoria enorme
e sicuramente non è una soluzione elegante o pratica
Hardcore
2nd July 2009, 13:13
Ok pensavo fosse qualcosa di piu fattibile, ho visto un paio di giochini in cui calcolano i pesi delle varie caselli e il motore del gioco sceglie in base a ciò...
Comunque l'informatica non è solo programmazione hador e axet , ma vorrei ricordarvi che i vostri pc si basano anche su hardware e li i circuiti digitali ci sono..e anche un bel po :elfhat:
Rayvaughan
2nd July 2009, 13:17
Comunque l'informatica non è solo programmazione hador e axet , ma vorrei ricordarvi che i vostri pc si basano anche su hardware e li i circuiti digitali ci sono..e anche un bel po :elfhat:
ovvio, è inutile andare avanti con queste fanboyate, ci sono tantissimi rami dell'informatica, molto dipende dalla persona e non c'è una laurea > di un altra
uno può programmare software complicatissimi ed ad altissima efficienza grazie alla conoscienza degli algoritmi e strutture dati ma può non sapere l'andamento di carica di un condensatore, e viceversa
è stato tipo dimostrato che è possibile, solo che appunto servirebbe una memoria enorme
e sicuramente non è una soluzione elegante o pratica
Si ma lo spazio degli stati è gigantesco, il fatto che sia possibile non implica che sia fattibile.
Metti anche caso che si abbia memoria a sufficienza, un sistema del genere ci metterebbe un botto per fare una singola mossa.
Cioè gli scacchi sono una delle cose più complicate a cui applicare un AI, difatti il famoso Deep Blue era stato progettato per giocare a scacchi e cmq senza aiuto umano avrebbe perso contro Kasparov
Hador
2nd July 2009, 13:21
Ok pensavo fosse qualcosa di piu fattibile, ho visto un paio di giochini in cui calcolano i pesi delle varie caselli e il motore del gioco sceglie in base a ciò...
Comunque l'informatica non è solo programmazione hador e axet , ma vorrei ricordarvi che i vostri pc si basano anche su hardware e li i circuiti digitali ci sono..e anche un bel po :elfhat:
hardware lo si studia, ma solo lo strettamente necessario, per l'hardware c'è ingegneria elettronica.
in ogni caso per gli scacchi puoi pesare e integrare un sistema di apprendimento a pesi, non definisci tutti i casi ma fai imparare il sistema, ma lo so in via teorica assolutamente non saprei dove metter le mani per fare una roba pseudoimplementata.
axet sul discorso delle previsioni stai failerando, se l'anno prossimo fai la specialistica farai i corsi e capirai perchè...
Hardcore
2nd July 2009, 13:23
Ok si sta rivelando qualcosa di dannatamente complesso, ma giochi di scacchi per pc ci sono sin dal 486. Io intendo un gioco di scacchi quasi di base, non un elevato deep blue
uno può programmare software complicatissimi ed ad altissima efficienza grazie alla conoscienza degli algoritmi e strutture dati ma può non sapere l'andamento di carica di un condensatore, e viceversa
Comunque l'informatica non è solo programmazione hador e axet , ma vorrei ricordarvi che i vostri pc si basano anche su hardware e li i circuiti digitali ci sono..e anche un bel po :elfhat:
E' programmazione e progettazione.
Certo i pc si basano su hardware, ma a quel punto entra in gioco l'ingegneria elettronica..
@hador:
pd hai scritto prima di me quel che stavo scrivendo t_T
Boh magari failo, onestamente non ho le basi specifiche per giudicare, ma stimare con precisione il tempo che si va ad impiegare per scrivere un programma mi pare "folle" visto che cmq ci son troppe variabili in gioco e non sai mai che problemi potresti incontrare :O
Btw a noi han cambiato tutti i percorsi della specialistica, IASC non c'è più ma ci sarà Sistemi intelligenti (o qualcosa di simile) che comprenderà un botto di robe tra cui anche elaborazione delle immagini.. dio caro fanculo loro e i cambi di legge, io la prendo sempre in culo e mi tocca farmi esami di merda come economia che mi abbassano la media.. nc
Ok si sta rivelando qualcosa di dannatamente complesso, ma giochi di scacchi per pc ci sono sin dal 486. Io intendo un gioco di scacchi quasi di base, non un elevato deep blue
Seriamente, per iniziare io farei qualcosa tipo tris o forza 4.
Se ti vengono bene magari passi a qualcosa di più complesso, ma scacchi è dura a priori imo
Hardcore
2nd July 2009, 13:33
ok, ma di base come si fa a programmarlo in modo che scelga la via migliore per fare un tris e difendersi
marlborojack
2nd July 2009, 13:36
Tu mi dici che sai a priori, con precisione scientifica, quante ore ci metti per scrivere un programma? Beh auguri, vallo a spiegare a quelli che ritardano le uscite di programmi/giochi di mesi se non anni :nod:
a parte i giochi, ci sono software che devono sia lavorare sia essere prodotti in tempi esattamente definiti, non che ti sparino ma missare le deadline in entrambi casi comporta a volta rischi per la sicurezza inaccettabili. Non hai fatto ingegneria del software?
Tornando IT, qui si parlava di intelligenza per i giochi. Fondamentalmente, il meglio che puoi fare con l'hardware che c'è a disposizione adesso, è davvero un sistema di regole in cui fissi la tua conoscenza del gioco, e magari metti dei pesi che di adattano le risposte alla situazione (o meglio ancora fai un sistema ad inferenza fuzzy). Se ti vuoi sbizzarrire con qualcosa di semplice, io mi divertivo un po' a provare le policy dei combattimenti con NeverwinterNights, che ti da un toolset dove puoi programmare in pseudo-C ad eventi il comportamento dei mob
marlborojack
2nd July 2009, 13:43
ok, ma di base come si fa a programmarlo in modo che scelga la via migliore per fare un tris e difendersi
Te come giochi a tris? a meno che tu non lo faccia a caso, ci sono vari approcci.
1) Tra tutte le mosse che posso fare nel mio turno, qual'è quella che minimizza la probabilità di vittoria dell'avversario massimizzando la mia (è un gioco dinamico a tutti gli effetti)
2) Casi possibili. Il numero di mosse possibili non è esorbitante nel Tris, puoi codificare tutte le risposte caso per caso e rispondere in base alla tua memoria (della serie se i pezzi sono messi in una certa maniera, faccio questa mossa).
3) puoi provare a prevedere la mossa dell'avversario, invece che basarti sulla conoscenza attuale del gioco, e commisurare la mossa a "quello che vuole fare".
Primo e terzo approccio richiedono strumenti matematici delicati, per cui ti consiglierei il 2°, ma è divertente come una settimana di vacanza premio nelle miniere in siberia, imho
ok, ma di base come si fa a programmarlo in modo che scelga la via migliore per fare un tris e difendersi
Visto che lo spazio degli stati in un caso del genere è ridotto (e lo si può dimezzare in quanto se ci pensi è simmetrico) potresti definire un'euristica appropiata e usare A* (http://en.wikipedia.org/wiki/A*_search_algorithm).
Questa è plausibilmente la più semplice da realizzare.
a parte i giochi, ci sono software che devono sia lavorare sia essere prodotti in tempi esattamente definiti, non che ti sparino ma missare le deadline in entrambi casi comporta a volta rischi per la sicurezza inaccettabili. Non hai fatto ingegneria del software?
Ovvio, ma non ci han spiegato come stimare con esattezza il tempo che andrai ad impiegare.
Torno a dire che non riesco a capacitarmi di come possa essere possibile stimare con precisione assoluta il tempo che si impiega.. cioè una stima generica ok, ma con precisione totale.. :look:
Tornando IT, qui si parlava di intelligenza per i giochi. Fondamentalmente, il meglio che puoi fare con l'hardware che c'è a disposizione adesso, è davvero un sistema di regole in cui fissi la tua conoscenza del gioco, e magari metti dei pesi che di adattano le risposte alla situazione (o meglio ancora fai un sistema ad inferenza fuzzy). Se ti vuoi sbizzarrire con qualcosa di semplice, io mi divertivo un po' a provare le policy dei combattimenti con NeverwinterNights, che ti da un toolset dove puoi programmare in pseudo-C ad eventi il comportamento dei mob
Si ma un sistema a regole implica la conoscenza di Jess o simili, A* lo implementi anche in java.
Wolfo
2nd July 2009, 13:54
Visto che lo spazio degli stati in un caso del genere è ridotto (e lo si può dimezzare in quanto se ci pensi è simmetrico) potresti definire un'euristica appropiata e usare A* (http://en.wikipedia.org/wiki/A*_search_algorithm).
Questa è plausibilmente la più semplice da realizzare.
Ovvio, ma non ci han spiegato come stimare con esattezza il tempo che andrai ad impiegare.
Torno a dire che non riesco a capacitarmi di come possa essere possibile stimare con precisione assoluta il tempo che si impiega.. cioè una stima generica ok, ma con precisione totale.. :look:Si ma un sistema a regole implica la conoscenza di Jess o simili, A* lo implementi anche in java.
quando lavori, ci sono situazioni in cui hai un termine da rispettare, diversamente paghi delle penali.
a me pare che per capire tutto dell'informatica sia molto utile conoscere (anche se in maniera rapida) l'elettronica digitale, soprattutto per capire il perchè di determinate scelte o perchè una tecnologia è migliore di un altra...
Nonostante a me l'eletronica faccia cagare trovo interessantissimo come si presta agli scopi informatici
Lyuknet
2nd July 2009, 14:29
certe volte mi sembrate tanti leonard sheldon wolowitz che discutono su i vari campi sboronando sul proprio... :sneer:
Hador
2nd July 2009, 14:31
a me pare che per capire tutto dell'informatica sia molto utile conoscere (anche se in maniera rapida) l'elettronica digitale, soprattutto per capire il perchè di determinate scelte o perchè una tecnologia è migliore di un altra...
Nonostante a me l'eletronica faccia cagare trovo interessantissimo come si presta agli scopi informaticise fai il progettista lavori ad un livello di astrazione tale che sotto puoi avere anche il mago di oz che non ti serve a un cazzo, collegamenti tra linguaggi di alto livello e hw non c'è, ti serve se studi compilatori ma è un indirizzo molto specifico. Personalmente hw mi piace così così, trovo molto più interessante informatica teorica (complessità, semantica e concorrenza).
Tanek
2nd July 2009, 14:36
Discorso IA utile o meno è una stronzata che è una roba poco attinente,[...]
Non travisare quello che ho scritto, non ho mai parlato di utilità, ho parlato di attinenza, tra l'altro vorrei ricordarti che ho fatto la tesi in controlli automatici sugli agenti, quindi non avrei mai scritto (nè mai pensarei) che la IA è inutile nel nostro ramo.
Per il resto non ho bisogno di dimostrare qui la vostra inferiorità, è già stata ampiamente dimostrata dal mondo :nod: ( :sneer: )
ps x quelli che non hanno ricevuto ironia in dono: ovviamente le capacità personali >>>>>>>>> qualsiasi laurea nel momento in cui ho gente da selezionare. Uno dei problemi nel nostro settore è che spesso non è stato così :)
Tu mi dici che sai a priori, con precisione scientifica, quante ore ci metti per scrivere un programma? Beh auguri, vallo a spiegare a quelli che ritardano le uscite di programmi/giochi di mesi se non anni :nod:
La mia battuta è nata dal fatto che hardcore in passato ha fatto delle uscite varie rasenti l'assurdo sul come ing informatica sarebbe >>> all, non per altro ^^
Beh è una stima e in quanto tale non può avere precisione "scientifica", ma ha una precisione con un margine d'errore rispetto al totale, ovvio è che nel tuo caso se stimi 7gg/u di effort (le tue 50 ore arrotondate per eccesso sui g/u ) e poi invece sono 10 è un grosso guaio (quasi 50% di errore anche se sono solo 3 gg in più), è l'ordine di grandezza che deve essere stimato correttamente.
E su questo mi sento di risponderti che si, riesco a farlo dato che lo faccio tutti i giorni, ma ripeto, non ti preoccupare, è una cosa che affini con l'accumularsi dell'esperienza, io ormai sono 3 anni che lavoro (che sembrano/sono pochi) ma fidati è un ABISSO ENORME rispetto a come sei quando esci dall'univz.
Sulla seconda parte non sapevo che Hardcore avesse fatto uscite del genere quindi non sapevo che la tua battuta era riferita a lui in particolare :nod: posso solo dire che sono d'accordo con lui :sneer:
Comunque creare una IA per gli scacchi è una cosa che avrei voluto fare anche io (da sempre proprio, anche quando da piccolo giocavo a scacchi sull'8088 coi floppy da 5 e 1/4 :sneer: ), così su due piedi non mi ricordo di aver fatto niente al riguardo in univ, quanto meno nemmeno nessun accenno al riguardo, ma la mia memoria degenera con l'avanzare dell'Alzheimer :sneer:
ps x Lyuk: Wolowitz (io) >>>>> all :sneer: :hidenod:
piccolo edit: io sono convinto che un giorno ci riuniremo tutti quanti per fare qualcosa di grandioso :sneer: di talenti imho ce n'è un po' qui dentro, appena apro una azienda tutta mia vi seleziono scrupolosamente :nod: :sneer:
marlborojack
2nd July 2009, 14:44
piccolo edit: io sono convinto che un giorno ci riuniremo tutti quanti per fare qualcosa di grandioso :sneer: di talenti imho ce n'è un po' qui dentro, appena apro una azienda tutta mia vi seleziono scrupolosamente :nod: :sneer:
Non hai capito nulla. La tua azienda sarà rasa al suolo dai miei robot assassini.
fermorestando che il libro del nostro prof di testing e ingegneria del software è nella top 3 dei libri più importanti usciti negli ultimi 2 anni :sneer:
titolo ?
Evildark
2nd July 2009, 15:27
io avendo fatto ingegneria gestionale, faccio il pr della tua azienda tanek. :nod:
Tanek
2nd July 2009, 15:47
Non hai capito nulla. La tua azienda sarà rasa al suolo dai miei robot assassini.
Tu Marl (o Jack) farai il primo ufficiale :nod:
E i tuoi robot assassini saranno ai miei (e tuoi) ordini :banana:
Hador
2nd July 2009, 15:47
titolo ?Software Testing and Analysis: Process, Principles and Techniques
tanek rosikate solo che possiamo essere ingegneri anche noi e senza aver fatto ingegneria! :oldmetal:
tra l'altro ingegnere dell'informazione, bel titolo di merda -_-
se vivremo abbastanza prima o poi è possibile che gli scacchi diventeranno un gioco in cui chi muove per primo vince, cioè sarà possibile computare tutte le possibili mosse e contromosse per portarti alla vittoria e quindi chi muoverà per primo sarà quello che riuscirà a implementare il percorso e vincerà... ma ci manca un cicinin di potenza di calcolo e un po' di strategia per riuscire ad evitare le mosse ripetute... :|
quando lavori, ci sono situazioni in cui hai un termine da rispettare, diversamente paghi delle penali.
Ma dai? :D
Il punto è che stimare qualcosa che in fin dei conti è imprevedibile è dura, questo dico. Poi magari ci sono degli strumenti statistici che ti consentono di fare una stima più accurata, però come già detto ignoro se esistono/come funzionano :nod:
ahzael
2nd July 2009, 17:30
Ma dai? :D
Il punto è che stimare qualcosa che in fin dei conti è imprevedibile è dura, questo dico. Poi magari ci sono degli strumenti statistici che ti consentono di fare una stima più accurata, però come già detto ignoro se esistono/come funzionano :nod:
Ma infatti dipende da cosa devi stimare, di solito una qualsiasi azienda che produce software, non crea dal nulla, ma ha una storia dietro, cioe' , non vado a chiedere a un azienda che fa' siti web, di farmi un IA per un robot che deve mungere una mucca.....................
Invece l azienda se gli chiedo un sito web, dalle mie richieste sa quanto ci mettera', dall analisi del problema, ci sono delle tabelle ben definite di quante "linee" di codice servono per fare X cosa, che si usano appunto in ingegneria software per poter dare una stima del costo al cliente, non e' che a uno vado la e gli dico "10.000 euro per tutto" , no devo argomentare perche' gli chiedo 10.000, che magari poi sono 10.240......................
black
4th July 2009, 09:12
Primo e terzo approccio richiedono strumenti matematici delicati, per cui ti consiglierei il 2°, ma è divertente come una settimana di vacanza premio nelle miniere in siberia, imho
Se hai fatto ricerca operativa, dovresti usare il sistema dei cammini pesati. Ora non ricordo la teoria e tutto il sistema di calcoli sotto, ma c'e una marea di cose da studiare(o ripassare) per poter poi implementare correttamente (se sei fortunato prendi un codice funzionante ad esempio quello di un navigatore o gestore di trasporti..... alla bill gates insomma).
Una volta che hai il software per la gestione dei cammini, l unico problema (forse il piu difficile per far qualcosa di veramente sensato) è attribuire un peso alle "pedine" e alle mosse. Cosa che puoi fare solo dopo esserti letto 20000 manuali sugli scacchi.
Se vuoi un consiglio, prima fai un bel tris/battaglia navale(si lo so la battaglia navale non è influenzata dalle mosse dell'avversario) e poi puoi passare a forza quattro/dama/scacchi
Hador
4th July 2009, 09:54
si chiamano markov decision process ai quali sono collegati gli algoritmi di apprendimento per rinforzo... ma ripeto ne conosco solo la teoria
Alkabar
4th July 2009, 10:38
Si vabbeh informatici contro ingegneri FTW. Io sono un ingegnere e sto studiando per un PhD in computer science, cosa devo cercare di strozzarmi con le mie stesse mani ???? :O :O :O.
mahahah.
dipende dal tipo di IA, vuoi fare una IA per gioco di scacchi ?
Allora devi considerare un generatore di mosse, i punti dei pezzi, i valori delle caselle e un algoritmo beta-pruning
NoeX ti ha risposto.
Inizia da come si modella un gioco Min-Max che e' la base e poi vai avanti da li. La difficolta' sara' sul peso che metterai per valutare le mosse.
Gli scacchi hanno un livello di branching pari, piu' o meno, a 40, quindi ti vengono dei gran alberoni :dumbnod:, per quello noex parla di beta-pruning.
marlborojack
4th July 2009, 10:57
Se hai fatto ricerca operativa, dovresti usare il sistema dei cammini pesati. Ora non ricordo la teoria e tutto il sistema di calcoli sotto, ma c'e una marea di cose da studiare(o ripassare) per poter poi implementare correttamente (se sei fortunato prendi un codice funzionante ad esempio quello di un navigatore o gestore di trasporti..... alla bill gates insomma).
Una volta che hai il software per la gestione dei cammini, l unico problema (forse il piu difficile per far qualcosa di veramente sensato) è attribuire un peso alle "pedine" e alle mosse. Cosa che puoi fare solo dopo esserti letto 20000 manuali sugli scacchi.
Se vuoi un consiglio, prima fai un bel tris/battaglia navale(si lo so la battaglia navale non è influenzata dalle mosse dell'avversario) e poi puoi passare a forza quattro/dama/scacchi
Non sono convinto che un PL su rete sia quello che ci vuole, teoricamente il grafo può cambiare ad ogni mossa e dovresti risolverlo per ogni pedina, dopodichè stabilire un ordinamento sulle soluzioni per decidere una mossa. Ti tirerebbero le pietre prima di finire il calcolo
Si vabbeh informatici contro ingegneri FTW. Io sono un ingegnere e sto studiando per un PhD in computer science, cosa devo cercare di strozzarmi con le mie stesse mani ???? :O :O :O.
mahahah.
You will always be the child of two worlds. The question is, what will you choose?
Hardcore
4th July 2009, 19:00
ho deciso di fare il taglialegna grazie e arrivederci :angel:
black
5th July 2009, 21:09
Non sono convinto che un PL su rete sia quello che ci vuole, teoricamente il grafo può cambiare ad ogni mossa e dovresti risolverlo per ogni pedina, dopodichè stabilire un ordinamento sulle soluzioni per decidere una mossa. Ti tirerebbero le pietre prima di finire il calcolo
You will always be the child of two worlds. The question is, what will you choose?
non ho preso in esame il caso, ma considerando che il numero delle combinazioni possibili è piuttosto limitato (confrontato con un qualsiasi problema di "navigazione" ad esempio) direi che un calcolatore non dovrebbe avere grossi problemi a calcolare tutte le mosse possibili (cmq limitate).
Poi magari ho preso sotto gamba la complessità del problema, ma credo che il problema piu grosso resti comunque valutare il peso della mossa, piu che valutare tutte le mosse possibili (intendo dire che una mossa ha un valore in un dato momento, in un altro ha un "valore" diverso)
La prima cosa che mi verrebbe in mente è di memorizzare tutte le combinazioni possibili in un db, e poi in base alle mosse prese, al valore delle pedine, e al risultato finale, salvare il valore delle mosse in automatico.
Una volta fatto ciò, e lanciata la simulazione di due IA una contro l'altra, con un numero limitato di partite giocate (1M credo basti) in teoria basterebbe che il pc selezionasse dal database la combinazione migliore possibile in base alla media del valore registrato nel 1M partite giocate.
Certo si parla di db con le mosse piuttosto grossi e di numero di calcoli impressionanti.
Però cosi il pc "apprenderebbe" dalle mosse precendenti, e potrebbe anche fare "valutazioni" sulle mosse future. Una sorta di giocatore di scacchi senziente
marlborojack
6th July 2009, 11:09
non ho preso in esame il caso, ma considerando che il numero delle combinazioni possibili è piuttosto limitato (confrontato con un qualsiasi problema di "navigazione" ad esempio) direi che un calcolatore non dovrebbe avere grossi problemi a calcolare tutte le mosse possibili (cmq limitate).
Poi magari ho preso sotto gamba la complessità del problema, ma credo che il problema piu grosso resti comunque valutare il peso della mossa, piu che valutare tutte le mosse possibili (intendo dire che una mossa ha un valore in un dato momento, in un altro ha un "valore" diverso)
La prima cosa che mi verrebbe in mente è di memorizzare tutte le combinazioni possibili in un db, e poi in base alle mosse prese, al valore delle pedine, e al risultato finale, salvare il valore delle mosse in automatico.
Una volta fatto ciò, e lanciata la simulazione di due IA una contro l'altra, con un numero limitato di partite giocate (1M credo basti) in teoria basterebbe che il pc selezionasse dal database la combinazione migliore possibile in base alla media del valore registrato nel 1M partite giocate.
Certo si parla di db con le mosse piuttosto grossi e di numero di calcoli impressionanti.
Però cosi il pc "apprenderebbe" dalle mosse precendenti, e potrebbe anche fare "valutazioni" sulle mosse future. Una sorta di giocatore di scacchi senziente
Non capisco bene il confronto con il problema di navigazione, che viene facilmente risolto con una PNG, o una APNG o le altre mille varianti, magari ti riferisci all'obstacle avoidance di cui non sono esperto, ma le guide principalmente per adesso si fanno a waypoint e si sfruttano piattaforme inerziali per l'automazione del dead reckoning.
BTW, teoricamente, il database che prevedi tu, per ogni possibile configurazione dei pezzi sulla scacchiera e per ogni possibile mossa di ogni pezzo, contiene una riga con un peso, per cui sì, è MOLTO grosso, della serie che minimo per farlo funzionare ti serve davvero un x86 con un po' di memoria onboard. In più, associando un peso ad ogni mossa, devi controllare la convergenza del risultato, che purtroppo è la vittoria, che non dipende solo dalle tue mosse ma anche da quelle dell'aversario, per cui paradossalmente puoi dare un peso alto ad una mossa sbagliata solo perchè il tuo avversario ha anch'egli sbagliato mossa. Insomma il numero di regole è sì upper bounded, ma non è detto che i pesi convergano realmente ad una soluzione. Onestamente, non so bene come farei io perchè non ho il tempo di studiare il problema, ma cercherei un approccio differente, magari di tipo minmax vincolato in maniera da risolvere il tutto con LMI
non ho preso in esame il caso, ma considerando che il numero delle combinazioni possibili è piuttosto limitato (confrontato con un qualsiasi problema di "navigazione" ad esempio) direi che un calcolatore non dovrebbe avere grossi problemi a calcolare tutte le mosse possibili (cmq limitate).
Poi magari ho preso sotto gamba la complessità del problema, ma credo che il problema piu grosso resti comunque valutare il peso della mossa, piu che valutare tutte le mosse possibili (intendo dire che una mossa ha un valore in un dato momento, in un altro ha un "valore" diverso)
La prima cosa che mi verrebbe in mente è di memorizzare tutte le combinazioni possibili in un db, e poi in base alle mosse prese, al valore delle pedine, e al risultato finale, salvare il valore delle mosse in automatico.
Una volta fatto ciò, e lanciata la simulazione di due IA una contro l'altra, con un numero limitato di partite giocate (1M credo basti) in teoria basterebbe che il pc selezionasse dal database la combinazione migliore possibile in base alla media del valore registrato nel 1M partite giocate.
Certo si parla di db con le mosse piuttosto grossi e di numero di calcoli impressionanti.
Però cosi il pc "apprenderebbe" dalle mosse precendenti, e potrebbe anche fare "valutazioni" sulle mosse future. Una sorta di giocatore di scacchi senziente
Il branching factor ad ogni mossa di un ipotetica partita a scacchi è enormemente superiore rispetto a quello di un qualsiasi problema di navigazione eh.
Senza contare poi la difficoltà nell'individuazione dell'euristica, che per quanto concerne un programma di navigazione è una boiata, per gli scacchi è qualcosa di incredibilmente complicato.
Hador
6th July 2009, 12:46
memorizzare ogni possibile combinazione di una scacchiera è tipo impossibile :nod:
black
6th July 2009, 15:25
Il branching factor ad ogni mossa di un ipotetica partita a scacchi è enormemente superiore rispetto a quello di un qualsiasi problema di navigazione eh.
Senza contare poi la difficoltà nell'individuazione dell'euristica, che per quanto concerne un programma di navigazione è una boiata, per gli scacchi è qualcosa di incredibilmente complicato.
infatti io ho detto che avevo probabilemente sottovalutato il problema.
per il discorso della valutazione delle mosse in base a quelle dell'avversario, in definitiva non esiste una mossa "sbagliata" secondo la mia idea, ma solo una con valore "inferiore". certo la mia idea di IA non è di una IA destinata a vincere sempre, ma in teoria a "imparare" dai propri errori. (in fondo una ia non è una macchina per vincere, ma una macchina che apprende).
Sul discorso invece delle capacità di calcolo e peso del progetto, non sapevo ci fossero dei limiti. (non ho letto proprio tutto il 3d completamente, mi scuso)
Io davo per assunto che fossero quanto meno due macchine x86 (o una) a lavorare sul tutto (db/codice/etc).
Il problema grosso secondo me non sta nell'hardware, ma nello scrivere un codice piu sensato possibile, che non cada in deadlock e che possa dare risultati in tempi "certi"
wikipedia dice :
Si stima che il numero di posizioni legalmente ammesse sia compreso fra 10^43 e 10^50 e "l'albero di complessità del gioco" è approssimativamente di 10^123, mentre ad ogni mossa le possibilità variano da 0 (in caso di stallo o di scacco matto) a 218.
quindi cosi a naso teoricamente è possibile memorizzare tutto, probabilmente i tempi di risposta non saranno eccelsi se si accentra tutto in una macchina, ma stiamo parlando di una IA, e sfido chiunque a dire che il suo pc possa diventare piu intelligente di una persona (ora guardo deep blue che caratteristiche aveva, cmq non era sicuramente senziente...)
La forza di Deep Blue deriva principalmente dalla sua straordinaria potenza computazionale. Infatti è costituito da un "computer a parallelismo massiccio a 30 nodi basato su RS/6000" supportato da 480 processori specifici VLSI progettati per il gioco degli scacchi. L'algoritmo per il gioco degli scacchi è scritto in C e gira sotto un sistema operativo AIX. L'algoritmo è capace di calcolare 100 milioni di posizioni al secondo
Direi che aveva un bell hw coi contro caxxi per i tempi (96-97)
marlborojack
6th July 2009, 15:59
per il discorso della valutazione delle mosse in base a quelle dell'avversario, in definitiva non esiste una mossa "sbagliata" secondo la mia idea, ma solo una con valore "inferiore". certo la mia idea di IA non è di una IA destinata a vincere sempre, ma in teoria a "imparare" dai propri errori. (in fondo una ia non è una macchina per vincere, ma una macchina che apprende).
La mossa sbagliata la puoi vedere come la diminuzione del valore di una regola, nel tuo esempio. Ci sono due problemi in questo approccio, uno banale di tipo matematico: chi ti dice che i pesi si assestino ad un valore, ovvero, come pesi la dinamica dell'errore, o ancora in altri termini, come fai a decidere se ha imparato o no? Ci vorrebbe una dimostrazione di convergenza, e, ahimè, non ci sono pasti gratis, se conosci l'omonimo teorema. Il secondo è di natura computazionale. Al limite massimo, un'IA del genere avrà un numero di regole pari a tutte le possibili combinazioni di pedine sulla scacchiera moltiplicato cartesianamente a tutte le possibili mosse di ogni singola pedina. Il numero è talmente esorbitante anche solo a pensarci, che confrontato con la complessità di un qualsiasi algoritmo di aggiornamento delle regole probabilmente impiegherebbe un lasso di tempo non molto ragionevole.
Potresti controbattere dicendo di limitare il numero di regole, ma in tal caso ti avverto che dimensionare il numero di regole, equivale a dimensionare il numero di neuroni di una rete neurale necessari a svolgere il compito: anche lì, vale il no free launches theorem. Insomma, a parte le minchiate come Deep Blue, che principalmente servono come trovare pubblicitarie, sono i mezzi logici ad essere inadeguati per un'IA che apprende nel senso comune del termine, tutt'al più per adesso, siamo in grado di spiegargli a priori le mosse dei pezzi e fargli usare qualche regoletta in certe situazioni. Piuttosto deludente, anzichenò
EDIT: 10^123 >>>> di uno yottabyte (S.I. 10^24). Tu su che cazzo memorizzi i dati? ne vorrei uno
infatti io ho detto che avevo probabilemente sottovalutato il problema.
per il discorso della valutazione delle mosse in base a quelle dell'avversario, in definitiva non esiste una mossa "sbagliata" secondo la mia idea, ma solo una con valore "inferiore". certo la mia idea di IA non è di una IA destinata a vincere sempre, ma in teoria a "imparare" dai propri errori. (in fondo una ia non è una macchina per vincere, ma una macchina che apprende).
Certo ma già il fatto di assegnare un peso a una certa mossa è un qualcosa di esageratamente difficile visto che cmq si tratta di un contesto dinamico.
L'efficacia di una mossa è relativa a quello che l'avversario ha fatto all'istante t-1, il che basta per rendere l'idea di quanto è fottutamente difficile trovare un'euristica adatta.
Inoltre non è vero che una AI è una macchina che apprende, la base della conoscenza può anche essere statica.
wikipedia dice :
Si stima che il numero di posizioni legalmente ammesse sia compreso fra 10^43 e 10^50 e "l'albero di complessità del gioco" è approssimativamente di 10^123, mentre ad ogni mossa le possibilità variano da 0 (in caso di stallo o di scacco matto) a 218.
quindi cosi a naso teoricamente è possibile memorizzare tutto, probabilmente i tempi di risposta non saranno eccelsi se si accentra tutto in una macchina, ma stiamo parlando di una IA, e sfido chiunque a dire che il suo pc possa diventare piu intelligente di una persona (ora guardo deep blue che caratteristiche aveva, cmq non era sicuramente senziente...)
La forza di Deep Blue deriva principalmente dalla sua straordinaria potenza computazionale. Infatti è costituito da un "computer a parallelismo massiccio a 30 nodi basato su RS/6000" supportato da 480 processori specifici VLSI progettati per il gioco degli scacchi. L'algoritmo per il gioco degli scacchi è scritto in C e gira sotto un sistema operativo AIX. L'algoritmo è capace di calcolare 100 milioni di posizioni al secondo
Direi che aveva un bell hw coi contro caxxi per i tempi (96-97)
Si ma possibile è possibile, solo che l'essere possibile e l'essere attuabile ci passa l'universo :D
Tu pensa proprio allo stesso deep blue, un macchina strutturata in ogni sua componente hardware e software appositamente per il gioco degli scacchi.
Nonostante riuscisse a calcolare 100 milioni di posizioni al secondo, contro kasparov ha preso le pizze in faccia e quando ha vinto è stato perchè tra un match e l'altro i tecnici IBM ottimizzavano il programma per far si che non cadesse nelle "trappole" tese dall'avversario umano.
Alkabar
6th July 2009, 20:39
Non capisco bene il confronto con il problema di navigazione, che viene facilmente risolto con una PNG, o una APNG o le altre mille varianti, magari ti riferisci all'obstacle avoidance di cui non sono esperto, ma le guide principalmente per adesso si fanno a waypoint e si sfruttano piattaforme inerziali per l'automazione del dead reckoning.
BTW, teoricamente, il database che prevedi tu, per ogni possibile configurazione dei pezzi sulla scacchiera e per ogni possibile mossa di ogni pezzo, contiene una riga con un peso, per cui sì, è MOLTO grosso, della serie che minimo per farlo funzionare ti serve davvero un x86 con un po' di memoria onboard. In più, associando un peso ad ogni mossa, devi controllare la convergenza del risultato, che purtroppo è la vittoria, che non dipende solo dalle tue mosse ma anche da quelle dell'aversario, per cui paradossalmente puoi dare un peso alto ad una mossa sbagliata solo perchè il tuo avversario ha anch'egli sbagliato mossa. Insomma il numero di regole è sì upper bounded, ma non è detto che i pesi convergano realmente ad una soluzione. Onestamente, non so bene come farei io perchè non ho il tempo di studiare il problema, ma cercherei un approccio differente, magari di tipo minmax vincolato in maniera da risolvere il tutto con LMI
Il branching factor ad ogni mossa di un ipotetica partita a scacchi è enormemente superiore rispetto a quello di un qualsiasi problema di navigazione eh.
Senza contare poi la difficoltà nell'individuazione dell'euristica, che per quanto concerne un programma di navigazione è una boiata, per gli scacchi è qualcosa di incredibilmente complicato.
il database non si fa perche' a ogni mossa corrispondono nel nuovo turno altre 40 mosse in media. Normalmente una partita di scacchi va avanti per 100aia di mosse.
Mettiamo siano 100 mosse in totale, sempre:
40^100 e' il numero di record che hai da infilare nel database.... :wolfeek::wolfeek:
Comunque gli scacchi stanno per diventare un gioco completamente risolvibile.
Hador
6th July 2009, 20:59
"stanno per diventare" come ho già scritto dipende da quando riusciremo a calcolare tutte le mosse in tempo utile e ad adottare una strategia per evitare ripetizioni (altrimenti le mosse sono chiaramente infinite), allora si, anche negli scacchi vincerà chi muove per primo.
Alkabar
6th July 2009, 21:32
"stanno per diventare" come ho già scritto dipende da quando riusciremo a calcolare tutte le mosse in tempo utile e ad adottare una strategia per evitare ripetizioni (altrimenti le mosse sono chiaramente infinite), allora si, anche negli scacchi vincerà chi muove per primo.
Piu' semplice hador: c'e' gia' un computer quantistico in grado di calcolare tutte le mosse in tempo reale.... Quando vanno in produzione industriale, tra una ventina di anni, gli scacchi si giocheranno tra umani e basta.
Hador
6th July 2009, 21:35
continuo ad esser scettico sui computer quantistici, al di la della tecnica (se ne parla da 30 anni cmq) voglio vedere come cazzo ci programmi sopra :nod:
black
6th July 2009, 23:39
EDIT: 10^123 >>>> di uno yottabyte (S.I. 10^24). Tu su che cazzo memorizzi i dati? ne vorrei uno
non ho detto che sia fattibile oggi, ma solo che sia teoricamente fattibile. certo che le mie "idee" sono molto terra terra, non ho valutato un sacco di cose. e cmq ci sono cose che in questo momento mi sfuggono (o ignoro completamente).
imho cmq questa è una via per risolvere il gioco degli scacchi.
Per il discorso che una IA non deve per forza imparare, e della conoscenza statica, è una questione di punti di vista. Secondo me una IA che non impare, e aumenta le sue conoscenze non è una IA. Cioè se voglio tentare di paragonarla a quella umana deve : apprendere, modificare le informazioni apprese, eliminare quelle considerate inutili (bel problema) e saper scegliere la soluzione ottima per il contesto (non la migliore).
Il concetto di AI è a dir poco labile.
Ci sono miliardi di interpretazioni.. un po' come i roboticisti e quelli del ramo AI che si scannano sul concetto di agente insomma
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.