mercoledì 16 novembre 2011

"Machiavelli" come CSP (seconda parte)

Nella prima parte ho descritto il problema e l'ho formalizzato in termini di programmazione lineare. Ora manca solo di verificare che funzioni.

Non mi dilungherò in questa parte anche perché è quasi tutto spiegato nel codice e sarebbe inutile spiegare passo-passo come sono arrivato a scriverlo.

Per prima cosa, ho scelto il software. Per il problema di soddisfacimento ho usato GLPK, un risolutore lineare che supporta una sintassi molto flessibile e soprattutto è free. Con questo risultato. L'output non è molto leggibile ma la risoluzione è corretta.

Successivamente ho tradotto tutto in uno script Python che simula una partita di Machiavelli, il computer contro sé stesso, con risultati come questo, di cui pubblico un estratto.
Nota: non avendo molta dimestichezza col Python, il codice potrebbe non essere molto "elegante", diciamo.
(...)

Contenuto del tabellone
A♥ A♠ A♣
Q♥ Q♦ Q♠
6♠ 7♠ 8♠ 9♠ 10♠ 
A♣ 2♣    J♣ Q♣ K♣ 

Turno del giocatore 1
Carte del giocatore 1:
    4♦ 4♦ 4♠ 7♥ 8♣ 8♦ 6♦ 10♥ K♦ 8♣ 3♥ 3♣ 2♥
Il giocatore 1 cala le carte: 3♣
Contenuto del tabellone
A♥ A♠ A♣
Q♥ Q♦ Q♠
6♠ 7♠ 8♠ 9♠ 10♠ 
A♣ 2♣ 3♣    J♣ Q♣ K♣ 

Turno del giocatore 2
Carte del giocatore 2:
    4♥ 5♣ 5♦ 9♦ K♥ 7♥ Q♦ 4♠ 6♣ 2♠ 2♦ J♦ 10♥ K♠ 10♠ J♥
Il giocatore 2 cala le carte: J♦ J♥
Contenuto del tabellone
J♥ J♦ J♣
Q♥ Q♦ Q♠ Q♣
A♥ A♠ A♣
6♠ 7♠ 8♠ 9♠ 10♠ 
A♣ 2♣ 3♣    K♣ 

Turno del giocatore 0
Carte del giocatore 0:
    3♦ 9♥ 8♥ J♥ 6♠ 8♥ 2♠ 5♥ 8♦ 10♦ 7♦ K♦ 5♥
Il giocatore 0 pesca una carta dal mazzo: 4♣

Turno del giocatore 1
Carte del giocatore 1:
    4♦ 4♦ 4♠ 7♥ 8♣ 8♦ 6♦ 10♥ K♦ 8♣ 3♥ 2♥
Il giocatore 1 pesca una carta dal mazzo: 2♥

Turno del giocatore 2
Carte del giocatore 2:
   4♥ 5♣ 5♦ 9♦ K♥ 7♥ Q♦ 4♠ 6♣ 2♠ 2♦ 10♥ K♠ 10♠
Il giocatore 2 cala le carte: K♥ K♠
Contenuto del tabellone
A♥ A♠ A♣
Q♥ Q♦ Q♠ Q♣
J♥ J♦ J♣
K♥ K♠ K♣
6♠ 7♠ 8♠ 9♠ 10♠ 
A♣ 2♣ 3♣

(...)

Nessun commento:

Posta un commento

Aggiungi un commento