Skip to content

Commit

Permalink
電王戦FINAL version
Browse files Browse the repository at this point in the history
  • Loading branch information
HiraokaTakuya committed Mar 15, 2015
0 parents commit 4727133
Show file tree
Hide file tree
Showing 57 changed files with 11,987 additions and 0 deletions.
674 changes: 674 additions & 0 deletions Copying.txt

Large diffs are not rendered by default.

61 changes: 61 additions & 0 deletions Readme.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
概要

Apery は USI プロトコルの将棋エンジンです。
USI エンジンに対応した GUI ソフトを使って下さい。
将棋所 以外で動作検証しておりませんので、将棋所 の使用を推奨します。
Apery は GNU General Public License version 3 またはそれ以降のバージョンのもとで配布されます。
主にチェスエンジンの Stockfish の実装を参考にしています。
将棋固有のデータ構造、評価関数等、Bonanza の実装を非常によく参考にしています。

ファイルの説明

・Readme.txt, このファイルです。
・Copying.txt, GNU General Public License version 3 条文です。
・src/, Apery のソースコードのフォルダです。
・utils/, Apery 開発で使用する本体以外のソフトのソースコードのフォルダです。


利用環境

メモリが 64GB ある前提で作っているので、メモリが 16GB 以下であれば動作しません。
64bit OS であること。


使い方

将棋所での使い方のみを説明します。
将棋所を立ち上げます。

Windows の場合
Shogidokoro.exe をダブルクリックして下さい。
立ち上がらない場合は、.NET Framework が古い可能性が高いです。新しいものにして下さい。

Linux の場合
terminal を立ち上げ、mono Shogidokoro.exe とコマンドを打って下さい。
立ち上がらない場合、mono のバージョンが低いか、mono のライブラリが足りない可能性が高いです。
MonoDevelop 等をインストールすれば必要なライブラリは揃うと思います。
例として、Ubuntu の場合は sudo apt-get install MonoDevelop とコマンドを打つとインストール出来ると思います。

将棋所のエンジン登録で Windows の場合は apery/bin/apery.exe (Linux の場合は apery/bin/apery.exe) を登録して下さい。
一度、「これは USI エンジンではありません。」といったポップアップが表示されるかも知れません。
タイムアウトして登録に失敗している可能性があるので、もう一度エンジン登録してみて下さい。
それでも登録に失敗するなら、Apery が正しく動作していない可能性があります。
apery/bin/apery (Windows の場合は apery/bin/apery.exe) をダブルクリックして、usi とコマンドを打ってみて下さい。
usiok が表示されない場合は、ご利用の PC では Apery が動作しないようです。

将棋所に登録出来ましたら、後は将棋所の使い方を参照して下さい。
注意点として、apery の実行ファイルは基本的に bin フォルダから移動させないで下さい。
評価関数ファイルの読み込みに失敗する可能性があります。
(どうしても移動させたい場合は、bin フォルダごと移動させて下さい。それならおそらく正しく動作します。)


開発者向け注意点

電王戦でソフトを提出した時のコードから、同じ実行ファイルが生成出来る範囲でコメント等を修正しました。
(学習部もデータ構造変更によって動かなくなっていたので、削除しています。)
Linux のディストリビューションによっては、Makefile に記述されている '-lpthread' を '-pthread' にしなければ、
実行時にエラーになってしまう場合があります。
Linux, Windows で G++ 4.8 以上のバージョンで動作確認をしています。
Clang では正しくビルド出来ているか確認出来ていません。
Visual Studio でビルドすることは現状では出来ません。
Windows でビルドする場合は、MinGW64 をお使い下さい。
64 changes: 64 additions & 0 deletions src/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
COMPILER = g++
#COMPILER = mpicxx
CFLAGS = -std=c++11 -fno-exceptions -fno-rtti -Wextra -Ofast #-MMD -MP
LDFLAGS = -lpthread #-lboost_mpi -lboost_serialization
LIBS =
INCLUDE = #-I../include
ifeq ($(OS),Windows_NT)
TARGET = apery.exe
LDFLAGS += -static
else
TARGET = apery
endif
OBJDIR = ../obj
ifeq "$(strip $(OBJDIR))" ""
OBJDIR = ..
endif
#SOURCES = $(wildcard *.cpp)
SOURCES = main.cpp bitboard.cpp init.cpp mt64bit.cpp position.cpp evalList.cpp \
move.cpp movePicker.cpp square.cpp usi.cpp generateMoves.cpp evaluate.cpp \
search.cpp hand.cpp tt.cpp timeManager.cpp book.cpp benchmark.cpp \
thread.cpp common.cpp pieceScore.cpp
OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.cpp=.o))
DEPENDS = $(OBJECTS:.o=.d)

