Deep Learning 囲碁
RayをベースにKGSやGoGoDの棋譜をDCNNに学習させてみてる。
https://github.com/zakki/Ray
cgosレーティング3000以上届いた。
http://www.yss-aya.com/cgos/19x19/cross/Rn.3.0-4c.html
AlphaGo
各所で話題になってるGoogle の DeepMind 囲碁の論文が面白い。
https://storage.googleapis.com/deepmind-data/assets/papers/deepmind-mastering-go.pdf
RAVEやProgressive wideningのようなUCT系の探索ノード決定ヒューリスティックを使わず、ニューラルネットが吐いた確率分布を使ってたりはするけど、rollout policyやtree policyはもろいままでの囲碁AIどおりだし、ニューラルネットへの入力にダメの数やシチョウ入れてるので、一部ニュースの汎用AI作ったら囲碁も強かったんだいって言うのは無理がある気が・・・
Arduboy
ArduboyのDeveloper kitが届いたのでaobench移植したり日本語表示したり
arduboyでaobench. 誤差拡散で適当に。意外とはやいな。 pic.twitter.com/4zJj4VJ0WV
— zakki (@k_matsuzaki) 2015, 10月 11
第一水準の半分ちょいでflash溢れる pic.twitter.com/BLDw7cBjC2
— zakki (@k_matsuzaki) 2015, 10月 12
正攻法じゃどうしようもない気がするのでとりあえず諦めよう https://t.co/do8FH8NtyS
— zakki (@k_matsuzaki) 2015, 10月 12
SVGコードゴルフ
推測するな計測せよに基づき最適化プログラムをでっちあげる。
import java.io.{BufferedReader, ByteArrayInputStream, ByteArrayOutputStream, InputStreamReader} import java.nio.charset.Charset import java.util.zip._ object GZ { def compress(in: String, charset: String) = { val buf = new ByteArrayOutputStream() val out = new GZIPOutputStream(buf) val bytes = in.getBytes(charset) out.write(bytes, 0, bytes.length) out.close buf.toByteArray } } object Svg { def toString(data: List[(String, List[String])]) = { var s = """<svg xmlns="http://www.w3.org/2000/svg" width="600" height="250" stroke-width="16" fill="none" stroke="#4a87ee">""" for ((tag, elms) <- data) { s += "<" + tag for (e <- elms) s += " " + e s += "/>" } s += """</svg>""" s } var min = Int.MaxValue var minSvg: String = null def optOne(data: List[(String, List[String])], svg: List[(String, List[String])]): Unit = { data match { case e :: es => val (tag, attrs) = e for (as <- attrs.permutations) { optOne(es, (tag, as) :: svg) } case Nil => val s = toString(svg) val size = GZ.compress(s, "UTF-8").length if (size < min) { min = size minSvg = s println(minSvg + " --> " + min) } } } def opt(data: List[(String, List[String])]) = { for (per <- data.permutations) { optOne(per, Nil) } } def main(args: Array[String]): Unit = { val data = List(("path", List("""d="m173 102a51 51 0 1 1-13-30m20 37h-53"""")), ("circle", List("""cy="128"""", """r="32"""", """cx="227"""", """stroke="#d83038"""")), ("circle", List("""cy="128"""", """r="32"""", """cx="313"""", """stroke="#f4c022"""")), ("path", List("""d="m401 160a31 31 0 1 1 0-61m-4 0a24 29 0 1 1 0 61m26-67v79m-1-12a20 20 0 1 1-52 17"""")), ("path", List("""d="m449 51v115"""", """stroke="#4ab95a"""")), ("path", List("""d="m529 118a30 30 0 1 0-2 24m5-32-62 28"""", """stroke="#d83038""""))) val s = toString(data) println(s + " --> " + GZ.compress(s, "UTF-8").length) opt(data) println(minSvg + " --> " + min) // for (c <- GZ.compress(s, "UTF-8")) // println(c) println(toString(data)) } }
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="250" stroke-width="16" fill="none" stroke="#4a87ee"> <circle cx="313" r="32" stroke="#f4c022" cy="128"/> <circle cx="227" r="32" stroke="#d83038" cy="128"/> <path d="m449 51v115" stroke="#4ab95a"/> <path d="m173 102a51 51 0 1 1-13-30m20 37h-53"/> <path d="m529 118a30 30 0 1 0-2 24m5-32-62 28" stroke="#d83038"/> <path d="m401 160a31 31 0 1 1 0-61m-4 0a24 29 0 1 1 0 61m26-67v79m-1-12a20 20 0 1 1-52 17"/> </svg>
これによってgzip後のサイズを269バイトにまで削減できる
CEDECの資料とか
すべては快適な体験のために:Oculusによる実践的VR開発技法
http://www.4gamer.net/games/195/G019528/20150828092/
http://app-review.jp/news/272961
Spherical Harmonics for Lighting
http://www.geomerics.com/blogs/simplifying-spherical-harmonics-for-lighting/
http://www.geomerics.com/wp-content/uploads/2015/08/CEDEC_Geomerics_ReconstructingDiffuseLighting1.pdf
サブディビジョンサーフェス
https://docs.google.com/presentation/d/1mOjFkOkGmZWMiYTOJNRfU_zCbTxUdr2hIDaXE65pxDU/edit#slide=id.p
http://takahito-tejima.github.io/
球面ガウス
http://cedec.cesa.or.jp/2015/movie/AC/player_2137.html
http://www.jp.square-enix.com/info/library/
Designing Physically Based Microfacet Models for Next Generation
双方向パストレーシング(BDPT)の基礎からOPENCLによる実装まで
フーリエ変換を用いたテクスチャ解像度推定とその応用
http://www.slideshare.net/nikuque/ss-52190439
http://www.4gamer.net/games/999/G999902/20150829008/
物理ベース時代のライトマップベイク奮闘記
GamePlay + Emscripten
HGIMG4のEmscripten対応でGamePlay3DのEmscripten対応を部分的にやってたのをGamePlay本体に移植してみた。
元がOpenGL ES対応しててマルチプラットフォーム対応なので初期化と入力系以外は特に何もしなくても動く。
音のストリーミングでスレッド使ってるのの回避とゲームパッド対応はなんとかしないとということで放置してたけど、CEDEC2015でEmscripten対応ゲームエンジン少ないって話だったのでとりあえず。
http://zakki.github.io/GamePlay/
https://github.com/gameplay3d/GamePlay/compare/next...zakki:emscripten