2016年5月18日水曜日

『強くなるロボティック・ゲームプレイヤーの作り方』復刊|C++で学ぶ実践的強化学習[プレミアムブックス版]サンプルDL案内つき

2008年刊の名著『強くなるロボティック・ゲームプレイヤーの作り方』がプレミアムブックス版として2016年に復刊。C++でロボット/ゲームAIに強化学習を実装する実践書です。著者は八谷大岳・杉山将。紙版・電子版あり、サンプルコードはマイナビのサポート/商品ページから入手できます(発売日:2016/06/08、ISBN:978-4-8399-5673-8)。

強くなるロボティック・ゲームプレイヤーの作り方 プレミアムブックス版 ~実践で学ぶ強化学習~ 


  • C++によるロボット強化学習
  • サンプルソースのダウンロードはこちら

追記:よくある質問(FAQ)

Q. 復刊で内容は変わりましたか?
A. 基本内容は2008年版と同一で、プレミアムブックスとして再刊されています。
Q. 使用言語は? Pythonでも学べますか?
A. 本書の実装はC++中心です。概念は他言語にも応用できますが、サンプルはC++です。
Q. サンプルコードはどこで入手できますか?
A. 出版社の商品/サポートページからダウンロードできます(販売サイトの案内を参照)。
Q. 電子版(eBook)はありますか?
A. あります。販売状況は各ストア(出版社サイト、Amazon等)でご確認ください。
Q. どんな人に向いていますか?
A. C++で強化学習を実装してみたい初中級者〜実務者、ロボット制御やゲームAIに関心のある方。
Q. 具体的に何が学べますか?
A. 強化学習の基礎からアルゴリズム、ロボット/ゲームエージェントへの実装手順までを通しで学べます。
Q. 事前に必要な知識・環境は?
A. C++の基礎、確率・線形代数・微積の初歩。標準的なC++コンパイラ/IDE(GCC/Clang/Visual Studio等)。
Q. 価格や在庫は?
A. 変動するため、最新情報は出版社ページや通販サイトでご確認ください。

主要トピック(各1行)

  • MDP:状態・行動・遷移・報酬で問題を定式化する土台。

  • 動的計画法:モデル既知前提で価値・方策を反復更新して最適化。

  • モンテカルロ:エピソード平均で価値推定。モデル不要・高分散。

  • TD学習:1歩先の推定でブートストラップ更新。オンラインに向く。

  • SARSA:実行中の方策で更新するオンポリシー。安全寄り。

  • TD(λ):エリジビリティ痕跡で多段のTD誤差を混合。

  • Q学習:max行動で更新するオフポリシー。理論収束性が強い。

  • 近似(線形/カーネル):特徴表現で連続空間の価値関数を近似。

  • 政策勾配:方策を確率分布として直接最適化(REINFORCE等)。

代表課題

  • 三目並べ:離散・完全情報で基礎検証に最適。

  • Mountain Car:連続状態で谷脱出。探索設計がカギ。

  • Acrobot:二重振子のスイングアップ。制御系の定番難題。

2016年5月12日木曜日

Apache NiF トラブルシューティングとあるある


・GetHTTPプロセサでSocketException Invalid Argumentエラー

(おそらく)君の使ってるJavaのバージョンが古いからエラー
java version "1.7.0_55"

Java(TM) SE Runtime Environment (build 1.7.0_55-b13)

http://stackoverflow.com/questions/16191236/tomcat-startup-fails-due-to-java-net-socketexception-invalid-argument-on-mac-o

JDKをこっからダウンロードして
java version "1.8.0_91"

Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
にしたら動きました。(>>そのせいで多分某ゲームが動かなくなるのでバージョン切り替えできるようにする)
******
・REST API呼び出せない

Pathは/nifiじゃなくて/nifi-api
> The API lives at /nifi-api, so the address you are looking for would 
> be http://localhost:8080/nifi-api/controller/about

httpsが必要なものがあるようで、とりあえず呼べたのはこれ
http://localhost:8080/nifi-api/controller

NiFiプロセサ紹介 ExecuteProcessとPutFile

ExecuteProcess
OSのシステムコマンドを実行して結果をFlowFileに出力する。
処理が長くなりそうな場合はBatch Durationに時間を設定するとその時間間隔で出力を分けてくれるのでテキストの出力の場合は活用してもいいかもしれない。

PutFile
ローカルのファイルシステムにFlowFileを書き込む。
DirectoryにFlowFileを書き込むディレクトリを設定する。

