first working computation with new model

This commit is contained in:
Barak Michener 2015-06-22 23:49:48 -04:00
parent 8b7cab4c59
commit b36982b65d
7 changed files with 487 additions and 17 deletions

View file

@ -26,6 +26,8 @@
7 7
], ],
"type": "vote", "type": "vote",
"proposer": 0,
"voten": 1,
"round": 1 "round": 1
}, },
{ {
@ -69,6 +71,8 @@
6 6
], ],
"type": "vote", "type": "vote",
"proposer": 1,
"voten": 1,
"round": 2 "round": 2
}, },
{ {
@ -95,6 +99,8 @@
5 5
], ],
"type": "vote", "type": "vote",
"proposer": 2,
"voten": 2,
"round": 2 "round": 2
}, },
{ {
@ -121,6 +127,8 @@
3 3
], ],
"type": "vote", "type": "vote",
"proposer": 3,
"voten": 3,
"round": 2 "round": 2
}, },
{ {
@ -147,6 +155,8 @@
6 6
], ],
"type": "vote", "type": "vote",
"proposer": 4,
"voten": 4,
"round": 2 "round": 2
}, },
{ {
@ -202,6 +212,8 @@
7 7
], ],
"type": "vote", "type": "vote",
"proposer": 5,
"voten": 1,
"round": 3 "round": 3
}, },
{ {
@ -227,6 +239,8 @@
6, 6,
7 7
], ],
"proposer": 6,
"voten": 2,
"type": "vote", "type": "vote",
"round": 3 "round": 3
}, },
@ -253,7 +267,9 @@
5, 5,
7 7
], ],
"proposer": 7,
"type": "vote", "type": "vote",
"voten": 3,
"round": 3 "round": 3
}, },
{ {
@ -280,6 +296,8 @@
5 5
], ],
"type": "vote", "type": "vote",
"proposer": 0,
"voten": 4,
"round": 3 "round": 3
}, },
{ {
@ -335,7 +353,9 @@
5, 5,
6 6
], ],
"proposer": 1,
"type": "vote", "type": "vote",
"voten": 1,
"round": 4 "round": 4
}, },
{ {
@ -382,6 +402,8 @@
6 6
], ],
"type": "vote", "type": "vote",
"proposer": 1,
"voten": 1,
"round": 5 "round": 5
}, },
{ {
@ -403,4 +425,4 @@
"must fail": true, "must fail": true,
"round": 5 "round": 5
} }
] ]

450
games/p2 Normal file
View file

@ -0,0 +1,450 @@
[
{
"game_size": 10,
"player_names": {}
},
{
"type": "vote",
"team": [
1,
7,
8
],
"votes": [
0,
1,
0,
0,
0,
0,
0,
1,
1,
0
],
"round": 1,
"voten": 1,
"proposer": 8,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "vote",
"team": [
2,
7,
9
],
"votes": [
0,
0,
0,
0,
0,
1,
1,
1,
1,
1
],
"round": 1,
"voten": 2,
"proposer": 9,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "vote",
"team": [
0,
5,
6
],
"votes": [
1,
1,
0,
1,
0,
1,
1,
0,
1,
0
],
"round": 1,
"voten": 3,
"proposer": 0,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "mission",
"team": [
0,
5,
6
],
"fails": 1,
"round": 1,
"must fail": false,
"print_order": [
"team",
"fails",
"must fail",
"round"
]
},
{
"type": "vote",
"team": [
1,
3,
6,
7
],
"votes": [
0,
0,
0,
1,
0,
0,
1,
0,
1,
0
],
"round": 2,
"voten": 1,
"proposer": 1,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "vote",
"team": [
0,
1,
2,
7
],
"votes": [
0,
0,
1,
0,
0,
0,
0,
0,
1,
0
],
"round": 2,
"voten": 2,
"proposer": 2,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "vote",
"team": [
0,
1,
3,
4
],
"votes": [
0,
0,
0,
1,
0,
1,
0,
0,
0,
1
],
"round": 2,
"voten": 3,
"proposer": 3,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "vote",
"team": [
0,
4,
7,
9
],
"votes": [
0,
0,
0,
1,
1,
1,
0,
1,
1,
1
],
"round": 2,
"voten": 4,
"proposer": 4,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "mission",
"team": [
0,
4,
7,
9
],
"fails": 1,
"round": 2,
"must fail": false,
"print_order": [
"team",
"fails",
"must fail",
"round"
]
},
{
"type": "lady",
"p1": 7,
"p2": 0,
"is good": true,
"round": false,
"print_order": [
"p1",
"p2",
"round",
"is good"
]
},
{
"type": "vote",
"team": [
0,
4,
5,
9
],
"votes": [
0,
0,
0,
1,
0,
1,
0,
0,
0,
0
],
"round": 3,
"voten": 1,
"proposer": 5,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "vote",
"team": [
0,
3,
6,
7
],
"votes": [
0,
0,
0,
1,
1,
0,
1,
0,
0,
0
],
"round": 3,
"voten": 2,
"proposer": 6,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "vote",
"team": [
0,
2,
6,
7
],
"votes": [
0,
1,
1,
0,
1,
0,
1,
1,
0,
0
],
"round": 3,
"voten": 3,
"proposer": 7,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "vote",
"team": [
0,
1,
8,
9
],
"votes": [
0,
0,
1,
1,
1,
0,
0,
0,
1,
0
],
"round": 3,
"voten": 4,
"proposer": 8,
"fails required": 1,
"print_order": [
"team",
"votes",
"round"
]
},
{
"type": "mission",
"team": [
0,
1,
2,
9
],
"fails": 0,
"round": 3,
"must fail": true,
"print_order": [
"team",
"fails",
"must fail",
"round"
]
},
{
"type": "lady",
"p1": 0,
"p2": 9,
"is good": true,
"round": false,
"print_order": [
"p1",
"p2",
"round",
"is good"
]
},
{
"type": "mission",
"team": [
0,
1,
2,
7,
9
],
"fails": 0,
"round": 4,
"must fail": false,
"print_order": [
"team",
"fails",
"must fail",
"round"
]
},
{
"type": "mission",
"team": [
0,
1,
2,
3,
6
],
"fails": 0,
"round": 5,
"must fail": true,
"print_order": [
"team",
"fails",
"must fail",
"round"
]
}
]

