投稿

12月, 2022の投稿を表示しています

OpenMythosのサンプルプログラムを動かしました

1.概要 前回、OpenMythosの環境構築まで実現したので、GitHubにあるサンプルプログラム(Usage)を動かしてみました。一部エラーが発生しましたが、結果出力部分なので修正をしました。その内容を記述します。 2.詳細 Usageに記載されているPythonプログラムをopenmythos_usage.pyとして作成します。 $ source ~/mypy/bin/activate (mypy) $ pythoh3 openmythos_usage.py 下記エラーとなります [MLA] Parameters: 1,538,626 [MLA] Logits shape: torch.Size([2, 16, 1000]) [MLA] Generated shape: torch.Size([2, 24]) Traceback (most recent call last):   File "/home/nakasima/openmythos/openmythos_usage.py", line 48, in <module>     rho = torch.linalg.eigvals(A).abs().max().item()           ^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: linalg.eig: The input tensor A must have at least 2 dimensions. コードの下記部分を修正します #rho = torch.linalg.eigvals(A).abs().max().item() rho = A.abs().max().item() $ source ~/mypy/bin/activate (mypy) $ pythoh3 openmythos_usage.py [MLA] Parameters: 1,538,626 [MLA] Logits shape: torch.Size([2, 16, 1000]) [MLA] Generated shape: torch.Size([2, 24]) [MLA] Spectral radius ρ(A) = 0.3679 (mus...

3目並べを利用したAlphaGoの学習 モンテカルロ編

