-
Notifications
You must be signed in to change notification settings - Fork 644
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue with Bid Selection Always Returning 7NT in Bridge Game #324
Comments
A) See my last comment below about how to handle the bidding. B) You need to make sure that all four agents are "good". Using RandomAgents for the other three players will skew the bidding. The easiest way to do this is to set all four agents to the dqn_agent. A better way is to use the weights of the training dqn_agent to create the other three agents. It is also a good idea to keep these three agents more current with the training progress of the dqn_agent. I modified the training loop as follows on lines 9-11:
C) You need a new BridgePayoffDelegate since the default doesn't care about what the final contract is (only trick play is of concern). Here is an example of such a BridgePayoffDelegate:
This is used as follows:
D) After a training session, you can run the following to see what the contract bids are:
E) After the bidding becomes more reasonable, you can review the bidding with:
F) Here is my comment on how to handle the bidding. Using RL will not quite work since the agents will learn a private bidding system. Note: this is true about trick play where they will learn a private signaling system (but this is not as much a problem as with bidding. The bidding has to have a 'published' bidding system filled out on their 'bridge card'. One way is to hard code the bidding and use the agent only for trick play. Another way is to choose a bidding system like SAYC and train an agent (need not be dqn) to follow it. The major concern is to avoid 'psych' bids. |
A much easier way to get started is to set the east, south, west agents to BridgeDefenderNoviceRuleAgent() rather than to RandomAgent(num_actions). In this case, the north agent will have to 'guess' what the best contract is. The more points he has and the more high card points he has, the more likely he will bid something while the other players will just pass. You can combine this with my suggestions in the previous comment as follows:
|
I am using the Bridge environment in RLCard and made a small modification to the get_payoffs method to print the selected bid at the end of the game. The code modification I made is as follows:
However, I have noticed that the bid selection is almost always the same, specifically 7NT (No Trump), regardless of the situation. Below is a sample of the output printed by my code:
As you can see, the bid is almost always 7NT (No Trump), with only a few exceptions (like 7H). This seems like an issue since bids should vary depending on the game state, the hands of the players, and other factors.
Steps to Reproduce:
Expected Behavior:
The bid should vary based on the game state, and not always default to 7NT (No Trump). The agents should be making bids based on their hand strength, position, and other factors relevant to the Bridge game.
Actual Behavior:
The bid is almost always 7NT (No Trump), with very few instances of other bids like 7H (Hearts).
The text was updated successfully, but these errors were encountered: