//---------------------------------------------------------------------------
// TuScopa v0.047 (Stegh Traibaj & Tludet Dejouga Eldoeu j Pirlunsteset)
// Copyleft 1998 ACME Inc (ex Tugomira Soft)
//---------------------------------------------------------------------------
// File delle versioni di TuScopa.cpp : versioni.txt
//---------------------------------------------------------------------------
10 Agosto v0.047 (motore7)
fatta funzionare procedura pprimiera, ora calcola  valore massimo
di primiera conseguibile da ogni squadra in ogni istante.
Il conto delle scope pare non funzioni piu' BUGBUGBUG!!!
il valore euristico della primiera e' il rapporto tra il totale
primiera conseguito su il massimo totale primiera conseguibile dalle due
squadre (il maggiore dei due valori massimi di primiera conseguibili)
sd1 157 sd7 143 (desolante :-( )
//---------------------------------------------------------------------------
8 Agosto v0.045-046 (motore7)
variazione sostanziale alla parte riguardante la probabilita' di scopa.
Ora dovrebbe rispondere al compagno e in generale comportarsi coerentemente
relativamente alle scope, a meno dei limiti della funzione previsione.
BUG in certi casi fa casino nella funzione iper calcolando parametri
incoerenti (il calcolo dei parametri pare giusto e' il loro uso insieme
che e' a volte incoerente) aggiunta un 'patch' che evita l'uscita con abort
non so se il valore calcolato in quel caso e' valido.
Aggiunte alcune cosine in mainstat per fare statistiche dettagliate
sd1 = 149 sd7 = 151
SD7 e' peggiore nelle primiere e nella napula

Prossimo passo: fare un riassunto di cio' che conosco degli avversari
e provare il minimax probabilistico.
L'idea e' per ogni mia carta, provo ogni cosa conosciuta del prossimo, ne
sommo le euristiche moltiplicate per la probabilita che effettivamente lo
stato presunto sia quello reale, quindi mi comporto esattamente come
per il minimax standard. Credo pero' che debba calcolare comunque la
statica sullo stato conosciuto (il mio) perche' e' l'unica sicura. Dopo
averla calcolata la posso correggere con il valore minimax, o posso
correggere le sue componenti con il minimax.

Su 3000
    carte ori  prim setteb scope napula vinte
SD1 6435  5551 6562 7053   23863 7603   1518
SD7 6536  5465 6533 7147   24033 7084   1482
    si    no   no   si     si    no!!   no
    49.6  50.4 50.1 49.7   49.8  51.8   50.6
    50.4  49.6 49.9 50.3   50.2  48.2   49.4

La napula quindi pare il problema fondamentale
//---------------------------------------------------------------------------
5 Agosto v0.044 (motore6 WIP)
piccole variazioni in euristica e previsioni.
Il ragionamento sulle previsioni puo' essere fatto solo tenendo conto 
di come sono uscite le carte sino a quel momento, e di quante
carte di un certo valore ho in mano.
ES compagno gioca 5 a vuoto, tagliato d'asso, all'euristica viene da rispondere
ma questa azione sarebbe sbagliata: il compagno ne ha un'altra, il precedente
non ne ha, io ne ho una, quindi, con tutta probabilita, (calcolabile con la 
multi nomiale volendo) la quarta la ha il prossimo,se io rispondo-> scopa
(ERRORE).
Pensare a generalizzare questo ragionamento (quello dei pari e dispari per 
intederci) a tutte le possibili uscite.
Creato un altro main (mainstat) dedicato alle statistiche in modo che io
non debba cambiare tutti i rem ogni volta (tranne visueuristica nel motore
Ho deciso di non andare avanti col numero del motore sinche' non faro' dei 
cambiamenti piu' sostanziali.
Devo pensare a quali informazioni possano riassumere tutti gli stati
passati, potrei in storia tenere solo gli ultimi quattro e mettere nel
riassunto solo le informazioni necessarie
Statistiche (con due sottoversioni susseguenti)
SD1 153, 147
SD6 147, 153
...gioie e dolori
//---------------------------------------------------------------------------
3 Agosto v0.043 (motore6)
Modificata leggermente l'euristica riscontrati alcuni errori logici
devo assolutamente creare un pprimiera funzionante, probabilmente mancano
alcuni dati perche' possa essere fatto.
Statistica
Scopaduro1 = 155
Scopaduro6 = 145
beh...meglio di prima anyway
//---------------------------------------------------------------------------
31 luglio v0.042 (motore5)
Corretti alcuni bug in previsione, corretti alcuni valori in euristica.
Risponde abbastanza bene al compagno e sfrutta informazioni, gioca ancora
in uno strano modo, non tanto bene cmq.
Statistica
Scopaduro1 = 159
Scopaduro5 = 141
non molto incoraggiante...
//---------------------------------------------------------------------------
31 luglio v0.041 (motore5 in rifacimento)
aggiunto il record rimaste in storia di cui ho cambiato la struttura ora
segnala se tra le rimaste c'e' ancora la carta d'oro. La struttura poggiate
forse e' inutile. Cambiata la procedura previsioni. Il motore5 sfrutta le
informazioni accumulate. Aggiunte le funzioni so,ha,soeha che rendono piu'
leggibile il codice(spero).
//---------------------------------------------------------------------------
31 luglio v0.040
creato motore04, variazioni all'euristica. Risultati nulli pare:
la versione pareggia (150 a 150 circa) con la versione 1. Primo utilizzo di
somme possibili per evitare che lasci somma sette a terra. Che mi invento
per migliorare l'euristica? A questo punto dovrei avere tutti i mattoncini,
si tratta di costruire la casa.
300 partite non sono sufficienti affinche' la statistica sia fine, la nuova
versione sara' sicuramente migliore quando vincera' 200 a 100 con la prima.
//---------------------------------------------------------------------------
29 luglio v0.039
creata procedura sommepossibili da utilizzare in euristica.
Fatte statistiche su scopaduro1/2/3 (sd1,sd2,sd3)
(sd1,sd1) = 153, 147 ; (sd1, sd2) = 149, 151; (sd2, sd2) = 154, 146
(sd1,sd3) = 155, 145 ;
forse 300 prove (circa 5 min) non sono sufficienti
//---------------------------------------------------------------------------
29 luglio v0.038
Risolto mistero di EO vincente (il passaggio del mazzo non funzionava) un
vantaggio secondario risolto facendo muovere il mazzo anche a fine partita.
Mossa la parte di AI nei file motoreXX.cpp (contenenti le procedure
scopaduroXX, euristicaXX, previsioneXX). Creata struttura per verificare
oltre alla somma totale a terra anche le sub somme. Aggiunto un flag in
mano e partita per visualizzare o meno le informazioni di debug.
Ripristinato la versione che fa una statistica in main deb. Ora si puo scegliere
di far giocare un algoritmo contro un altro (modificando il codice di mano)
//---------------------------------------------------------------------------
23 luglio v0.037
Modifiche qua' e la ad euristica, non ancora controllata previsione.
Risponde (con molte limitazioni) al compagno. Trovato piccolo bug in
ognigiocata, ed un altro in euristica (bug di gioco non di programmazione)
Miglioramenti:
-regole piu' avanzate e complesse per previsione
-tuning parametri euristica
-il giocatore deve controllare quali somme lascia non solo la
somma totale
//---------------------------------------------------------------------------
19 luglio v0.036
creata funzione previsione e inizio di utilizzo in euristica (NB per adesso
pare che non funzioni)
Un buon utilizzo dovrebbe far diventare inutile
ballarischio e i valori somma in info. riempita la struttura storia.
ora ricorda la storia di gioco.
Per i test , usando:
maindeb > tuscopa.log
dopo aver tolto tutti i get char si crea un file log per controllare come
gioca.
//---------------------------------------------------------------------------
18 luglio v0.035
aggiunte le strutture giocata, storia,previsione a stato. Serviranno per
fare le previsioni sulle carte degli avversari.
//---------------------------------------------------------------------------
17 luglio v0.034
problema EO ancora un mistero. modifiche a euristica: si fida della carta
giocata dal compagno a rischio (con terra<= 10) non si fida se la carta l'ha
giocata a rischio il prossimo.
Serve una struttura dati dove mettere le informazioni su le carte probabilmente
in mano agli altri.
//---------------------------------------------------------------------------
17 luglio v0.033
messo a posto il bug che creava l'abort. fatta statistica su mille partite
NS 300 EO 700 (circa). perche' EO vince di piu' ??
//---------------------------------------------------------------------------
17 luglio v0.032
rimpastato maindeb create funzioni mano e partita rimpastando il codice
precedente, corretto errore su daimazzo ora restituisce a chi lo ha passato
lo messo in funzione delle mani DEB dovrebbe scegliere a caso chi fa il
mazzo la prima volta
//---------------------------------------------------------------------------
15 luglio v0.031
ulteriore problema con distribuisci: una partita dura qualche centesimo
di secondo o meno e anche il nuovo randomizza fallisce, inserire cicli
di ritardo o aspettare che il motore AI consumi piu tempo
IDEA valutare gli algoritmi confrontandoli (vedi algoritmi genetici)
creato abbozzo di statistiche in merito in maindeb
BUG!!!!!!!!!!!
iper in euristica crea problemi: in casi particolari da un abort
a causa credo deve parametro approssimativo passato
EO pare avere un vantaggio immotivato
//---------------------------------------------------------------------------
15 luglio v0.030
gestita la partita con mani multiple ( a 21 per intenderci)
risolto problema con distribuisci (randomize non funziona se richiamato a
distanza di meno di un secondo)
//---------------------------------------------------------------------------
14 luglio v0.029
spostato il main in maindeb creati i file tuscopa.h ora il file eseguibile
si chiama maindeb.exe
//---------------------------------------------------------------------------
12 luglio v0.028
da meno importanza per la primiera a valori minori di 5
//---------------------------------------------------------------------------
12 luglio v0.027
usa ballavuoto in euristica. da importanza a carte giocate su vuoto dal
compagno. puo buttare carte minori di tre se ha quella di ori.
//---------------------------------------------------------------------------
12 luglio v0.025 v0.26
messo a posto aggiornamento valori info
//---------------------------------------------------------------------------
12 luglio v0.024
aggiunta il campo 'cera' in info: un flag che ricorda il passaggio delle carte
da un gruppo (rimane a vero anche se la carta viene tolta)
serve alla funzione ballavuota per cercare i casi in cui il compagno ha
ballato carta su terra vuota (e cio significa che ne ha un'altra in mano)
-non ancora verificato il funzionamento, dubbi anche sull'aggiornamento
delle somme terra: probabilmente vengono messe le somme esistenti nel
momento sbagliato
Serve saper quale era la somma a terra prima che mettessi la carta in terra
in prese potrebbe esserci in vece la somma a terra dopo aver preso ( e quindi
sempre prima di metterle in prese)
- manca nell'euristica la regola se devi ballare una carta ballane una doppia
di cui hai l'oro (manca la parte "di cui hai l'oro")
//---------------------------------------------------------------------------
12 luglio v0.A22 ... v0.E22, v0.023
cambiata la struttura di info in modo che fosse compatibile con le procedure
gia scritte. campi edentro,quandoin,chi,somma:
-edentro : vecchio significato, appartiene o meno al gruppo
-quandoin : in quale mossa e entrata la carta (mosse partono da 0 a 39, cosi
			come le carte rimaste sono 40-quando
-chi	  :	quale giocatore ha messo la carta nel gruppo
-somma    : quale era la somma a terra in quel momento

-status   : non e ancora gestito

aggiunte funzioni che aggiornassero la struttura dati
casini inenarrabili sino alla versione 23
//---------------------------------------------------------------------------
11 luglio v0.022
la bitmap 'edentro' spostata dentro la struttura 'info' gestita come bitfield
se 'info' gestita bene, la struttura 'presa' potrebbe diventare inutile.
Bisogna cambiare aggiornastat, perche gestisca 'status' di 'info' e 'fagiocata'
affinche gestisca gli altri attributi in info.



