• Non ci sono risultati.

Neuroph framework

Nel documento Università degli Studi di Padova (pagine 25-28)

Tecnologie impiegate

3.3 Neuroph framework

3.3 Neuroph framework

Neuroph è un framework per lo sviluppo di reti neurali in un’ottica object-oriented scritto in Java. Può essere impiegato per creare e allenare reti di neuroni in pro-grammi sviluppati in Java. Neuroph fornisce una libreria di classi così come un tool dotato di interfaccia grafica detto easyNeurons per creare e allenare reti di neuroni. Tale framework open source è ospitato presso SourceForge al seguente indirizzo http://neuroph.sourceforge.net/ed dalla versione 2.7 è rilasciato sot-to Apache License. Le versioni precedenti erano rilasciate sotsot-to LGPL. La ver-sione adottata per il progetto è la 2.8 e la si può ritrovare al seguente indirizzo http://neuroph.sourceforge.net/download.html

L’utilizzo di tale framework si è rivelato essere essenziale per poter implementare la learning heuristic1. La realizzazione delle classi necessarie per lo sviluppo di una rete neurale e relativo allenamento avrebbe richiesto troppo tempo e necessitava di test per determinare se il funzionamento corrispondeva con quello previsto.

La scelta di tale framework è dovuta a due fattori. Il primo è il numero di critiche positive reperibili in internet che sono state scritte in merito a tale framework e che hanno fatto emergere i punti di forza rispetto ad altre soluzioni. Il secondo fattore, che è stato cruciale, è la presenza di una documentazione chiara e approfondita sia di come è la struttura interna del framework (ossia di tutte le classi presenti) e di come impiegarla in un’applicazione. Ciò ha permesso in poco tempo di apprendere quali dovessero essere le classi da utilizzare e come eseguire l’allenamento della rete neurale.

3.4 LIBSVM

LIBSVM è una libreria open source per algoritmi di machine learning, sviluppata presso la National Taiwan University e scritta in C++. LIBSVM implementa l’algo-ritmo SMO per le kernelized support vector machines (SVMs), supportando quindi la classificazione e la regressione. Il codice per l’apprendimento delle SVM è spesso riusato in altri toolkit open source per gli algoritmi di machine learning. Esistono inoltre vari adattamenti per altri linguaggi di programmazione quali Java, Matlab e R.

La librerira è software libero rislasciata sotto la 3-clause BSD license. La libreria è reperibile al seguente indirizzohttp://www.csie.ntu.edu.tw/~cjlin/libsvm/ed è stata utilizzata la versione 3.18

L’utilizzo di tale libreria è stato importante per sfruttare la potenzialità delle SVM nel progetto 2. La realizzazione di tutte le classi necessarie per implementare gli algoritmi delle SVM avrebbe richiesto troppo tempo che non era disponibile. Inoltre era necessario rendere le classi estendibili in modo tale da poter modificare velocemente il particolare tipo di algoritmo e di conseguenza l’utilizzo di codice già realizzato era essenziale.

L’adozione di questa libreria rispetto ad altre è dovuta alle numerose critiche positive rivolte ad essa. Il reperimento di una documentazione chiara che indicasse esplicitamente come includere LIBSVM nel progetto è stato più complicato in quanto è presente molta documentazione su come utilizzarla mediante linea di comando ma come includerla in un progetto. Di seguito viene presentato un esempio di categorizzazione realizzato impiegando la libreria. Il software lo si può ritrovare al seguente sito web http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html?js=1#svm-toy-js.

1L’implementazione di tale euristica la si può ritrovare in 5.2

2Nella sezione 5.6 viene spiegato come sono state impiegate nel progetto

3.5. GIT

figura 3.2: Esempio di classificazione nel sito di LIBSVM

3.5 Git

Git è un sistema di controllo versione distribuito e di gestione del codice sorgente con un’enfasi alla velocità, all’integrità dei dati e il supporto ad un flusso di lavoro distribuito e non lineare. Git è stato inizialmente disegnato e sviluppato da Linus Torvalds per lo sviluppo del kernel Linux nel 2005, e da allora è diventato il sistema di controllo versione maggiormente adottato per lo sviluppo di software. Come la maggior parte di sistemi di controllo versione distribuiti, e non come i sistemi client-server, ogni working directory di Git è un repository a tutti gli effetti con una storia completa e una piena funzionalità di tracciamento di versione, indipendente dall’accesso in rete o dal server centrale. Git è un software libero distribuito sotto i termini della GNU General Public License version 2.

Lo sviluppo del progetto ha utilizzato tale strumento per poter mantenere in contemporanea più branch dello stesso software. Infatti, era necessario innanzitutto mantenere la copia originale del codice fornito all’inizio dello stage, per determinare se eventuali errori erano già presenti oppure sono stati inseriti successivamente. Dopodiché era necessario poter effettuare diverse modifiche in contemporanea agli algoritmi di intelligenza artificiale per provare varie soluzioni ed eventualmente combinare varie versioni degli algoritmi scartando quelle che non funzionano. Perciò era necessario poter avere una separazione del codice per provare in parallelo varie versioni senza che si sovrapponessero dovendo poi scorporare le parti che costituivano la versione finale.

Sono stati quindi realizzati più branch per ogni implementazione diversa che doveva essere poi testata separatamente. Il codice sorgente del progetto può essere reperito al seguente indirizzohttps://github.com/Bishop92/Geister. Inoltre, l’utilizzo di un IDE quale IntelliJ IDEA che fornisce le interfacce necessarie per inviare tutte le modifiche effettuate al server e anche al branch corretto, senza dover utilizzare uno strumento a parte per inviare i cambiamenti apportati.

14

Capitolo 4

Progettazione

La progettazione del software non ha richiesto la realizzazione dell’intera architettura in quanto questa era già disponibile. Tuttavia, il modulo di intelligenza artificiale non soddisfaceva vari principi quali la modularità o l’estendibilità. Infatti, non era prevista alcuna gerarchia che permettesse di aggiungere agevolmente nuove euristiche, così come per gli algoritmi di apprendimento della tipologia dei pezzi e per gli algoritmi di scelta della mossa da effettuare.

La struttura complessiva del modulo è costituita da tre componenti fondamentali:

• Strategia: è la parte che determina come viene scelta la mossa da eseguire tra tutte quelle considerate legali per un determinato tavolo. Data la complessità nella determinazione della mossa, una strategia può utilizzare delle euristiche per valutare un tavolo sulla semplice disposizione dei pezzi. Non esistono molti algoritmi diversi per scegliere quale pezzo muovere e come in quanto normalmente viene utilizzato l’algoritmo MiniMax. Tuttavia, può variare considerevolmente la strategia di esplorazione dell’albero del gioco e per determinare quale algoritmo risulta essere il più efficacie ed efficiente è necessario dover cambiare velocemente la strategia adottata per vederne i risultati.

• Ranker: si occupa di determinare se il pezzo che sta valutando è cattivo oppure buono. Il ranker si basa sui profili registrati dei giocatori per predire, in base al comportamento che questi hanno adottato durante gli incontri precedenti, se l’atteggiamento della pedina corrisponde ad un particolare pattern che permetta di classificarla. Gli algoritmi possono inoltre gestire, o meno, i bluff dell’avversario, ossia adottare comportamenti diversi e non banali per non far capire l’effettivo tipo dei pezzi. Ciò comporta che questa componente deve gestire un numero vario di ranker e che permetta di cambiarli agevolmente per poter effettuare vari test.

• Learner: il suo scopo è di stilare un profilo per il giocatore al termine della partita. Il learner è strettamente associato al ranker in quanto ogni ranker avrà il proprio modo di valutare il profilo e questo dipende da come il learner lo ha memorizzato. Si sfrutta il log della partita per ottenere le feature e determinare quindi il profilo. Anche in questo caso è necessario dover aggiungere velocemente varie tecniche per l’individuazione del profilo.

Nel seguito vengono proposte le varie modifiche che sono state apportate, package per package.

Nel documento Università degli Studi di Padova (pagine 25-28)

Documenti correlati