Comments (3)
To be able to use DP4A #8 (whenever that gets finished) the number of features must be a multiple of four. So we either need to add two more features or add padding features.
If we are not adding padding features then we can re-add the scoring features. For example, the following two:
- Point is only reachable from our stones.
- Point is only reachable from opponent stones.
These features conform to the Tromp-Taylor Rules. But we removed some similar features earlier because we disliked them for giving the neural network an overly simplistic view of the game state, so re-adding them may be a bad idea.
from dream-go.
The first question to answer when it comes to implementing some algorithm to determine whether a move is a ladder capture is what defines such a move. I've compiled some examples of interesting moves to consider in Figure 1. Move A
, B
, C
and D
are fairly obvious ladder capturing moves, while E
and F
are questionably ladder capturing moves. Move G
should not be considered a ladder capturing move, but is there to highlight the problem of differentiating it from move B
.
According to the definition given by Sensei's Library a ladder is any sequential series of ataris forcing the opponent's stones around.
Further Marel Crasmaru and John Tromp [1] gives the following definition of the ladder problem Given a position on an arbitrarily-sized Go board, and a white group with 2 liberties, an Black keep putting white in atari (that is, reduce white to 1 liberty) until capture?
This would make only move A
, C
, and D
ladder capturing moves, leaving out B
which I would consider a ladder capturing move. For the sake of simplicity (and an efficient implementation) that might be an acceptable implementation.
With the definitions given above one can derive the following fairly straightforward recursive implementation to determine whether a move is a ladder capture:
- Play the suggested move a on a board.
- If any of a neighbours (henceforth called b) were reduced to one liberty then play a move at that liberty.
- If the group at b has exactly one liberty then this is a ladder capture move.
- If playing the move in step 2 put any of my stones in atari then the suggested move a is not a ladder capturing move.
- If the group at b has more than two liberties then move a is not a ladder capturing move.
- If the group at b has exactly two liberties and at least one of them is a ladder capturing move then the suggested move a is a ladder capturing move.
From this algorithm one can trivially derive a ladder escaping algorithm:
- Play the suggested move a on a board.
- If the number of liberties of the group at a is not exactly two then this is not a ladder escaping move.
- If playing at neither of the liberties of a is a ladder capturing move, then the suggested move a is a ladder escaping move.
Note that this algorithm will miss the very last move in the ladder sequence that actually saves the group, but that should not be a problem anyway since the program should find that easily itself. It is only reading out the 12+ long sequence that is problematic.
from dream-go.
I added the ladder features and trained another network from human games based on it, and the network still fails the ladder tests.
So questionable whether they are worth the effort, but I am leaving them in and we can see in the future whether they are necessary.
from dream-go.
Related Issues (20)
- Re-balance search tree size vs neural network size HOT 2
- Scoring and `kgs-genmove_cleanup` improvements
- About MCTSnet HOT 2
- Introduce a new self-play mode
- Poor GPU utilization observed during play HOT 2
- Re-factor MCTS code to use asynchronous framework
- Shape of the convolution in the policy head
- Monte-Carlo tree search as regularized policy optimization HOT 3
- Investigate MCTS parallelism degradation HOT 7
- Prune nodes from the search tree that are obviously bad HOT 1
- Re-implement `INT8x32_CONFIG` support during inference
- Investigate SWISH as activation function in cuDNN
- GPU vs CPU matrix multiplication HOT 1
- Sparse Quantized Model
- MLP-Mixer: An all-MLP Architecture for Vision HOT 7
- NNUE (ƎUИИ Efficiently Updatable Neural Network) for Go HOT 5
- Triton: Open-Source GPU Programming for Neural Networks
- Long startup times due to `cudnnBuildRNNDynamic`
- 2022 TCGA Computer Go Tournament is coming! HOT 1
- Unsound uninitialized array
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dream-go.