some notes

This commit is contained in:
Michael Pilosov 2022-11-25 22:33:46 -07:00
parent 8f7cb2c2d2
commit dff8ce9131

View File

@ -1,17 +1,23 @@
from typing import List, Dict, Optional from typing import List, Dict, Optional
from functools import reduce from functools import reduce
from dataclasses import dataclass, field from dataclasses import dataclass, field
from random import choice, randint
Bet = Dict[int, float] Bet = Dict[int, float]
SINGLE_BETS = {str(i) for i in range(-1, 37)}
FEASIBLE_MOVES = sorted({ FEASIBLE_MOVES = sorted({
*[f"street-{i}" for i in range(1,14)], *[f"street-{i}" for i in range(1,14)],
*[f"col-{i}" for i in range(1,4)], *[f"col-{i}" for i in range(1,4)],
*[f"corner-{i}-{i+1}-{i+3}-{i+4}" for i in range(1,33) if (i - 1)%3 < 2], *[f"corner-{i}-{i+1}-{i+3}-{i+4}" for i in range(1,33) if (i - 1)%3 < 2],
*["1-12", "13-24", "25-36", "1-18", "19-36", "even", "odd", "red", "black"], *["1-12", "13-24", "25-36", "1-18", "19-36", "even", "odd", "red", "black"],
*["triple-0", "triple-00"] *["triple-0", "triple-00"],
*SINGLE_BETS
}) })
ALIASES = {"reds", "blacks", "evens", "odds", "first-half", "last-half", "second-half", "first-18", "last-18", "second-18"} ALIASES = {"reds", "blacks", "evens", "odds", "first-half", "last-half", "second-half", "first-18", "last-18", "second-18"}
CHIP_VALUES = { 0.25, 0.5, 1, 5, 10, 25, 50, 100} CHIP_VALUES = { 0.25, 0.5, 1, 5, 10, 25, 50, 100}
@ -93,7 +99,11 @@ def interpret_bet(on="red", amount=0, bet=Optional[Bet]):
NUMS = {num_1, num_2, num_3, num_4} NUMS = {num_1, num_2, num_3, num_4}
div = 4 div = 4
else: else:
raise ValueError("unsupported bet") try:
NUMS = {int(on)}
div = 1
except ValueError as e:
raise e(f"Bet `{on}` not understood. Choose from feasible moves:\n {set(range(-1, 37))}")
bet = reduce(lambda bet, num: place_bet(bet, num, amount / div), NUMS, bet) bet = reduce(lambda bet, num: place_bet(bet, num, amount / div), NUMS, bet)
@ -143,7 +153,7 @@ def place_bets(placements):
return reduce(lambda bet, placement: combine_bets(bet, placement.place_bet()), placements, {}) return reduce(lambda bet, placement: combine_bets(bet, placement.place_bet()), placements, {})
# create a list of random Placements # create a list of random Placements
from random import choice, randint
placements = [Placement(randint(1, 10), 1, choice(list(FEASIBLE_MOVES))) for _ in range(10)] placements = [Placement(randint(1, 10), 1, choice(list(FEASIBLE_MOVES))) for _ in range(10)]
@ -172,7 +182,12 @@ class Strategy:
# guarantees the max bet cannot exceed budget: # guarantees the max bet cannot exceed budget:
num = randint(1, budget // amt) num = randint(1, budget // amt)
# select random bet type # select random bet type
on = choice(list(FEASIBLE_MOVES)) # todo: consider if this is the logic you want...
if randint(0, 1) == 0:
on = choice(list(FEASIBLE_MOVES))
else:
on = choice(list(SINGLE_BETS))
on = choice(list(FEASIBLE_MOVES)) # todo: make a parameter, allow for just single bets.
placement = Placement(num, amt, on) placement = Placement(num, amt, on)
placements.append(placement) placements.append(placement)
budget -= placement.value budget -= placement.value
@ -265,9 +280,10 @@ def simulate_games(
return players + losers return players + losers
import ast
# generate players and print them out # generate players and print them out
players = generate_players(num_players=3, min_num_games=4, total_budget=200) players = generate_players(num_players=3, min_num_games=4, total_budget=200)
players[0] = Player(budget=200.0, strategy=Strategy(budget=50, placements=[Placement(num=2, amt=5, on='triple-00'), Placement(num=1, amt=10, on='col-1'), Placement(num=60, amt=0.25, on='corner-23-24-26-27'), Placement(num=10, amt=1, on='14'), Placement(num=1, amt=5, on='street-2')]))
for p in players: for p in players:
print(p,'\n') print(p,'\n')