$(TARGET): $(OBJECTS) $(LIBS)
$(COMPILER) -o $@ $^ $(LDFLAGS) $(CFLAGS)

$(OBJDIR)/%.o: %.cpp
@[ -d $(OBJDIR) ] || mkdir -p $(OBJDIR)
$(COMPILER) $(CFLAGS) $(INCLUDE) -o $@ -c $<

all: clean $(TARGET)

bmi2:
$(MAKE) CFLAGS='$(CFLAGS) -DNDEBUG -DHAVE_SSE4 -DHAVE_SSE42 -DHAVE_BMI2 -msse4.2 -mbmi2' LDFLAGS='$(LDFLAGS) -flto' $(TARGET)

sse:
$(MAKE) CFLAGS='$(CFLAGS) -DNDEBUG -DHAVE_SSE4 -DHAVE_SSE42 -msse4.2' LDFLAGS='$(LDFLAGS) -flto' $(TARGET)

sse41:
$(MAKE) CFLAGS='$(CFLAGS) -DNDEBUG -DHAVE_SSE4 -msse4.1' LDFLAGS='$(LDFLAGS) -flto' $(TARGET)

nosse:
$(MAKE) CFLAGS='$(CFLAGS) -DNDEBUG' LDFLAGS='$(LDFLAGS) -flto' $(TARGET)

prof:
$(MAKE) CFLAGS='$(CFLAGS) -pg' bmi2

profgen:
$(MAKE) CFLAGS='$(CFLAGS) -fprofile-generate -lgcov' LDFLAGS='$(LDFLAGS) -fprofile-generate -lgcov' bmi2

profuse:
$(MAKE) CFLAGS='$(CFLAGS) -fprofile-use -lgcov' LDFLAGS='$(LDFLAGS) -fprofile-use -lgcov' bmi2

pgo:
$(MAKE) profgen
@./$(TARGET) bench
@touch *.[ch]pp
$(MAKE) profuse

clean:
rm -f $(OBJECTS) $(DEPENDS) $(TARGET) ${OBJECTS:.o=.gcda}

-include $(DEPENDS)
26 changes: 26 additions & 0 deletions src/benchmark.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include "benchmark.hpp"
#include "common.hpp"
#include "usi.hpp"
#include "position.hpp"
#include "search.hpp"

void setPosition(Position& pos, std::istringstream& ssCmd);
void go(const Position& pos, std::istringstream& ssCmd);

// 今はベンチマークというより、PGO ビルドの自動化の為にある。
void benchmark(Position& pos) {
std::string token;
LimitsType limits;

g_options["Threads"] = std::string("1");

std::ifstream ifs("benchmark.sfen");
std::string sfen;
while (std::getline(ifs, sfen)) {
std::cout << sfen << std::endl;
std::istringstream ss_sfen(sfen);
setPosition(pos, ss_sfen);
std::istringstream ss_go("byoyomi 10000");
go(pos, ss_go);
}
}
9 changes: 9 additions & 0 deletions src/benchmark.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#ifndef BENCHMARK_HPP
#define BENCHMARK_HPP

#include "common.hpp"

