技術をかじる猫

適当に気になった技術や言語を流すブログ。

Q学習で三目並べの評価値テーブルを作らせてみた

機械学習と深層学習 Pythonによるシミュレーション

機械学習と深層学習 Pythonによるシミュレーション

この本で Q 学習のコードまで書いた後、「あー静的な評価値生成に使えるなー」という事で、やってみたのが下記。

StudyDocs/tic_tac_toe.py at master · Sunao-Yoshii/StudyDocs · GitHub

なんで三目並べなのかというと

  • 手数が少なく、試行回数を増やしやすい(というか手数が少ないので、その学習内容が正しいのかどうか評価しやすい)
  • 目が少ないのでランダムでもそれなりに結果が出しやすい
  • 覚えたてのアルゴリズムを試したい

というだけのもの。

現実に対人を想定した評価値となると、相手の手に対して評価をしなければならない事もあるので、単純な Q 学習(静的評価値学習)だけでは判断ができないと思う。
が、三目並べなら参考値位出てきそうかなと思ったのが成り立ち。

そもそも評価値って単純な学習じゃねーよという事に後から気付いて、作り直し。
盤面の状態と、それに対する手、相手の手を踏まえて、Q値の伝播を行った。

やってみたら分かるのだが、正直 5000 回位はランダムとそんな変わらない。
8000 回位強化学習させると、有意差が少しづつ出てくるような感じ。

大体 20,000 回強化学習させれば、ランダムさんに 7 割かた勝てるようになる…ってそんなアホみたいに戦う位なら、人の方がもっと強いわと www

とはいえ、すべての状況に対して次の手、評価…って計算してるから、かなりの無駄は当然あり得るわけで…もう少し考えたいところ。

機械学習と深層学習という本を読みつつ...2

とりあえず第一章を読んだところでの自分の理解。
一応オライリー先生の機械学習本を半分位読んだ前提で…。

基本的な分類として、教師あり学習教師なし学習の二つが基礎としてある。
教師あり学習は教師データを事前に準備することで、学習機にそのパターンを覚えこませる手法。

教師あり学習。このケースで教育した AI はモノや状況の認識を行う。
画像や音声を認識するのはこうした AI。

教師なし学習はおよそ二種類の分岐があり

アルゴリズムによる分類は、クラスタリング等の様に類似したグループにデータを分類するだけで、その分類に名前や意味を与えるのは人間の仕事です。
もう一つの強化学習は、最終目的(結果)から見てその仮説が正しかったと理解を蓄積する学習型です。

クラスタリング等の分類技術は、例えば遺伝子操作の過程で有効な遺伝子を探すために、とりあえず分類を使ってみるとか、商品販売であれば購入顧客の傾向を分類するなどの使い方があります。
どちらかといえば研究向けでしょう。

結果からの学習、これは強化学習に分類します。
例えば将棋やオセロの AI 学習なんかに使います。例としては、一通りの手順で盤を進めて、勝ったらその手順にスコアを割り振る、負けたら手順のスコアを下げる。
そうして評価値を構築するなんて使い方ができます。

機械学習と深層学習という本を読みつつ

github.com

機械学習の基礎とあって、単純ではある。

帰納学習、複数の事象からそのパターンを抽出する学習のことで、今回の方法はその基礎だそうだ。
逆の言い方をすればパターンを見つけるための学習ともいえる。

このケースではランダムで認識パターンを作成、パターンに対して学習データを与えて正答率が良ければ残す。
そんなループを繰り返すことで、精度を上げていくというアルゴリズム

ただ、学習効率のいいものかといえば微妙なパターンではある。
元のコードがあまりにも一筆書き過ぎてもやっとしたので少し変えた。

TestManagementTool探してみた

というのも、テストを管理するのに Excel とか全力でやだ、見づらい、メンテしにくい、同時に更新ですさまじく問題が出る。
ついでにテストの状況をいちいちファイルサーバまで行って開かないと確認できないクソっぷり。

で、老舗で TestLink を久々に弄ってみたのだが、これがやはり死ぬほど使いづらい。

というか UI や言葉の選び方がダメなせいで、ユーザビリティが悪すぎた。
つまり何が言いたいかというと、導入するにあたって学習コストが高すぎる。
その意味で使いたくない

という事で、ほかの使えそうなものを調べてみた。

ざっくり

  • SquahTM
  • TestRail

辺りが人気らしい。

リンクと共にメモだけ。

あとよさげなリンク

モダンなテスト管理プロセスのためにテスト管理ツール3つを比較検討したはなし - Mercari Engineering Blog

妥当なセンは TestRail か。
UI を見る限り、TestLink より絶対使いやすい。

