Refinement
This commit is contained in:
parent
131607a3f9
commit
1a48af157d
|
@ -25,4 +25,4 @@ yarn-error.log*
|
|||
db.sqlite3
|
||||
__pycache__
|
||||
*.swp
|
||||
/uploaded_agents
|
||||
uploaded_agents
|
||||
|
|
|
@ -1,84 +0,0 @@
|
|||
''' Leduc Hold 'em rule model
|
||||
'''
|
||||
import rlcard
|
||||
from rlcard.models.model import Model
|
||||
|
||||
class LeducHoldemRuleAgentV2(object):
|
||||
''' Leduc Hold 'em Rule agent version 2
|
||||
'''
|
||||
def __init__(self):
|
||||
self.use_raw = True
|
||||
|
||||
def step(self, state):
|
||||
''' Predict the action when given raw state. A simple rule-based AI.
|
||||
Args:
|
||||
state (dict): Raw state from the game
|
||||
|
||||
Returns:
|
||||
action (str): Predicted action
|
||||
'''
|
||||
legal_actions = state['raw_legal_actions']
|
||||
state = state['raw_obs']
|
||||
hand = state['hand']
|
||||
public_card = state['public_card']
|
||||
action = 'fold'
|
||||
'''
|
||||
When having only 2 hand cards at the game start, choose fold to drop terrible cards:
|
||||
Acceptable hand cards:
|
||||
Pairs
|
||||
AK, AQ, AJ, AT
|
||||
A9s, A8s, ... A2s(s means flush)
|
||||
KQ, KJ, QJ, JT
|
||||
Fold all hand types except those mentioned above to save money
|
||||
'''
|
||||
if public_card:
|
||||
if public_card[1] == hand[1]:
|
||||
action = 'raise'
|
||||
else:
|
||||
action = 'fold'
|
||||
else:
|
||||
if hand[0] == 'K':
|
||||
action = 'raise'
|
||||
elif hand[0] == 'Q':
|
||||
action = 'check'
|
||||
else:
|
||||
action = 'fold'
|
||||
|
||||
#return action
|
||||
if action in legal_actions:
|
||||
return action
|
||||
else:
|
||||
if action == 'raise':
|
||||
return 'call'
|
||||
if action == 'check':
|
||||
return 'fold'
|
||||
if action == 'call':
|
||||
return 'raise'
|
||||
else:
|
||||
return action
|
||||
|
||||
def eval_step(self, state):
|
||||
return self.step(state), []
|
||||
|
||||
class LeducHoldemRuleModelV2(Model):
|
||||
''' Leduc holdem Rule Model version 2
|
||||
'''
|
||||
|
||||
def __init__(self):
|
||||
''' Load pretrained model
|
||||
'''
|
||||
env = rlcard.make('leduc-holdem')
|
||||
rule_agent = LeducHoldemRuleAgentV2()
|
||||
self.rule_agents = [rule_agent for _ in range(env.player_num)]
|
||||
|
||||
@property
|
||||
def agents(self):
|
||||
''' Get a list of agents for each position in a the game
|
||||
|
||||
Returns:
|
||||
agents (list): A list of agents
|
||||
|
||||
Note: Each agent should be just like RL agent with step and eval_step
|
||||
functioning well.
|
||||
'''
|
||||
return self.rule_agents
|
|
@ -16,7 +16,7 @@ from .models import Game, Payoff, UploadedAgent
|
|||
|
||||
from .tournament import Tournament
|
||||
|
||||
def reset_model_ids():
|
||||
def _reset_model_ids():
|
||||
from .rlcard_wrap import rlcard, MODEL_IDS
|
||||
agents = UploadedAgent.objects.all()
|
||||
for agent in agents:
|
||||
|
@ -69,8 +69,12 @@ def query_payoff(request):
|
|||
@transaction.atomic
|
||||
def launch(request):
|
||||
if request.method == 'GET':
|
||||
try:
|
||||
eval_num = int(request.GET['eval_num'])
|
||||
game = request.GET['name']
|
||||
except:
|
||||
return HttpResponse(json.dumps({'value': -1, 'info': 'parameters error'}))
|
||||
|
||||
games_data, payoffs_data = Tournament(game, MODEL_IDS[game], eval_num).launch()
|
||||
Game.objects.filter(name=game).delete()
|
||||
Payoff.objects.filter(name=game).delete()
|
||||
|
@ -103,7 +107,7 @@ def upload_agent(request):
|
|||
|
||||
a = UploadedAgent(name=name, game=game, f=f, entry=entry)
|
||||
a.save()
|
||||
reset_model_ids()
|
||||
_reset_model_ids()
|
||||
return HttpResponse(json.dumps({'value': 0, 'info': 'success'}))
|
||||
|
||||
def delete_agent(request):
|
||||
|
@ -113,7 +117,7 @@ def delete_agent(request):
|
|||
return HttpResponse(json.dumps({'value': -1, 'info': 'name not exists'}))
|
||||
|
||||
UploadedAgent.objects.filter(name=name).delete()
|
||||
reset_model_ids()
|
||||
_reset_model_ids()
|
||||
return HttpResponse(json.dumps({'value': 0, 'info': 'success'}))
|
||||
|
||||
def list_agents(request):
|
||||
|
|
Loading…
Reference in New Issue