View file

@ -42,9 +42,9 @@ class DataModel(DefaultModel):
elif role == "Percival": elif role == "Percival":
roles = [self.player_role(x) for x in team] roles = [self.player_role(x) for x in team]
tc = "" tc = ""
if "merlin" in roles: if "Merlin" in roles:
tc += "merlin" tc += "merlin"
if "morgana" in roles: if "Morgana" in roles:
tc += "morgana" tc += "morgana"
if tc == "": if tc == "":
tc = "neither" tc = "neither"
@ -81,10 +81,13 @@ class DataModel(DefaultModel):
else: else:
continue continue
app = approval(data) app = approval(data)
if app == 0.0:
continue
if vote == 1: if vote == 1:
total = total * app total = total * app
else: else:
total = total * (1.0 - app) total = total * (1.0 - app)
#print total
return total return total

Binary file not shown.

View file

@ -46,13 +46,13 @@ class BaseModel(object):
# Override these! # Override these!
def player_sees_player_and_claims(self, p1, p2, claim, rnd): def player_sees_player_and_claims(self, p1, p2, claim, rnd):
return True return 1.0
def mission(self, team, fails, must_fail, rnd): def mission(self, team, fails, must_fail, rnd):
return True return 1.0
def votes(self, team, votes, fail_req, rnd, voten, proposer): def votes(self, team, votes, fail_req, rnd, voten, proposer):
return True return 1.0
class DefaultModel(BaseModel): class DefaultModel(BaseModel):

View file

@ -11,9 +11,9 @@ def isSpy(x, game):
return game["players"][x]["spy"] return game["players"][x]["spy"]
def approval(x): def approval(x):
if x["Approve"] + x["Reject"] == 0: if x[0] + x[1] == 0:
return 0.0 return 0.0
return (x["Approve"] * 1.0) / (x["Approve"] + x["Reject"]) return (x[0] * 1.0) / (x[0] + x[1])
def getRole(x, game): def getRole(x, game):
if str(x) not in game["role_by_seat"]: if str(x) not in game["role_by_seat"]:
@ -23,16 +23,11 @@ def getRole(x, game):
return game["role_by_seat"][str(x)] return game["role_by_seat"][str(x)]
def sumKeys(a, b): def sumKeys(a, b):
out = dd(int) return (a[0] + b[0], a[1] + b[1])
for k, v in a.items():
out[k] += v
for k, v in b.items():
out[k] += v
return out
def sum_helper(table, constraint_list): def sum_helper(table, constraint_list, keys=["Approve", "Reject"]):
if len(constraint_list) == 0: if len(constraint_list) == 0:
return table return (table[keys[0]], table[keys[1]])
c = constraint_list[0] c = constraint_list[0]
out = dd(int) out = dd(int)
if isinstance(c, type([])): if isinstance(c, type([])):

2
tim.py
View file

@ -114,7 +114,7 @@ def main():
game = DeceptionGame( game = DeceptionGame(
AvalonGame(int(metadata["game_size"])), AvalonGame(int(metadata["game_size"])),
DefaultModel) DataModel)
namemap = metadata["player_names"] namemap = metadata["player_names"]
game.load_save(data) game.load_save(data)
else: else: