//---------------------------------------------------------------------------
// TuScopa v0.032  (Stegh Traibaj & Tludet Dejouga Eldoeu j Pirlunsteset)
// Copyleft 1998 ACME Inc (ex Tugomira Soft)
//---------------------------------------------------------------------------

Procedura finale scopaduro

Parte iniziale:
prima carta

Primo:   gioca una carta doppia o tripla di cui abbia la carta di denari
		 se questa non esiste gioca la carta piu bassa di questo tipo maggiore
         di tre
Secondo: fa scopa se puo
		 altrimenti riempie (fa diventare maggiore di 10) terra
terzo:   se stata fatta scopa risponde al compagno se puo
			altrimenti procede come  il primo
		se non e stata fatta scopa FINE

parte centrale
ricostruisce la partita assegnando delle probabilita di possesso per
ogni carta e giocatore (escluso ovviamente se stesso)
in base ai risultati della procedura precedente inizia una analisi minimax
delle situazioni di gioco usando una euristica per valutare la situazione
nelle foglie dell'albero.

OPPURE (e/o)
per ogni goal perseguibile (fare punti,evitare punti dell'avversario)
calcola la fattibilita attuale e quindi procede nell'analisi della migliore
carta per perseguire quel goal.

goal:
[mazzo]
sette bello
primiera
carte
ori
[cucitura]
fare napula
evitare napula [degli avversari]
[scope]
fare scopa
evitare scopa [degli avversari]

i goal perseguibili sono quelli, tranne nel caso delle scope, che non sono gia
stati conseguiti da alcun giocatore, n da noi ne dal nostro avversario.
Le scope sono sempre, potenzialmente conseguibili, tranne da chi gioca l'ultima
carta.
La fattibilita di un goal, e la sua bonta, dipendono da:
chi e' il mazziere
dove il giocatore si trova rispetto al mazziere
lo stato di gioco (sostanzialmente le carte prese)

parte finale (ultime 2 o tre carte)
le carte degli avversari dovrebbero essere gia tutte conosciute o quasi
se non e cosi si discutono le posizioni piu probabili delle carte quindi si
procede con una analisi minimax pura completa.

i goal si possono riassumere in
voglio la carta X dove X  una descrizione di una generica carta
una carta di di denari ad esempio.

OPPURE (e/o)
per regole euristiche
esempi:
buttare l'asso buono per scopa compagno
carta sicura o asso in mano all'avversario impedisce scopa
riempire terra (terra >10 o carta sicura) impedisce scopa

Descrizione probabilit:
lo spazio degli stati e l'insieme (per ogni valore) delle distribuzioni di
quattro carte in cinque contenitori (carte mano ai giocatori e carte prese)
tenuto conto delle carte in mano al giocatore in questione e delle carte
gia scoperte (a terra o prese). Inoltre si danno delle stime euristiche in base
al tipo di giocata. La piu semplice di queste sostiene che il primo a giocare
gioca preferibilmente carta doppia o tripla.
Potrebbe essere utile l'analisi bayesiana pre-post:
io (il quarto) non ho 5 il mio compagno  "gioca un cinque" = o1

per ogni stato si ho una probabilita oggettiva a priori
s1 =(2,1,1,0) p(s1) = p1
s2 =(1,2,1,0) p(s2) = p2

creo una distribuzione ad hoc (creata da un esperto, io per esempio)
p(o1 | s1) = .9
p(o1 | s2) = .1

per la regola di bayes
p(s1|o1)  = p(s1)p(o1|s1)
			------------
            sum(for each si)(p(si)p(o1|si))

trovo la nuova distribuzione di probabilita' della distribuzione delle carte
in termini semplici la probabilita che abbia un'altra carta.
Il problema consiste nella creazione manuale e nel tuning delle distribuzioni
ad hoc.

biscopa
l'agente biscopa ha 2 soli goal fare scopa ed evitare le scope dell'avversario

se (terra vuota)
 gioca asso
 o carta piu sicura
altrimenti
 gioca asso
 o metti in sicuro terra
 (>10 o carta sicura)

una carta  sicura p se con probabilita p non e posseduta dall'avversario che
giochera dopo di noi.
p e definita col metodo di bayes sopra descritto.

nello stesso modo si possono creare degli agenti dedicati
priscopa, oriscopa, bellascopa, napscopa, cartescopa
dedicati rispettivamente al conseguimento della primiera,ori,settebello,
napula e carte. ognuno dei quali restituisce un valore di fattibilita
che bisogna massimizare. In altre parole i vari sottoprogrammi propongono
una carta diversa e si scegle tra questa la migliore.
Meglio ancora se le varie subroutine presentassero un insieme di carte
a valori diversi e quindi si scegliesse la carta il cui valore totale fosse
piu alto.

Possibili distribuzioni di n carte in tre posti
-----------------------------------------------------

N=4		N=3		N=2		N=1		N=0

400     210     200     100     000
310     201     110     010
301     120     101     001
220     111     020
211     102     011
202     030     002
130     021
121     012
112     003
103
040
031
022
013
004

chiamando x1,x2,x3 il numero di carte di un certo valore per persona la funzione
di distribuzione  la multinomiale

f(x1,x2,x3,n) = n!/prod(i=1..3)(xi!)*(1/3)^n

Pattern di giocata
asso, prendo carte, ballo carta

Pattern terra
vuota (nessuna carta), rischio p (somma <= 10), piena (somma >10)

Pattern carta
valore sicuro p (non da scopa con probabilit p), carta importante v (carta
importante con valore ,dipendente dal contesto, v)

Se il mio compagno lascia la terra a rischio p puo essere (alternativamente).
a) decide di correre un rischio per prendere o non cedere una carta di valore
	v
