├── src
├── .gitignore
├── timer.cpp
├── pgn.cpp
├── task_component.cpp
├── log_board.cpp
├── CMakeLists.txt
├── chess_move.cpp
├── hpx_task.cpp
├── xboard.cpp
├── minimax.cpp
├── alphabeta.cpp
├── eval.cpp
├── data.cpp
└── search.cpp
├── .gitignore
├── tests
├── ts_alltests.rb
├── tc_enpassant.rb
├── tc_castling.rb
└── time_test.rb
├── inputs
├── board1
├── board2
├── board3
└── board4
├── ChessViewer
├── ic_launcher-web.png
├── libs
│ └── android-support-v4.jar
├── res
│ ├── drawable
│ │ ├── black_king.png
│ │ ├── black_pawn.png
│ │ ├── black_queen.png
│ │ ├── black_rook.png
│ │ ├── white_king.png
│ │ ├── white_pawn.png
│ │ ├── white_queen.png
│ │ ├── white_rook.png
│ │ ├── black_bishop.png
│ │ ├── black_knight.png
│ │ ├── white_bishop.png
│ │ └── white_knight.png
│ ├── values
│ │ ├── styles.xml
│ │ └── strings.xml
│ ├── values-v11
│ │ └── styles.xml
│ ├── drawable-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_action_search.png
│ ├── drawable-ldpi
│ │ └── ic_launcher.png
│ ├── drawable-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_action_search.png
│ ├── drawable-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_action_search.png
│ ├── values-v14
│ │ └── styles.xml
│ ├── menu
│ │ ├── activity_chess.xml
│ │ └── mainmenu.xml
│ └── layout
│ │ └── activity_chess.xml
├── chessviewer.properties
├── .classpath
├── src
│ └── edu
│ │ └── lsu
│ │ └── cct
│ │ └── chess
│ │ ├── Piece.java
│ │ └── Board.java
├── project.properties
├── proguard-project.txt
├── .project
├── AndroidManifest.xml
├── module_chessviewer.xml
└── chessviewer.xml
├── headers
├── timer.hpp
├── task_component_impl.hpp
├── pgn.hpp
├── log_board.hpp
├── hash.hpp
├── here.hpp
├── parallel.hpp
├── zkey.hpp
├── hpx_support.hpp
├── main.hpp
├── board.hpp
├── eval.hpp
├── defs.hpp
├── node.hpp
├── FixedVec.hpp
├── data.hpp
├── task_component.hpp
├── search.hpp
├── chess_move.hpp
├── score.hpp
├── combine.hpp
├── parallel_support.hpp
└── database.hpp
├── docs
├── algorithms
│ ├── README.txt
│ └── src
│ │ └── edu
│ │ └── lsu
│ │ └── cct
│ │ └── minimax
│ │ ├── Counter.java
│ │ ├── Out.java
│ │ ├── Game.java
│ │ └── Node.java
└── answers.txt
├── TODO.rst
├── LogParser
└── log_parser.py
├── cmake
├── FindReadline.cmake
└── FindSQLite3.cmake
├── CMakeLists.txt
├── README.rst
├── harness_memcheck.pl
├── harness_helgrind.pl
└── harness_plain.pl
/src/.gitignore:
--------------------------------------------------------------------------------
1 | CMakeFiles
2 | Makefile
3 | chx
4 | cmake_install.make
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .bench
2 | CMakeCache.txt
3 | CMakeFiles
4 | Makefile
5 | cmake_install.cmake
6 | test.db*
7 |
--------------------------------------------------------------------------------
/tests/ts_alltests.rb:
--------------------------------------------------------------------------------
1 | require "test/unit"
2 | require "./tc_enpassant.rb"
3 | require "./tc_castling.rb"
4 |
--------------------------------------------------------------------------------
/inputs/board1:
--------------------------------------------------------------------------------
1 | rnbqkbnr
2 | pppppppp
3 | ........
4 | ........
5 | ........
6 | ........
7 | PPPPPPPP
8 | RNBQKBNR
9 |
--------------------------------------------------------------------------------
/ChessViewer/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/ic_launcher-web.png
--------------------------------------------------------------------------------
/src/timer.cpp:
--------------------------------------------------------------------------------
1 | #ifdef HPX_SUPPORT
2 | #include "timer.hpp"
3 |
4 | hpx::util::high_resolution_timer timer;
5 | #endif
6 |
--------------------------------------------------------------------------------
/ChessViewer/libs/android-support-v4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/libs/android-support-v4.jar
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/black_king.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/black_king.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/black_pawn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/black_pawn.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/black_queen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/black_queen.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/black_rook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/black_rook.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/white_king.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/white_king.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/white_pawn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/white_pawn.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/white_queen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/white_queen.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/white_rook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/white_rook.png
--------------------------------------------------------------------------------
/ChessViewer/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/black_bishop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/black_bishop.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/black_knight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/black_knight.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/white_bishop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/white_bishop.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable/white_knight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable/white_knight.png
--------------------------------------------------------------------------------
/ChessViewer/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/headers/timer.hpp:
--------------------------------------------------------------------------------
1 | #ifdef HPX_SUPPORT
2 | #include
3 |
4 | extern hpx::util::high_resolution_timer timer;
5 | #endif
6 |
--------------------------------------------------------------------------------
/ChessViewer/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable-hdpi/ic_action_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable-hdpi/ic_action_search.png
--------------------------------------------------------------------------------
/ChessViewer/res/drawable-mdpi/ic_action_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable-mdpi/ic_action_search.png
--------------------------------------------------------------------------------
/ChessViewer/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/ChessViewer/res/drawable-xhdpi/ic_action_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenrbrandt/chess/master/ChessViewer/res/drawable-xhdpi/ic_action_search.png
--------------------------------------------------------------------------------
/docs/algorithms/README.txt:
--------------------------------------------------------------------------------
1 | Just some simple java files to play with the various chess
2 | algorithms. It does this by searching a game tree that
3 | with random values.
4 |
--------------------------------------------------------------------------------
/inputs/board2:
--------------------------------------------------------------------------------
1 | r n b q k . . r
2 | p . p p . p p p
3 | . p . . p n . .
4 | . . . . . . . .
5 | . b P P . . . .
6 | . . N . . N . .
7 | P P . . P P P P
8 | R . B Q K B . R
9 |
--------------------------------------------------------------------------------
/ChessViewer/chessviewer.properties:
--------------------------------------------------------------------------------
1 | path.variable.maven_repository=/home/sbrandt/.m2/repository
2 | jdk.home.android_4.0.3_platform=/home/sbrandt/Download/android-sdk-linux
3 | javac2.instrumentation.includeJavaRuntime=false
--------------------------------------------------------------------------------
/headers/task_component_impl.hpp:
--------------------------------------------------------------------------------
1 | #include "task_component.hpp"
2 |
3 | void task_component::server::cancel() {
4 | }
5 |
6 | score_t task_component::server::search(search_info inf) {
7 | return bad_min_score;
8 | }
9 |
--------------------------------------------------------------------------------
/docs/algorithms/src/edu/lsu/cct/minimax/Counter.java:
--------------------------------------------------------------------------------
1 | package edu.lsu.cct.minimax;
2 |
3 | public class Counter {
4 | int c=0;
5 | void inc() { c++; }
6 | public String toString() { return Integer.toString(c); }
7 | }
8 |
--------------------------------------------------------------------------------
/headers/pgn.hpp:
--------------------------------------------------------------------------------
1 | #ifndef CHESS_MOVE_H
2 |
3 | #include "chess_move.hpp"
4 | #include "node.hpp"
5 | #include "data.hpp"
6 |
7 | const void pgn_output(const node_t &board, const chess_move &move);
8 |
9 | #endif
10 |
--------------------------------------------------------------------------------
/docs/algorithms/src/edu/lsu/cct/minimax/Out.java:
--------------------------------------------------------------------------------
1 | package edu.lsu.cct.minimax;
2 |
3 | public class Out {
4 | int indent = 0;
5 | void println(String s) {
6 | for(int i=0;i
5 | #include "parallel.hpp"
6 | #include "defs.hpp"
7 | #include "node.hpp"
8 | #include "board.hpp"
9 |
10 | void log_board(const node_t& board,std::ostream& out);
11 |
12 | #endif
13 |
--------------------------------------------------------------------------------
/ChessViewer/res/menu/activity_chess.xml:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/ChessViewer/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | ChessViewer
4 | Hello world!
5 | Settings
6 | ChessActivity
7 |
8 |
--------------------------------------------------------------------------------
/ChessViewer/res/menu/mainmenu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/TODO.rst:
--------------------------------------------------------------------------------
1 | TODO list. Place to check off progress.
2 |
3 | 1) Full benchmark (run for 2 hours)
4 | 2) MPI
5 | a) need chx_abort() to work over MPI
6 | b) need to send history over wire
7 | c) communicate transposition table?
8 | 3) Sinch evaluator
9 | 4) Modifiy harness to accept a command line parameter that accepts the number of processors and the number of threads per processor
10 |
--------------------------------------------------------------------------------
/ChessViewer/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/pgn.cpp:
--------------------------------------------------------------------------------
1 | #include "pgn.hpp"
2 | #include
3 | //#include
4 |
5 | using namespace std;
6 |
7 | const void pgn_output(const node_t &board, const chess_move &move)
8 | {
9 | string piece;
10 | piece = piece_char[(size_t)board.piece[move.getTo()]];
11 | if (piece == "p")
12 | piece = "";
13 | cout << "pgn " << piece << (move.getCapture()?"x":"") << move.pgn() << endl;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/ChessViewer/src/edu/lsu/cct/chess/Piece.java:
--------------------------------------------------------------------------------
1 | package edu.lsu.cct.chess;
2 |
3 | public class Piece {
4 | public final int boardnum;
5 | final int x;
6 | final int y;
7 | final int p;
8 | public final int time;
9 | Piece(int t,int b,int x,int y,int p) {
10 | this.time = t;
11 | this.boardnum = b;
12 | this.x = x;
13 | this.y = y;
14 | this.p = p;
15 | }
16 | public String toString() {
17 | return ((char)p) + "("+time+","+boardnum+","+x+","+y+")";
18 | }
19 | }
--------------------------------------------------------------------------------
/ChessViewer/res/layout/activity_chess.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/headers/hash.hpp:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Philip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | #ifndef HASH_HPP
8 | #define HASH_HPP
9 | #include
10 | #include "parallel.hpp"
11 | #include
12 |
13 | typedef uint32_t hash_t;
14 |
15 | #endif
16 |
--------------------------------------------------------------------------------
/headers/here.hpp:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Philip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | #ifndef HERE_HPP
8 | #define HERE_HPP 1
9 | #define HERE std::cout << "HERE " << __FILE__ << ", " << __LINE__ << std::flush << std::endl;
10 | #define VAR(X) #X << "=" << (X) << " "
11 | #endif
12 |
--------------------------------------------------------------------------------
/ChessViewer/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system edit
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 | #
10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
12 |
13 | # Project target.
14 | target=android-15
15 |
--------------------------------------------------------------------------------
/docs/answers.txt:
--------------------------------------------------------------------------------
1 | Answer key:
2 |
3 | board1
4 | ply | answer
5 | ====+=======
6 | 7 | e2e4
7 | 6 | b1c3
8 | 5 | b2b4
9 | 4 | g1f3
10 | 3 | g1f3
11 | 2 | d2d4
12 |
13 | board2
14 | ply | answer
15 | ====+=======
16 | 7 | d1b3
17 | 6 | c1d2
18 | 5 | c1g5
19 | 4 | c1g5
20 | 3 | c1d2
21 | 2 | e2e4
22 |
23 | board3
24 | ply | answer
25 | ====+=======
26 | 7 | f5h7
27 | 6 | f5g7
28 | 5 | f5h6
29 | 4 | f5g7
30 | 3 | f3b3
31 | 2 | b2b3
32 |
33 | board4
34 | ply | answer
35 | ====+=======
36 | 7 | e5f5
37 | 6 | e5e3
38 | 5 | h5h6
39 | 4 | e5e3
40 | 3 | e5b5
41 | 2 | e5e3
42 |
--------------------------------------------------------------------------------
/LogParser/log_parser.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/python
2 |
3 | num_files=input("Number of log files? ")
4 | input_files=[]
5 | times=[]
6 | for number in range(num_files):
7 | input_files.append(open("chess_out"+str(number)+".txt"))
8 | times.append(float(input_files[number].readline()))
9 | output=open("log.txt","w")
10 | while len(input_files)>0:
11 | min_i=times.index(min(times))
12 | output.write(str(min_i)+"\n")
13 | for line in range(8):
14 | output.write(input_files[min_i].readline())
15 | next_time=input_files[min_i].readline()
16 | if next_time=="":
17 | input_files.pop(min_i)
18 | times.pop(min_i)
19 | else:
20 | times[min_i]=float(next_time)
21 |
--------------------------------------------------------------------------------
/src/task_component.cpp:
--------------------------------------------------------------------------------
1 | #include "task_component.hpp"
2 | #include
3 | #include
4 | #include
5 |
6 | #include "task_component_impl.hpp"
7 | HPX_REGISTER_COMPONENT_MODULE();
8 |
9 | typedef hpx::components::managed_component task_component_type;
10 |
11 |
12 |
13 |
14 | typedef task_component::server task_component_server;
15 |
16 | HPX_REGISTER_MINIMAL_COMPONENT_FACTORY(task_component_type, task_component_server);
17 | HPX_REGISTER_ACTION_EX(task_component_type::wrapped_type::cancel_action,action_cancel);
18 | HPX_REGISTER_ACTION_EX(task_component_type::wrapped_type::search_action,action_search);
19 |
20 |
21 |
--------------------------------------------------------------------------------
/tests/tc_enpassant.rb:
--------------------------------------------------------------------------------
1 | require "test/unit"
2 | require "fileutils"
3 | include FileUtils
4 |
5 |
6 | class TestEnPassant < Test::Unit::TestCase
7 |
8 |
9 | def setup
10 | @chx_exe = "../../build_chx/src/chx"
11 | @success = "8 r n b q k b n r\n7 p p p . p p p .\n6 . . . P . . . p\n5 . . . . . . . .\n4 . . . . . . . .\n3 . . . . . . . .\n2 P P P P . P P P\n1 R N B Q K B N R"
12 | if Dir[@chx_exe].empty?
13 | puts "Please specify the path to the chx executable in $chx_exe"
14 | exit
15 | end
16 | f = open(".test","w+")
17 | f.write "e2e4\nh7h6\ne4e5\nd7d5\ne5d6\nd\nquit\n"
18 | f.close
19 | end
20 |
21 | def test_enpassant
22 | val = `#{@chx_exe} < .test`
23 | assert( val =~ /#{@success}/o )
24 | end
25 | end
26 |
--------------------------------------------------------------------------------
/cmake/FindReadline.cmake:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2012 Steve Brandt and Philip LeBlanc
2 | #
3 | # Distributed under the Boost Software License, Version 1.0. (See accompanying
4 | # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 |
6 | find_path(READLINE_INCLUDE_DIR readline/readline.h)
7 | find_library(READLINE_LIBRARY NAMES readline)
8 |
9 | if(READLINE_INCLUDE_DIR AND READLINE_LIBRARY)
10 | set(READLINE_FOUND TRUE)
11 | endif(READLINE_INCLUDE_DIR AND READLINE_LIBRARY)
12 |
13 | if(READLINE_FOUND)
14 | if(NOT Readline_FIND_QUIETLY)
15 | message(STATUS "Found GNU readline: ${READLINE_LIBRARY}")
16 | endif(NOT Readline_FIND_QUIETLY)
17 | else()
18 | if(Readline_FIND_REQUIRED)
19 | message(FATAL_ERROR "Could not find GNU readline")
20 | endif()
21 | endif()
22 |
23 |
--------------------------------------------------------------------------------
/src/log_board.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include "log_board.hpp"
4 | #include "timer.hpp"
5 | #include "defs.hpp"
6 |
7 | void log_board(const node_t& board,std::ostream& out)
8 | {
9 | #ifdef HPX_SUPPORT
10 | int i;
11 |
12 | out<
2 |
3 | Alex_Demo
4 |
5 |
6 |
7 |
8 |
9 | com.android.ide.eclipse.adt.ResourceManagerBuilder
10 |
11 |
12 |
13 |
14 | com.android.ide.eclipse.adt.PreCompilerBuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.jdt.core.javabuilder
20 |
21 |
22 |
23 |
24 | com.android.ide.eclipse.adt.ApkBuilder
25 |
26 |
27 |
28 |
29 |
30 | com.android.ide.eclipse.adt.AndroidNature
31 | org.eclipse.jdt.core.javanature
32 |
33 |
34 |
--------------------------------------------------------------------------------
/headers/parallel.hpp:
--------------------------------------------------------------------------------
1 | #ifndef PARALLEL_HPP
2 | #define PARALLEL_HPP
3 |
4 | /*
5 | * By wrapping the HPX mutex and the thread mutex in the Mutex and
6 | * ScopedLock classes we make it possible to support both without a
7 | * lot of ifdefs.
8 | */
9 |
10 | #include
11 |
12 | #ifdef HPX_SUPPORT
13 | #include
14 | struct Mutex {
15 | hpx::lcos::local::mutex mut;
16 | Mutex() : mut() {}
17 | ~Mutex() {}
18 | };
19 | struct ScopedLock {
20 | hpx::lcos::local::mutex::scoped_lock l;
21 | ScopedLock(Mutex& m) : l(m.mut) {}
22 | ~ScopedLock() {}
23 | };
24 | #else
25 | #include
26 | struct Mutex {
27 | std::mutex mut;
28 | Mutex() {}
29 | };
30 | struct ScopedLock {
31 | Mutex *m;
32 | ScopedLock(Mutex& m_) {
33 | m = &m_;
34 | m->mut.lock();
35 | }
36 | ~ScopedLock() {
37 | m->mut.unlock();
38 | }
39 | };
40 | #endif
41 |
42 | #endif
43 | //extern Mutex mutex;
44 |
--------------------------------------------------------------------------------
/tests/tc_castling.rb:
--------------------------------------------------------------------------------
1 | require "test/unit"
2 | require "fileutils"
3 | include FileUtils
4 |
5 |
6 | class TestCastling < Test::Unit::TestCase
7 |
8 |
9 | def setup
10 | @chx_exe = "../../build_chx/src/chx"
11 | @input =
12 | """
13 | a2a3
14 | a7a6
15 | b1c3
16 | b8c6
17 | b2b3
18 | b7b6
19 | c1b2
20 | c8b7
21 | d2d3
22 | d7d6
23 | d1d2
24 | d8d7
25 | e1c1
26 | e8c8
27 | d
28 | quit
29 |
30 | """
31 | @success =
32 | """
33 | 8 . . k r . b n r
34 | 7 . b p q p p p p
35 | 6 p p n p . . . .
36 | 5 . . . . . . . .
37 | 4 . . . . . . . .
38 | 3 P P N P . . . .
39 | 2 . B P Q P P P P
40 | 1 . . K R . B N R
41 |
42 | a b c d e f g h
43 | """
44 | if Dir[@chx_exe].empty?
45 | puts "Please specify the path to the chx executable in $chx_exe"
46 | exit
47 | end
48 | f = open(".test","w+")
49 | f.write @input
50 | f.close
51 | end
52 |
53 | def test_castling
54 | val = `#{@chx_exe} < .test`
55 | assert( val =~ /#{@success}/o )
56 | end
57 | end
58 |
--------------------------------------------------------------------------------
/docs/algorithms/src/edu/lsu/cct/minimax/Game.java:
--------------------------------------------------------------------------------
1 | package edu.lsu.cct.minimax;
2 |
3 | import java.util.Random;
4 |
5 | public class Game {
6 | final static Random rand = getRandom();
7 |
8 | private static Random getRandom() {
9 | Random rand = new Random();
10 | long seed = rand.nextLong();
11 | System.out.println("seed="+seed);
12 | rand.setSeed(seed);
13 | return rand;
14 | }
15 |
16 | int depth = 6;
17 | int branching = 6;
18 | int count = 0;
19 | Node root = new Node(rand,depth,branching,1-2*(depth%2));
20 |
21 | public static void main(String[] args) {
22 | Game g = new Game();
23 | g.root.minimax();
24 | int ans = g.root.score;
25 |
26 | Out out = new Out();
27 | //g.root.print(out);
28 | g.root.alphabeta(ans);
29 | g.root.alphabetamem(ans);
30 | g.root.negascout(ans);
31 | int del = 20;
32 | int off = rand.nextInt(2*del)-del;
33 | g.root.mtdf(ans,ans+off);
34 | g.root.mtdf2(ans,ans+off);
35 | g.root.srb(ans,ans+off-del,ans+off+del);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/headers/zkey.hpp:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Philip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | #ifndef ZKEY_HPP
8 | #define ZKEY_HPP
9 | #include "hash.hpp"
10 | #include "score.hpp"
11 | #include "node.hpp"
12 | #include
13 | #include "parallel.hpp"
14 |
15 | const int table_size = 4*16*4096;
16 |
17 | struct zkey_t {
18 | score_t lower, upper;
19 | Mutex mut;
20 | node_t board;
21 | int depth;
22 | zkey_t() : depth(-1) {
23 | }
24 | };
25 |
26 | extern zkey_t transposition_table[table_size];
27 |
28 | bool get_transposition_value(const node_t& board,score_t& lower,score_t& upper);
29 |
30 | void set_transposition_value(const node_t& board,score_t lower,score_t upper);
31 |
32 | #endif
33 |
--------------------------------------------------------------------------------
/ChessViewer/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
9 |
10 |
11 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/headers/hpx_support.hpp:
--------------------------------------------------------------------------------
1 | #ifndef CHX_HPX_HPP_367926FF_8920_423F_8FCA_E8_CHESS34E8_CHESS5C6_CHESS101
2 | #define CHX_HPX_HPP_367926FF_8920_423F_8FCA_E8_CHESS34E8_CHESS5C6_CHESS101
3 |
4 | #include
5 | #include
6 | #include
7 | #include "node.hpp"
8 | #include "defs.hpp"
9 |
10 | namespace boost { namespace serialization
11 | {
12 | template
13 | void serialize(Archive &ar, search_info& info, const unsigned int)
14 | {
15 | ar & info.board;
16 | ar & info.mv;
17 | ar & info.result;
18 | ar & info.depth;
19 | ar & info.incr;
20 | ar & info.alpha;
21 | ar & info.beta;
22 | }
23 | template
24 | void serialize(Archive &ar, node_t& board, const unsigned int)
25 | {
26 | ar & board.hash;
27 | ar & board.color;
28 | ar & board.piece;
29 | ar & board.depth;
30 | ar & board.side;
31 | ar & board.castle;
32 | ar & board.ep;
33 | ar & board.fifty;
34 | ar & board.ply;
35 | ar & board.hist_dat;
36 | }
37 | template
38 | void serialize(Archive &ar, FixedVec vec, const unsigned int)
39 | {
40 | ar & vec.data;
41 | ar & vec._size;
42 | }
43 | }}
44 |
45 | #endif
46 |
--------------------------------------------------------------------------------
/headers/main.hpp:
--------------------------------------------------------------------------------
1 | ///////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Phillip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | #ifndef MAIN_H
8 | #define MAIN_H
9 | #include
10 | #include
11 |
12 | #include
13 | #include "node.hpp"
14 | #include "defs.hpp"
15 | #include "data.hpp"
16 | #include "search.hpp"
17 | #include "chess_move.hpp"
18 |
19 | int main(int argc, char *argv[]);
20 | int parse_move(std::vector& workq, const char *s, const node_t& board);
21 | char *move_str(chess_move& m);
22 | //void print_board(const node_t& board, std::ostream& out,bool trimmed=false);
23 | int print_result(std::vector& workq, node_t& board);
24 | void start_benchmark(std::string filename, int ply_level, int num_runs,bool parallel,node_t& n);
25 | int get_ms();
26 | std::string get_log_name();
27 | int chx_main();
28 | #ifdef HPX_SUPPORT
29 | extern database dbase;
30 | extern std::ofstream **streams;
31 | extern bool file_output_enabled;
32 | #endif
33 |
34 | #endif
35 |
--------------------------------------------------------------------------------
/headers/board.hpp:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Philip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | #ifndef BOARD_H
8 | #define BOARD_H
9 | #include
10 | #include "node.hpp"
11 | #include "defs.hpp"
12 | #include "data.hpp"
13 | #include "hash.hpp"
14 | #include "chess_move.hpp"
15 |
16 | void init_board(node_t& board);
17 | void init_hash();
18 | hash_t hash_rand();
19 | hash_t set_hash(node_t& board);
20 | hash_t update_hash(node_t& board, chess_move& m);
21 | bool in_check(const node_t& board, int s);
22 | bool attack(const node_t& board, int sq, int s);
23 | void gen(std::vector& workq, const node_t& board);
24 | void gen_caps(std::vector& workq, const node_t& board);
25 | void gen_push(std::vector& workq, const node_t& board, int from, int to, int bits);
26 | void gen_promote(std::vector& workq, int from, int to, int bits);
27 | bool makemove(node_t& board, chess_move& m);
28 | void takeback(node_t& board);
29 | bool board_equals(const node_t& b1,const node_t& b2);
30 | #endif
31 |
--------------------------------------------------------------------------------
/headers/eval.hpp:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Philip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | #ifndef EVAL_H
8 | #define EVAL_H
9 |
10 |
11 | #include "node.hpp"
12 | #include "defs.hpp"
13 | #include "data.hpp"
14 | #include "chess_move.hpp"
15 |
16 |
17 | #define DOUBLED_PAWN_PENALTY 10
18 | #define ISOLATED_PAWN_PENALTY 20
19 | #define BACKWARDS_PAWN_PENALTY 8
20 | #define PASSED_PAWN_BONUS 20
21 | #define ROOK_SEMI_OPEN_FILE_BONUS 10
22 | #define ROOK_OPEN_FILE_BONUS 15
23 | #define ROOK_ON_SEVENTH_BONUS 20
24 |
25 | struct evaluator {
26 | int pawn_rank[2][10];
27 | int piece_mat[2]; // the value of a side's pieces
28 | int pawn_mat[2]; // the value of a side's pawns
29 |
30 | int eval(const node_t& board, int evaluator);
31 | int eval_simple(const node_t& board);
32 | int eval_orig(const node_t& board);
33 | int eval_light_pawn(int sq);
34 | int eval_dark_pawn(int sq);
35 | int eval_light_king(int sq);
36 | int eval_lkp(int f);
37 | int eval_dark_king(int sq);
38 | int eval_dkp(int f);
39 | };
40 |
41 | #endif
42 |
--------------------------------------------------------------------------------
/src/chess_move.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include "defs.hpp"
3 | #include "data.hpp"
4 | #include "chess_move.hpp"
5 |
6 | using namespace std;
7 |
8 | string chess_move::str() const
9 | {
10 | ostringstream ostr;
11 | ostr << (char)('a' + COL(getFrom())) << 8 - ROW(getFrom()) <<
12 | (char)('a' + COL(getTo())) << 8 - ROW(getTo());
13 | if (getBits() & 32)
14 | switch (getPromote())
15 | {
16 | case KNIGHT:
17 | ostr << "n";
18 | break;
19 | case BISHOP:
20 | ostr << "b";
21 | break;
22 | case ROOK:
23 | ostr << "r";
24 | break;
25 | default:
26 | ostr << "q";
27 | break;
28 | }
29 | return ostr.str();
30 | }
31 | string chess_move::pgn() const
32 | {
33 | ostringstream ostr;
34 | ostr << piece_char[getFrom()];
35 | ostr << (char)('a' + COL(getFrom())) << 8 - ROW(getFrom()) <<
36 | (char)('a' + COL(getTo())) << 8 - ROW(getTo());
37 | if (getBits() & 32)
38 | switch (getPromote())
39 | {
40 | case KNIGHT:
41 | ostr << "=N";
42 | break;
43 | case BISHOP:
44 | ostr << "=B";
45 | break;
46 | case ROOK:
47 | ostr << "=R";
48 | break;
49 | default:
50 | ostr << "=Q";
51 | break;
52 | }
53 | return ostr.str();
54 | }
55 |
56 |
--------------------------------------------------------------------------------
/src/hpx_task.cpp:
--------------------------------------------------------------------------------
1 | #include "parallel_support.hpp"
2 | #include
3 | #include "search.hpp"
4 |
5 | #ifdef HPX_SUPPORT
6 |
7 | HPX_PLAIN_ACTION(search_ab_pt,alphabeta_action);
8 | HPX_PLAIN_ACTION(search_pt,minimax_action);
9 | HPX_PLAIN_ACTION(qeval_pt,qeval_action);
10 |
11 | using namespace hpx;
12 |
13 | // Figure out why actions perform badly
14 | #define USE_ACTIONS 1
15 | #if USE_ACTIONS
16 | void hpx_task::start() {
17 | assert(info.valid());
18 | static std::vector all_localities = hpx::find_all_localities();
19 | static hpx::naming::id_type const locality_id = all_localities[0];
20 |
21 | if (pfunc == search_f)
22 | {
23 | result = async(locality_id, info);
24 | }
25 | else if (pfunc == search_ab_f)
26 | {
27 | result = async(locality_id, info);
28 | }
29 | else if (pfunc == qeval_f)
30 | {
31 | result = async(locality_id, info);
32 | }
33 | else
34 | assert(false); // should never get here
35 |
36 | }
37 | #else
38 | void hpx_task::start() {
39 | if (pfunc == search_f)
40 | {
41 | result = async(search_pt, info.ptr());
42 | }
43 | else if (pfunc == search_ab_f)
44 | {
45 | result = async(search_ab_pt, info.ptr());
46 | }
47 | else if (pfunc == qeval_f)
48 | {
49 | result = async(qeval_pt, info.ptr());
50 | }
51 | else
52 | assert(false); // should never get here
53 |
54 | }
55 | #endif
56 | #endif
57 |
--------------------------------------------------------------------------------
/headers/defs.hpp:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Phillip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | /*
8 | * DEFS.H
9 | */
10 | #ifndef DEFS_H
11 | #define DEFS_H
12 |
13 | #define LIGHT 0
14 | #define DARK 1
15 |
16 | #define PAWN 0
17 | #define KNIGHT 1
18 | #define BISHOP 2
19 | #define ROOK 3
20 | #define QUEEN 4
21 | #define KING 5
22 |
23 | #define EMPTY 6
24 |
25 | // Evaluator Defs
26 | #define ORIGINAL 0
27 | #define SIMPLE 1
28 |
29 | // Search method Defs
30 | #define MINIMAX 0
31 | #define ALPHABETA 1
32 | #define MTDF 2
33 |
34 | /* useful squares */
35 | #define A1_CHESS 56
36 | #define B1_CHESS 57
37 | #define C1_CHESS 58
38 | #define D1_CHESS 59
39 | #define E1_CHESS 60
40 | #define F1_CHESS 61
41 | #define G1_CHESS 62
42 | #define H1_CHESS 63
43 | #define A8_CHESS 0
44 | #define B8_CHESS 1
45 | #define C8_CHESS 2
46 | #define D8_CHESS 3
47 | #define E8_CHESS 4
48 | #define F8_CHESS 5
49 | #define G8_CHESS 6
50 | #define H8_CHESS 7
51 |
52 | #define ROW(x) (x >> 3)
53 | #define COL(x) (x & 7)
54 |
55 |
56 | #endif
57 |
--------------------------------------------------------------------------------
/headers/node.hpp:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Philip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | #ifndef NODE_H
8 | #define NODE_H
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include "score.hpp"
14 | #include "defs.hpp"
15 | #include "hash.hpp"
16 |
17 | /**
18 | * IMPORTANT NOTE:
19 | * The board_equal() method compares the base_node_t
20 | * data bitwise to determine whether two boards are
21 | * equal. Don't put pointers here, and don't add anything
22 | * that would violate the needs of board_equal().
23 | */
24 | struct base_node_t {
25 | hash_t hash=0;
26 | char color[64];
27 | char piece[64];
28 | int depth=0;
29 | int excess_depth = 0;
30 | int side=-1;
31 | int castle=0;
32 | int ep=0;
33 | };
34 | struct node_t : public base_node_t {
35 |
36 | /* the number of moves since a capture or pawn chess_move, used to handle the fifty-chess_move-draw rule */
37 | int fifty=0;
38 | int move_num=0;
39 | score_t p_board;
40 | int ply=0;
41 | bool follow_capt = false;
42 | bool root_side=-1;
43 | score_t follow_score;
44 | int follow_depth = 2;
45 | int search_depth = 0;
46 | std::vector hist_dat;
47 |
48 | void clear() {
49 | hist_dat.clear();
50 | fifty = 0;
51 | follow_capt = false;
52 | ply = 0;
53 | move_num = 0;
54 | }
55 | node_t() {}
56 | // Make it possible to construct a board from
57 | // a string representation.
58 | node_t(std::string s);
59 | };
60 |
61 | #endif
62 |
--------------------------------------------------------------------------------
/headers/FixedVec.hpp:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Philip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | #ifndef FIXED_VEC_HPP
8 | #define FIXED_VEC_HPP 1
9 | #include
10 | template
11 | struct FixedVec {
12 | T data[N];
13 | int _size;
14 | FixedVec() : _size(0) {}
15 | FixedVec(const FixedVec& fvec) {
16 | _size = fvec._size;
17 | for(int i=0;i < _size;i++)
18 | data[i] = fvec.data[i];
19 | }
20 | T& operator[](int n) {
21 | assert(n >= 0 && n < _size);
22 | return data[n];
23 | }
24 | const T& operator[](int n) const {
25 | assert(n >= 0 && n < _size);
26 | return data[n];
27 | }
28 | void operator=(const FixedVec& fvec) {
29 | _size = fvec._size;
30 | for(int i=0;i < _size;i++)
31 | data[i] = fvec.data[i];
32 | }
33 | T *ptr() { return data; }
34 | void push_back(T t) {
35 | if(_size == N) {
36 | // We're only using this for
37 | // chess_move history, and only the
38 | // last N moves matter.
39 | for(int i=1;i= 0 && n < N);
51 | // Keep Valgrind happy
52 | while(_size < n) {
53 | push_back(0);
54 | }
55 | if(_size > n) {
56 | int d = _size-n;
57 | for(int i=0;i
11 | #include "here.hpp"
12 | #include
13 | #include
14 | #include "chess_move.hpp"
15 | /*
16 | * data.hpp
17 | */
18 |
19 | /* this is basically a copy of data.cpp that's included by most
20 | of the source files so they can use the data.cpp variables */
21 |
22 |
23 | /////////////////////////////////////////////////////////////////////////
24 | // Static Global Variables //
25 | /////////////////////////////////////////////////////////////////////////
26 | extern hash_t hash_piece[2][6][64];
27 | extern hash_t hash_side;
28 | extern hash_t hash_ep[64];
29 | extern int mailbox[120];
30 | extern int mailbox64[64];
31 | extern bool slide[6];
32 | extern int offsets[6];
33 | extern int offset[6][8];
34 | extern int castle_mask[64];
35 | extern char piece_char[6];
36 | extern int init_color[64];
37 | extern int init_piece[64];
38 | extern int depth[2];
39 | extern int output;
40 | extern int chosen_evaluator;
41 | extern int search_method;
42 | extern int light_search_method;
43 | extern int dark_search_method;
44 | extern int iter_depth;
45 | extern int rnum[];
46 | extern bool bench_mode;
47 | extern bool logging_enabled;
48 | extern int mpi_depth;
49 |
50 | ////////////////////////////////////////////////////////////////////////////
51 | //State Information -- The global variables this program uses and modifies//
52 | // in order to work properly. //
53 | ////////////////////////////////////////////////////////////////////////////
54 |
55 | extern chess_move move_to_make;
56 |
57 | void do_data();
58 | #endif
59 |
--------------------------------------------------------------------------------
/headers/task_component.hpp:
--------------------------------------------------------------------------------
1 | #ifndef TASK_COMPONENT_H
2 | #define TASK_COMPONENT_H 1
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include "parallel_support.hpp"
8 |
9 |
10 | namespace task_component {
11 | class HPX_COMPONENT_EXPORT server : public hpx::components::managed_component_base {
12 |
13 | public:
14 | server() {}
15 | enum {
16 | cancel_func_code,
17 | search_func_code,
18 |
19 | } func_codes;
20 |
21 | void cancel();
22 | typedef hpx::actions::action0<
23 | server, cancel_func_code , &server::cancel
24 | > cancel_action;
25 |
26 | score_t search(search_info inf);
27 | typedef hpx::actions::result_action1<
28 | server, score_t, search_func_code , search_info, &server::search
29 | > search_action;
30 |
31 | };
32 | }
33 | HPX_REGISTER_ACTION_DECLARATION_EX(task_component::server::cancel_action,action_cancel);
34 | HPX_REGISTER_ACTION_DECLARATION_EX(task_component::server::search_action,action_search);
35 |
36 | namespace task_component {
37 |
38 | class stub : public hpx::components::stubs::stub_base {
39 | public:
40 |
41 | static void cancel(
42 | hpx::naming::id_type gid)
43 | {
44 | hpx::async(gid).get();
45 | }
46 |
47 | static hpx::lcos::future search_async(
48 | hpx::naming::id_type gid, search_info arg0)
49 | {
50 | return hpx::async(gid, arg0);
51 | }
52 | static score_t search(
53 | hpx::naming::id_type gid, search_info arg0)
54 | {
55 | return search_async(gid, arg0).get();
56 | }
57 |
58 | };
59 |
60 | class client : public hpx::components::client_base {
61 | typedef hpx::components::client_base base_type;
62 | public:
63 | client(hpx::naming::id_type gid) : base_type(gid) {}
64 | client() : base_type() {}
65 |
66 | void cancel() {
67 | BOOST_ASSERT(gid_);
68 | this->base_type::cancel(gid_);
69 | }
70 |
71 | score_t search(search_info arg0) {
72 | BOOST_ASSERT(gid_);
73 | return this->base_type::search(gid_, arg0);
74 | }
75 |
76 | };
77 | }
78 | #endif
79 |
--------------------------------------------------------------------------------
/headers/search.hpp:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Copyright (c) 2011 Steve Brandt and Philip LeBlanc
3 | //
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 | // file BOOST_LICENSE_1_0.rst or copy at http://www.boost.org/LICENSE_1_0.txt)
6 | ////////////////////////////////////////////////////////////////////////////////
7 | #ifndef SEARCH_H
8 | #define SEARCH_H
9 |
10 | #include
11 | #include
12 | #include "node.hpp"
13 | #include "defs.hpp"
14 | #include "data.hpp"
15 | #include "main.hpp"
16 | #include "board.hpp"
17 | #include "eval.hpp"
18 | #include "parallel.hpp"
19 | #include
20 | #include