class Position;
void benchmark(Position& pos);

#endif // #ifndef BENCHMARK_HPP
5 changes: 5 additions & 0 deletions src/benchmark.sfen
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
sfen l6nl/5+P1gk/2np1S3/p1p4Pp/3P2Sp1/1PPb2P1P/P5GS1/R8/LN4bKL w GR5pnsg 1
startpos moves 2g2f 3c3d 2f2e 2b3c 7g7f 4c4d 3i4h 8c8d
startpos moves 2g2f 3c3d 2f2e 2b3c 7g7f 4c4d 3i4h 8c8d 7i7h 8d8e 8h7g 6a5b 4g4f 3a3b 4h4g 7a6b 4g5f 5b4c 2h4h 5c5d 5i6h 6b5c 6h7i 5a4b 3g3f 4b3a 2i3g 7c7d 4i5h 4a4b 1g1f 5c6d 4f4e 4d4e 5f4e 3c7g+ 7h7g 8e8f 7g8f B*5e B*6f 5e3g+ 6f1a+ 3g4h 5h4h R*2i P*4d 4c3c L*4c P*8h B*2b 3a4a 1a2a 8h8i+ 7i6h 3c4c 4d4c+ 3b2a 4c4b 8b4b 2b3c+ B*7i 6i7i 2i7i+ 6h5h G*3b 3c4b 3b4b R*6a N*5a
startpos moves 7g7f 8c8d 7i6h 3c3d 6g6f 7a6b 5g5f 5c5d 3i4h 3a4b 4i5h 4a3b 6i7h 5a4a 5i6i 7c7d 5h6g 6a5b 6h7g 4b3c 8h7i 2b3a 7i4f 3a6d 3g3f 4c4d 1g1f 9c9d 9g9f 1c1d 2g2f 4a3a 6i7i 5b4c 4h3g 6b7c 2f2e 3a2b 7i8h 8d8e 4f6d 7c6d 3g2f B*6i 2h4h 7d7e 7h7i 7e7f 7g7f P*7e 7i6i 7e7f 6i7h 6d7e B*3g 6c6d B*6c 8e8f 8g8f 9d9e 9f9e 7e8f P*8g 8f8g+ 7h8g P*8f 8g9g 9a9e P*9f S*8g 8h7i P*9h 9i9h 8g9h 9g9h 8f8g+ P*8c 8b8c 6c7d+ L*7g P*7h 9e9f 8i7g 7f7g+ 9h8g 8c8g+ 6g7g 8g9h 7i6h N*4e 3g4f 9f9g+ S*4a G*4b 1f1e 4b4a 1e1d 2b3a L*7i P*1b 2e2d 2c2d P*2b 3c2b 2i3g S*8h 4f6d 3b4b 3g4e 8h7g+ 6h5g G*6g 5g4f 4d4e 4f3g 6g5g P*2c 2b2c N*1e 2c1d S*2c P*6c 7d6c N*2b 2c1d+
startpos moves 7g7f 8c8d 7i6h 3c3d 6h7g 7a6b 2g2f 3a4b 2f2e 4b3c 3i4h 6c6d 5g5f 6b6c 6g6f 4a3b 4i5h 5a4a 5h6g 7c7d 6i7h 8a7c 3g3f 6a5b 5i6i 6c5d 4h3g 4c4d 8h7i 4a3a 3f3e 3d3e 7i3e 4d4e 7f7e 7d7e P*7d 7c8e 7g8h 8b7b 8g8f 8e9g 8h9g 7b7d 3e5g 6d6e 9g8h 3c3d 8h7g 7e7f 7g7f P*7e 2e2d 7e7f P*3e 5d4c 3e3d 2c2d S*3e 6e6f 6g6f S*7g N*5e 7g7h+ 6i7h G*7g 7h6i P*6g P*2c 3b2c 5e4c 5b4c 6i5h
Loading

0 comments on commit 4727133

Please sign in to comment.