sample1は上記二つのプロセサを組み合わせて/tmp/nifi_tempディレクトリにデータを出力するテンプレートファイル
ExecuteProcessプロセサが"Hello"を引数としてEchoの実行を行い、PutFileプロセサがFlowFileの出力を行う。

※windowsでExecuteProcessを使用する場合は、commandをcmdとして引数に実際のコマンド( /c echo hello)などと打てば、動く
**************
ExecuteStreamCommand

図にするとこんな感じかな


やり方いろいろあるだろうがExecuteStreamCommandのCommand Pathにはシェルスクリプトやバッチファイルの場所を書いたほうが無難みたい。

***************
 GenerateFlowFile
 負荷テストなどの目的で利用できるランダムデータからなるFlowFileの生成が行える。
 File Size :生成したいファイルサイズ
 Data Format  :テキストかバイナリか選べる

sample2ではGenerateFlowFileプロセサが10KBのランダムな文字列からなるテキストファイルを2秒ごとに生成し、PutFileプロセサがFlowFileの出力を行う。
*************
GetHTTP
指定したURLに対してGETリクエストをかけて、取得したボディを指定した名前のFlowFileにする。

sample3ではHTTPGetプロセサがhttp://localhost:8080/nifiを呼び出し、結果をtest3.txtというファイルに保存する。念のためSchedule Durationを十日後に設定している。PutFileプロセサがFlowFileの出力を行う。
(SDKのバージョンによってエラーが出る場合があるため注意せよ)
*******

2016年5月11日水曜日

Apache NiFi ドキュメントリンク(最新版への導線+2.x対応メモ)


ドキュメント構成はこちら

Getting Started with Apache NiFi は初めてNiFiを使う人向けの「とりあえず動くの確認」用のチュートリアル
Apache NiFi User Guide はUIの操作を中心にNiFiでユーザーができることをガイド
Apache NiFi Expression Language Guide は属性値の判定や書き換えに使えるスクリプト言語の仕様書
 The NiFi Expression Language で属性値の参照したり別の値と比較したり加工したりできます。

NiFi System Administrator’s Guide はユーザーの管理を含むシステム管理者向けの技術資料
/nifi-api はNiFiをリモート操作できるRest APIの仕様
NiFi Developer’s Guide はProcessorを中心としたNiFiのコンポーネント開発のための解説書
Apache NiFi Development Quickstart はNiFi本体を開発したい人のためのクイックガイド
Example Dataflow Templates はデータフローのサンプルをtemplate形式でお送りしている

For Developers は開発者向けの情報(アーキテクチャーやバージョンルールなど)

hortonworks-gallery/nifi-templates はhortonworksによるtemplate集

Indexing Tweets with NiFi and Solr NiFiでツイッターから情報とるサンプル

***************
プロセサの設定について
・プロセサは指定されたスケジュールにしたがって実行される。選べるのは
Timer driven: ‘Run duration.’の間隔にしたがって実行
Event driven:イベントドリブンで仮実装中(一部のプロセサで実行可能)
CRON driven:CRONの仕組みにしたがる。
の三種類

追記:NiFi 2.x の重要メモ(旧記事からの補足)

  • Event-driven スケジューリングは 2.0 で削除
    1.x では一部プロセサで実験的に提供されていましたが、2.0 で除去されました。今後は Timer-driven または CRON-driven を利用します。Apache IssuesCloudera Documentation

  • XML テンプレートは廃止 → フロー定義(JSON)+レジストリ(NiFi Registry / GitHub/GitLab クライアント)
    既存テンプレートはフロー定義へエクスポートし、レジストリでバージョン管理に移行します。MediumCloudera DocumentationStackable Documentation

北斎漫画


  •  4000図1400ページがあなたのKindleに
  •  北斎壮年時の作品集(つーか、気ままに書いた絵)
  •  海外にも多大な影響を与える


2016年5月10日火曜日

Apache NiFi入門と活用ガイド|特徴・インストール・Expression Language徹底解説


Apache NiFi は、大量データの「収集・変換・転送」をノーコードで自動化できるオープンソース ETL/データフローツールです。本記事では NiFi の特徴とアーキテクチャ、Windows・Linux へのインストール手順、Expression Language の基礎、Kafka 連携など現場で役立つベストプラクティスを体系的に解説します。

Apache nifi

2016年5月7日土曜日

量子力学メモ

電子・物性系のための量子力学 デバイスの本質を理解する

 

  •  エネルギーという概念の重要性は、これが変換されることにあり、しかもその過程で常に保存されることにある