TestLink を弄ってみる

  1. 適当に C:\workspace\projects\docker\testlink この辺にディレクトリを掘る
  2. そこに mariadb_data, testlink_data ディレクトリを掘る
  3. docker-compose.yml を作成して後述を記述
  4. docker-compose up -d で起動(ただし完了までそこそこ時間がかかる)
version: '2'

services:
  mariadb:
    image: 'bitnami/mariadb:latest'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - MARIADB_USER=bn_testlink
      - MARIADB_DATABASE=bitnami_testlink
    volumes:
      - 'C:\workspace\projects\docker\testlink\mariadb_data:/bitnami'
  testlink:
    image: 'bitnami/testlink:latest'
    environment:
      - TESTLINK_DATABASE_USER=bn_testlink
      - TESTLINK_DATABASE_NAME=bitnami_testlink
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - 'C:\workspace\projects\docker\testlink\testlink_data:/bitnami'
    depends_on:
      - mariadb

因みに、ここで嵌ったのが、ノートン先生の問題。
どうもこのノートン先生はDockerコンテナ同士の通信を阻害するものらしい。

そのため、以下の設定を行った。

gfonius.net

確かにこれで、コンテナの起動に失敗することは無くなったのだが、起動中に php のインストールで停止するらしい。
apache のインストールまでは行ってるので、通信内容を見て勝手に遮断してるのかも知れないが、結局わからなかった。

結論から言うと、Windows やっぱ OSS やるのにうんごですわ…

Docker CLI で unauthorized: incorrect username or password で無駄に嵌ったのでメモ

Windows で Docker 入れると、Htper-V なんて他の共存を拒むクソアプリを入れざるを得なくなるので、Ubuntu16 のDualBootにしていたのだが、どうも DELL の XPS15 9560 と相性がよくないらしい。

  • ログイン時に固まる→コンソールで起動して、Nvidia ドライバ入れれば解決。
  • New アップデート後に Sleep → キー入力(多分Enterキー)が暴走して、ログイン不能に。

なんてクソッタレな状況に陥ったので、もういい加減切れて Ubuntu を削除。
VirtualBox すら諦めて(F○ck!!!!)Windows10 で開発しようと、Docker をインストールする。

そして、無事入ったと思ったら、まともにコンテナが起動しなかったので、対処も踏まえてメモ。

起こったこと

Docker イメージのダウンロード中に以下のエラーで止まる。

incorrect username or password.

一応、GUI上ではすべてログインしているように見える。
フォーラムを眺めたところ、コンソールは別にログインしなければならないらしいことが分かった。

コマンドラインでログインしかし罠だった

で、コマンドラインからログイン(dockerhub のログインに使用しているメアドでログイン)しようとして以下のエラー。

C:\workspace\projects\docker\redmine-jenkins-testlink>docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (XXXXXXXX@gmail.com):XXXXXXXX@gmail.com
Password:
Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password

Dockerhub のログイン画面で DockerID と書かれているものと全く同じものを入力してコレである。

f:id:white-azalea:20180715192653p:plain

再びフォーラムを検索してみたところ、「メールアドレスを使うんじゃない」 と言っている。

ハァ( ゚Д゚)ハァ?

結局

ログイン後に表示されるアカウントIDを入れたらログインできたという…

C:\workspace\projects\docker\redmine-jenkins-testlink>docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (XXXXXXX@gmail.com): xxxxxxxx
Password:
Login Succeeded

これは Dockerhub でログインした後の以下の部分

f:id:white-azalea:20180715193225p:plain

なんか本質以外でハメられると色々損した気分になる…

UEFI でデュアルブート設定した Ubuntu を削除する

といってもメモだが…
手順はこんな感じ。

qiita.com

cmd.exe を管理者権限で起動して操作します。
因みに、自分の環境(XPS15)だと list disk に反応はなく、list volume で参照したら存在した。
まぁ、1ディスクで二つ入ってるからなぁ

C:\Windows\system32>diskpart

Microsoft DiskPart バージョン 10.0.16299.15

Copyright (C) Microsoft Corporation.
コンピューター: DESKTOP-OFE415F

DISKPART> list volume

  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
  Volume 0     C                NTFS   Partition    476 GB  正常         ブート
  Volume 1         回復           NTFS   Partition    499 MB  正常         非表示
  Volume 2                      FAT32  Partition    100 MB  正常         システム

DISKPART> sel volume=2

ボリューム 2 が選択されました。

DISKPART> assign letter=d:

DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。

あとはリンク先と変わりません。

あとは管理ツールから Linux パーティションを消して Windows 領域に統合すればおしまいです。