b) la mia valutazione di p  sbagliata (per esempio doppia coppia dei due
	compagni, oppure prima carta del compagno)

OBIETTIVO minimo 
un algoritmo in cui la terza carta giocata sia in risposta al compagno, e in cui
la prima carta sia la piu piccola carta doppia di cui si possiede la carta di
denari.
Serve un elenco delle carte giocate nell'ordine.

Minimax con probabilita'
-------------------------------------------------

si usa invece di euristica mediaeuristica
definita (per ogni possibile risultato della variabile casuale c)

mediaeuristica = sum(all ci)(Pi euristica(s,ci)

cioe per ogni possibilita si calcola l'euristica pura e si pesano i risultati
con la probabilita' che avvengano quindi ..[non ricordo]

quanto detto basta se no altro a fare una ricerca un passo in piu' avanti

Regole Euristiche (in italiano)
--------------------------------------------------
-taglio d'asso se prossimo non ha carta sicura o asso
-oppure ha asso (non carta sicura) e voglio che lo sprechi per salvarsi dalla scopa
-se ho asso di danari non mi preoccupo di coprire la napula
-se il compagno lascia valore tot e le tot non sono finite
 significa che ha tot in mano
-se prende la carta non con quella d'oro (due brutte) 
 significa che non ha l'oro (intendesi le prime due con oro in giro)
-se non fa scopa di tot 
 non ha tot
-non prende carta importante a terra (mettiamo il sette)
 non ha carta importante (non ha il sette)
-butto l'asso principalmente per questi motivi
 * sono sicuro di dare (altrimenti) scopa
 * ci sono delle carte importanti a terra o delle carte importanti da
   rendere dispari(pari)
 * sono ragionevolmente sicuro che il prossimo dara' scopa al compagno
- tengo l'asso
 * aspettando generiche carte importanti
 * aspetto carta importante del precedente
-se ho una carta importante che il prossimo prendera' sicuramente (l'ultimo i.d.)
 * la uso in modo da far fare scopa al mio compagno
 * la do su terra piena per evitare scopa
-se ho gia dato una scopa di tot
 cambio carta ( il rischio e simile e in piu' ho altre informazioni sulle carte
 dell'avversario)
-se su terra vuota (e similari) non gioco una delle quarte carte esistenti
 non ho quelle quarte carte 