1.概要 AlphaGoの勉強過程で3目並べを学んでいます。考え方の基礎を知る上で大切なことであると思いネット上の資料も参考にしています。まず、参考資料を参照して、3目並べのルールを記述したClassを作成し、手入力、ランダム入力、minimax法、alphabeta法の対戦ができることを実現しました。今回は、montecarlo法に関して記述します。 2.詳細 (1) 概要 前回記述した3目並べのルールに関しては、do_game(self, action)を実行することでゲームが進行するようにしたものを活用します。minimax法に関して、すべての手順(9!=362880)を調べて、ある手を打った場合に、勝利する場合の数、敗退する場合の数、引き分ける場合の数を計算して、勝利する場合の数が高かった手を打つことにしました。 先手番をminimax法、後手番をalphabeta法にするとdraw(引き分け)になります。しかし、毎回同じパターンを繰り返します。同じ選択基準である手が複数ある場合でも最初の手を選択していたことが原因でした。そこで、複数の選択基準がある場合は乱数を利用して手を選択する方式を追加しました。これで様々な場面を見ることができるようになりました。 (a) tictactoe.py  ゲームルール(alphabeta法と同じ) (b) montecarlo.py 先手(minimax)、後手(montecarlo)の対戦 (2) 詳細 (a) tictactoe.py class Tictactoe:     def __init__(self, fields=None):         self.fields = fields  if fields  != None else [0] * 9         self.myturn = True         self.data   = [[0,1,2],[3,4,5],[6,7,8],                    ...

3目並べを利用したAlphaGoの学習 アルファベータ編

 1.概要 AlphaGoの勉強過程で3目並べを学んでいます。考え方の基礎を知る上で大切なことであると思いネット上の資料も参考にしています。まず、参考資料を参照して、3目並べのルールを記述したClassを作成し、手入力、ランダム入力、minimax法の対戦ができることを実現しました。今回は、alphabeta法に関して記載しますが、参考資料のalphabeta法とは実現方法が異なります。minimax法への改良で2目が並んだリーチ状態を見つけて優先着手するようにしました。 2.詳細 (1) 概要 前回記述した3目並べのルールに関しては、do_game(self, action)を実行することでゲームが進行するようにしましたものを活用します。minimax法に関して、すべての手順(9!=362880)を調べて、ある手を打った場合に、勝利する場合の数、敗退する場合の数、引き分ける場合の数を計算して、勝利する場合の数が高かった手を打つことにしました。 しかし、3目並ぶリーチ局面であるにもかかわらず、3目並ぶ手を選択せずに、2箇所の3目並べリーチとなる手を選択します。そこで、alphabeta法として無駄な処理を刈り取るために、リーチ局面の場合はリーチから勝ちの手を選ぶ方法をminimax法に追加します。 先手番をminimax法、後手番をalphabeta法にするとdraw(引き分け)になり完成度が向上したと思います。 (a) tictactoe.py ゲームルール(alphabeta法を実現するために、is_reach(self)を追加) (b) alphabeta.py 先手(minimax)、後手(alphabeta)の対戦 (2) 詳細 (a) tictactoe.py class Tictactoe:     def __init__(self, fields=None):         self.fields = fields  if fields  != None else [0] * 9         self.myturn = True         self.data  ...

3目並べを利用したAlphaGoの学習 ミニマックス編

1.概要 AlphaGoの勉強過程で3目並べを学んでいます。考え方の基礎を知る上で大切なことであると思いネット上の資料も参考にしています。まず、参考資料を参照して、3目並べのルールを記述したClassを作成し、手入力とランダム入力の対戦ができることを実現しました。今回は、minimax法に関して記述します。実際には先手は○が3個並ぶ手が多い着手、後手は✕が3個並ぶ手が多い着手を選択しています。 2.詳細 実現方法は参考資料とは少し異なります。その理由は参考資料に従うと先手がminimax法の場合に3目並べの中心(4の位置)を選択しません。この位置に着することが優位であると考えていたので、全ての手順を調べて初手が3目並べの中心位置であることを確認して、それを選択するようにプログラムしました。また、後手がminimax法の場合も良い手を打つように改良しました。 (1) 概要 前回記述した3目並べのルールに関しては、do_game(self, action)を実行することでゲームが進行するようにしましたものを活用します。minimax法に関して、すべての手順(9!=362880)を調べて、ある手を打った場合に、勝利する場合の数、敗退する場合の数、引き分ける場合の数を計算して、勝利する場合の数が高かった手を打つことにしました。初手が一番検討すべき手順が多いのですが、数秒で処理されます。 (a) tictactoe.py  ゲームルール(minimax法を実現するために、undo_game(self,action)を追加) (b) tttminimax.py minimax入力とランダム入力の対戦 (2) 詳細 (a) tictactoe.py class Tictactoe:     def __init__(self, fields=None):         self.fields = fields  if fields  != None else [0] * 9         self.myturn = True         self.data   = [[0,1,2],[3,4,5]...

3目並べを利用したAlphaGoの学習 ランダム編

 1.概要 AlphaGoの勉強過程で3目並べを学んでいます。考え方の基礎を知る上で大切なことであると思いネット上の資料も参考にしています。まず、参考資料を参照して、3目並べのルールを記述したClassを作成し、手入力とランダム入力の対戦ができることを実現しました。この内容を記述します。今後、作成したプログラムを改造して、3目並べを強くしていきます。 2.詳細 (1) 概要 3目並べのルールに関しては、do_game(self, action)を実行することでゲームが進行するようにしました。actionは0から8までの数値で3目並べの9個のマス目を示します。2つのpythonコードを記述しました。 (a) tictactoe.py ゲームルール (b) tttrandam.py 手入力とランダム入力の対戦 (2) 詳細 (a) tictactoe.py class Tictactoe:     def __init__(self, fields=None):         self.fields = fields  if fields  != None else [0] * 9         self.myturn = True         self.data   = [[0,1,2],[3,4,5],[6,7,8],                        [0,3,6],[1,4,7],[2,5,8],                        [0,4,8],[2,4,6]]     def do_game(self, action):         self.fields[action] = self.do_play()     ...

Tensorflow-1.15の環境構築で発生した問題

1.概要 囲碁AIのalphaGOを勉強していますが、環境としてtensorflow-1.xが必要でした。そこで、tensorflow-1.15の環境構築を過去情報を利用して作業を開始したのですが、様々な問題が発生しました。今回はこのことを記載します。少し古いバージョンの環境構築はとても難しいですね。 2.詳細 (1) 発生した問題と対応内容 (a) ubuntu-20.04環境にtensorflow-1.15を導入すると、python3 version問題で導入できません。 (b) ubuntu-18.04環境にtensorflow-1.15を導入でき、CPU環境が構築でき一歩前進しました。 (c) GPUを利用するために、ubuntu-18.04にCUDA-10.2を導入して、tensorflow-gpu-1.15を導入しました。しかし、GPU認識を確認すると、10.0のライブラリエラーが発生して、GPUを認識できません。 (d) tensorflow-gpu-1.15は、CUDA-10.0が必須と判明。しかし、nvidiaの情報に従って作業しても、CUDA-10.0は導入できません(Depends: cuda-10-0 (>= 10.0.130) but it is not going to be installed) (e) 様々な変更を加えても改善しないので、Docker Hubからtensorflow-1.15:5-gpuのimageを利用。ubuntu-20.04のdocker環境で構築できました。 (f) 更にネットを調べると、nvidaのCUDA-10.0の説明資料と異なる点を見つけて、ubuntu-18.04で再実行。これにより、CUDA-10.0が導入でき、無事にtensorflow-gpu-1.15を導入できました。 (g) サンプルプログラムでGPU利用で実行できないコードが見つかり、コードの一部修正が必要と判明しました。 (2) 所見 ubuntu-18.04を利用してtensorflow-gpu-1.15をCUDA-10.0の組み合わせで利用できますが、導入後の更新処理やubnutu-20.04環境の優位性などを踏まえると、上記(e)の手順のDocker環境がベストであると感じています。 参考資料 [外部サイト参照] ・ CUDA...