208 lines
9.6 KiB
Plaintext
208 lines
9.6 KiB
Plaintext
GNU Go Task List
|
|
|
|
You can help make GNU Go the best Go program.
|
|
|
|
This is a task-list for anyone who is interested in helping with GNU
|
|
Go. If you want to work on such a project you should correspond with
|
|
us until we reach a common vision of how the feature will work!
|
|
|
|
A note about copyright. Before any code can be accepted as a part of
|
|
the official release of GNU Go, the Free Software Foundation will want
|
|
you to sign a copyright disclaimer. Of course you can work on a forked
|
|
version without signing such a disclaimer. If you want your changes to
|
|
the program to be incorporated into the version we distribute we need
|
|
such a disclaimer. Please contact the GNU Go maintainers, Daniel Bump
|
|
(bump@sporadic.stanford.edu) and Gunnar Farneback
|
|
(gunnar@lysator.liu.se), to get more information and the papers to
|
|
sign.
|
|
|
|
Below is a list of things YOU could work on. We are already working on
|
|
some of these tasks, but don't let that stop you. Please contact us or
|
|
the person assigned to task for further discussion.
|
|
|
|
//--------------------------------------------------------------
|
|
// General
|
|
//--------------------------------------------------------------
|
|
|
|
* If you can, send us bug FIXES as well as bug reports. If you see
|
|
some bad behavior, figure out what causes it, and what to do about
|
|
fixing it. And send us a patch! If you find an interesting bug and
|
|
cannot tell us how to fix it, we would be happy to have you tell us
|
|
about it anyway. Send us the sgf file (if possible) and attach
|
|
other relevant information, such as the GNU Go version number. In
|
|
cases of assertion failures and segmentation faults we probably
|
|
want to know what operating system and compiler you were using, in
|
|
order to determine if the problem is platform dependent.
|
|
|
|
//--------------------------------------------------------------
|
|
// smaller projects
|
|
//--------------------------------------------------------------
|
|
|
|
These issues are of tactical nature, i.e. they concern some specific
|
|
feature or the infrastructure of the engine. Some of these are quiet
|
|
small, maybe doable in a day for an experienced GNU Go programmer.
|
|
They might also be useful project to start with for a new project
|
|
member. Some of them are bigger and demand a deeper knowledge of the
|
|
engine internals. The issues are presented here in an approximate
|
|
order of perceived difficulty.
|
|
|
|
* Add more checks in patterns/mkpat.c testing whether the main diagram and
|
|
the constraint diagram are consistent.
|
|
|
|
* Break out handling of movelists into its own file and generalize it.
|
|
This is started in 3.1.16. Move lists are used, among other places,
|
|
in worms.c where it is used to store moves that capture, save,
|
|
threaten to capture and threaten to save the worm.
|
|
|
|
* Implement move lists storing important moves for dragons and eyes
|
|
in the same way as it is used for worms. Half eyes are already
|
|
halfway done. The moves are stored, but not the attack and defend
|
|
codes (LOSE, KO_A, KO_B and WIN).
|
|
|
|
* Make the cache not waste storage on 64 bit systems.
|
|
|
|
* The dragon data is split into two arrays, dragon[] and dragon2[].
|
|
The dragon2 array only have one entry per dragon, in contrast to
|
|
the dragon array where all the data is stored once for every
|
|
intersection of the board. Complete the conversion of eye_data,
|
|
half_eye_data, worm and dragon to use the same structure as the
|
|
dragon2 array.
|
|
|
|
* Support for ko in eyes.db and optics.c.
|
|
|
|
* Integrate the time handling code in play_gtp.c with the autolevel
|
|
code in clock.c. Alternatively, replace them both with something
|
|
better. Basing it on some solid system identification theory and/or
|
|
control theory wouldn't hurt.
|
|
|
|
* Write a script which plays through the joseki databases and checks
|
|
that the engine really generates a joseki move for all positions in
|
|
the databases. This would also be interesting to run with the
|
|
--nojosekidb option.
|
|
|
|
|
|
//--------------------------------------------------------------
|
|
// long term issues
|
|
//--------------------------------------------------------------
|
|
|
|
|
|
These issues are strategic in nature. They will help us to improve the
|
|
playing strength of the program and/or enhance certain aspects of it.
|
|
|
|
* Extend the regression test suites.
|
|
See the texinfo manual in the doc directory for a description of
|
|
how to do this. In particular it would be useful with test suites
|
|
for common life and death problems. Currently second line groups, L
|
|
groups and the tripod shape are reasonably well covered, but there
|
|
is for example almost nothing on comb formations, carpenter's
|
|
square, and so on. Other areas where test suites would be most
|
|
welcome are fuseki, tesuji, and endgame.
|
|
|
|
* Tuning the pattern databases. These are under constant revision. Tuning
|
|
them is a sort of art. It is not necessary to do any programming to do
|
|
this since most of the patterns do not require helpers. We would like it if
|
|
a few more Dan level players would learn this skill.
|
|
|
|
* Extend and tune the Joseki database. It might be very useful to implement
|
|
a semi-automatic way of doing this. The current method based on sgf files
|
|
becomes difficult with existing tools.
|
|
|
|
* The semeai module is still in need of improvement. (This is underway.)
|
|
|
|
* GNU Go does not have a move generator that tries explicitly to build
|
|
moyos, or reduce/invade opponent's moyos. Such a move generator could
|
|
be built using the same type of code that is used in the owl life and
|
|
death reader, or the connection reader mentioned in point 5 above.
|
|
|
|
* A much improved combination module. The combination module of
|
|
today only finds combinations of threats to capture enemy groups.
|
|
A more useful combination module would e.g. find combinations of
|
|
threats to capture a group or enter opponent territory. It would
|
|
also be strong enough to find combinations of strategic moves and
|
|
more indirect threats (a threat to a threat). Possibly it could
|
|
combine threats in AND-OR trees (DAGs?) that could be searched
|
|
using ordinary tree search algorithms. (Revision of combination.c
|
|
is underway.)
|
|
|
|
* Speed up the tactical reading. GNU Go is reasonably accurate when
|
|
it comes to tactical reading, but not always very fast. The main
|
|
problem is that too many ineffective moves are tested, leading to
|
|
strange variations that shouldn't need consideration. To improve
|
|
one could refine the move generation heuristics in the reading.
|
|
Also, one should implement some more of the standard tree search
|
|
optimizations used in alpha-beta readers.
|
|
|
|
* Improve the heuristics for assessment of the safety of a
|
|
group. This might take into account number of eyes / half eyes,
|
|
moyo in corners, moyo along the edge, moyo in the center, proximity
|
|
to living friendly groups, weak opponent groups etc. It is of
|
|
particular interest to be able to accurately determine how a move
|
|
affects the safety of all groups on the board.
|
|
|
|
|
|
//--------------------------------------------------------------
|
|
// Ideas
|
|
//--------------------------------------------------------------
|
|
|
|
|
|
These are some ideas that have been floated on the mailing list. Some
|
|
of them are down-to-earth, and some are just blue sky ramblings. They
|
|
are presented here for inspiration.
|
|
|
|
* A good GUI.
|
|
A start is being made with GoThic, a goban widget based on the Qt
|
|
toolkit. This is linked from the GNU Go development web page on
|
|
gnu.org. Other starts have been made based on GTK+, but so far
|
|
nothing more than a start has been attempted.
|
|
|
|
* A graphical pattern editor.
|
|
This would make it much easier for non-programmers to improve the
|
|
strength of GNU Go. It could also be used as a debugging tool for
|
|
the programmers. This project has the GUI as a prerequisite.
|
|
The challenge here is not to make a tool which makes it easier to
|
|
create patterns but to make it easier to overview and maintain the
|
|
database.
|
|
|
|
* Make the engine thread safe and use multiple CPUs on an SMP
|
|
machine.
|
|
|
|
* Making the engine use many machines loosely connected on the
|
|
internet or in a cluster.
|
|
|
|
* Think on the opponent's time.
|
|
|
|
* A global alpha-beta reader. This would probably be very slow and
|
|
could only read 2 or 3 moves ahead. Still it could find fatal
|
|
errors and improve the moves that GNU Go makes.
|
|
|
|
* A strategic module that identifies high-level goals and then gives
|
|
these goals to the rest of the engine. It should be able to
|
|
identify if we are ahead in territory or thickness, if we should
|
|
play safe or if we should play daringly (e.g. if behind). It
|
|
should also identify weak areas where we can attack or where we
|
|
should defend. Maybe this module doesn't have to be written in C.
|
|
Maybe PROLOG, LISP or some other AI language would be better.
|
|
|
|
* A parameter that makes GNU Go play different styles. Such styles
|
|
could be 'play for territory', 'play aggressively', 'play tricky
|
|
moves (hamete)', and so on. It could be used to present human
|
|
users with different kinds of opponents or to tell GNU Go how to
|
|
play certain computer opponents in tournaments.
|
|
|
|
* Generalize representation and handling of threats so that we have a
|
|
graph representation of threats that can be searched to see how
|
|
different threats interact.
|
|
|
|
* An endgame module based on ideas from combinatorial game theory.
|
|
To be really useful this would have to deal with early endgame
|
|
positions.
|
|
|
|
* Fuseki tuning by hand is difficult. People who are interested
|
|
in doing machine learning experiments with GNU Go could try
|
|
working with fuseki. This may be one of the areas with most
|
|
potential for substantial and reasonably quick improvements.
|
|
|
|
* Create a paradigm for handling other types of ko (approach move ko,
|
|
multi-step ko, etc) and then write code that handles them.
|
|
|