グラフ理論を用いた囲碁 GraphGo v0.15

マウスをクリックすることで黒番の着手ができます。白番はAI(CPUによる思考ロジック)が着手します。AIは眼の候補地が相手より多くなるように打っているのですが...。内部ではグラフ理論を用いた局面のクラスPosを利用しています。AIの挙動を調べるために6路盤にしています。

囲碁アプレット GraphGo

囲碁アプレットです。盤上でマウスをクリックすると黒の手を着手できます。パスできるようになりました。コウ、投了は扱えません。デフォルトでは活き石が(明るく)表示されます。見直した数式に伴いプログラムの修正しましたが、ベクトルの計算(セキ石など)にはまだ誤りがあるようです。

ソースプログラム GraphGo.java

アプレット

イメージテストアプレット ImageTestApplet

クラスGTable, GBoard, GBowl, GLidを使った囲碁画面表示用アプレットです。変更ありません。

ソースプログラム ImageTestApplet.java

アプレット

テストプログラム Sample1

2進行列を扱うクラスBMatrixを使ったサンプルアプリです。メソッドsetValue()をテストしています。前回から変更はありません。

ソースプログラム Sample1.java

テストプログラム Sample2

2進行列を扱うクラスBMatrixを使ったサンプルアプリです。1項演算 inv(), tran() と2項演算 or(), and(), diff(), xor() を使っています。前回から変更ありません。

ソースプログラム Sample2.java

テストプログラム Sample3

2進ベクトルBVectorのサンプルアプリケーションです。1項演算 inv() を使用します。変更ありません。

ソースプログラム Sample3.java

テストプログラム Sample4

2進ベクトルBVectorと2進行列BMatrixのサンプルアプリケーションです。abs(), mul(), multran()を使用します。変更ありません。

ソースプログラム Sample4.java

テストプログラム Sample5

囲碁の局面を表すクラスPosで3路盤を扱うサンプルアプリケーションです。3路盤で石を取れるか確認しています。変更ありません。

ソースプログラム Sample5.java

テストプログラム Sample6

囲碁の局面を表すクラスPosで2路盤を扱うサンプルアプリケーションです。2路盤で、白1子を取るパターン、黒2子、黒1子、白3子を取るパターンをテストします。変更ありません。

ソースプログラム Sample6.java

応用プログラム CalcWholePos

新規作成しました。対称形や取られる石が残っているものを除いたすべての局面の数を数えるプログラムです。4路盤までは一晩で計算できました。すべての局面に番号pを振っています。

ソースプログラム CalcWholePos.java

テストプログラム H1V1

隣接関係を表す行列F0を水平のツケH1、垂直のツケV1と自石Eに分解しそれらからナナメやケイマなどの関係を作り出せるか試してみました。変更ありません。

ソースプログラム H1V1.java

囲碁思考クラス AI

対戦のためのクラスAI(思考ルーチン)です。眼の候補地を多くするように次の手を決めています。変更ありません。

ソースプログラム AI.java

Color強化クラス AltColor

AWTのColorに機能強化したクラスです。変更ありません。

ソースプログラム AltColor.java

JUnitテストケース TestAltColor.java

2進行列クラス BMatrix

2進数の行列を表すクラスです。変更ありません。

ソースプログラム BMatrix.java

JUnitテストケース BMatrixTest.java

2進ベクトルクラス BVector

2進数のベクトルを表すクラスです。変更ありません。

ソースプログラム BVector.java

JUnitテストケース BVectorTest.java

AltColorの列挙 EnumColor

AltColorのテストケースで使用するために定義した列挙です。変更ありません。

ソースプログラム EnumColor.java

ゲームの記録のためのクラス GameRecord

棋譜などゲームの記録のためのクラスです。変更ありません。

ソースプログラム GameRecord.java

囲碁盤グラフィックスのクラス GBoard

囲碁盤のグラフィックスを表示するためのクラスです。パスの処理を追加しました。

ソースプログラム GBoard.java

碁笥グラフィックスのクラス GBowl

碁笥(ごけ)のグラフィックスを表示するためのクラスです。変更ありません。

ソースプログラム GBowl.java

ボタン(スイッチ)グラフィックスのクラス GButton

ボタンのグラフィックスを表示するためのクラスです。ボタンにはランプがついています。2つアプレットを起動するとボタンがずれる問題を解消しました。メソッドisOn()を追加しました。

ソースプログラム GButton.java

碁笥の蓋グラフィックスのクラス GLid

碁笥の蓋(ふた)のグラフィックスを表示するためのクラスです。変更ありません。

ソースプログラム GLid.java

机グラフィックスのクラス GTable

机のグラフィックスを表示するためのクラスです。2つアプレットを起動するとボタンがずれる問題を解消しました。既定で活き石を(明るく)表示するようにしました。

ソースプログラム GTable.java

着手クラス Move

着手を表すクラスです。メソッドisPass(), isResign()を追加しました。

ソースプログラム Move.java

JUnitテストケース MoveTest.java

字句解析のためのクラス Parse

棋譜の字句解析のためのクラスです。変更ありません。

ソースプログラム Parse.java

囲碁局面クラス Pos

囲碁局面を(b, w, F)で表すクラスです。式の見直しを行いました。パスの仕様を変更しました。

ソースプログラム Pos.java

JUnitテストケース PosTest.java

乱空点列のクラス RandomArray

Small BasicのIgoプログラムで使っていた乱空点列をJavaのクラスにしました。もともとモンテカルロのプレイアウトの際の高速化のために作ったものですが、まだGraphGoでは利用していません。変更ありません。

ソースプログラム RandomArray.java

JUnitテストケース RandomArrayTest.java

6ベクトルのクラス SixVectors

6つのベクトル(v 活き石, s セキ石, x 死に石, y 目, t 地, m ダメ)を計算するクラスです。併せて眼の候補地(cb, cw)も計算します。活き石の計算は不十分です。セキ石の計算にもに誤りがあるかもしれません。

ソースプログラム SixVectors.java

JUnitテストケース SixVectorsTest.java