Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

仙台IT文化祭 「C# 大好き MVP による C# ドキドキ・ライブコーディング (出張編)」 小島の分

3,378 views

Published on

2017年10月28日『仙台 IT 文化祭 2017』 ( http://2017.sendaiitfes.org ) でのセッション「ドキドキ ライブコーディング(出張編)」
#SendaiITFes #RebirthTohoku

■動画:
[Video] 仙台IT文化祭 2017 「C# 大好き MVP による C# ドキドキ・ライブコーディング (出張編)」 #SendaiITFes #RebirthTohoku | YouTube


https://www.youtube.com/watch?v=-bAF458xpXE

■関連資料:
https://twitter.com/search?f=tweets&q=%23sendaiitfes%20%23s282035

4 色オセロ対決 again - 仙台 IT 文化祭 2017 | xin9le.net
http://blog.xin9le.net/entry/2017/11/04/035632
仙台IT文化祭で「ドキドキ ライブコーディング(出張編)」してきた! | 僕はここだ!
http://mrstar-logs.hatenablog.com/entry/2017/10/30/231011

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

仙台IT文化祭 「C# 大好き MVP による C# ドキドキ・ライブコーディング (出張編)」 小島の分

  1. 1. C# 大好き MVP による、 C# ドキドキ・ライブコーディング (出張編) ~ 小島の分 ~ 小島 富治雄 #sendaiitfes #s282035
  2. 2. 自己紹介  小島 富治雄  @Fujiwo  福井コンピュータアーキテクト株式会社  Microsoft MVP (2005-2018) C#関連
  3. 3. C#の父 Anders Hejlsberg との出会い Anders Hejlsberg 1983年 Turbo Pascal (1995年 Delphi) 2000年 C# 2006年2月2日 横浜 MVP Global Summit 2
  4. 4. C# の好きなところ  マルチ パラダイム言語  様々なパラダイムを徐々に学べる delegate C# 1.X C# 2.0 C# 3.0 C# 4.0 C# 5.0 class 手続き型 関数型 ラムダ式 LINQ 型推論 ジェネリック 拡張メソッド 動的型付け dynamic 非同期 async/await オブジェクト 指向 Parallel …
  5. 5. C#  マルチパラダイム言語  ちょうど良い  シンプルな記述  ちょうど良い  多用途  各種デバイス、各種プラットフォーム、サーバーサイド  ツールのサポート  Visual Studio
  6. 6. 今回のお題 オセロの CPU アルゴリズム 4人打ち (チーム戦)
  7. 7. 役割 自分の役割は何か?
  8. 8. 私の役割  「ちゃんとやる」こと。  ちゃんとやらないと石野さんにおこられる。 ちゃんとやれよ。 何ちゃんとやってんだ!
  9. 9. 私の役割 ちゃんと「工夫」しないと。
  10. 10. 2015年のお題「七ならべ」のときに 思いついた「工夫」  リフレクション? 他の人が書いたクラスのメソッドを書き換える? Unsafe? メソッドが取り替えられないなら インスタンスを取り替えてしまえば 良いじゃない
  11. 11. 前回の「工夫」  そもそもオセロが弱い。  2人打ちでも石をどこに置けばよいのかわからない。  オセロが強いひとがやればよいのに。
  12. 12. 誰が強い?  最初に4人分戦わせて、一番強いひとが私の代わりに打てばよいのに。  自 AI のコンストラクターで、事前に5回対戦して強いひと (AI) を選んどく。 class PlayerTable : IEnumerable<KeyValuePair<Board.Piece, IPlayer>> { Dictionary<Board.Piece, IPlayer> playerDictionary = new Dictionary<Board.Piece, IPlayer>(); …… } class GameRunner { …… }
  13. 13. PlayerChecker: 一番強いひとをチェック class PlayerChecker { readonly Board.Piece theStrongestPiece; readonly PlayerTable playerTable = new PlayerTable( players: new IPlayer[] { new PlayerRyotaMurohoshi(), new PlayerAILight (), new PlayerXin9le (), new PlayerFujiwo3 () } ); public static Board.Piece TheStrongestPiece => theStrongestPiece; …… }
  14. 14. 自分の番が来たら 一番強い (誰かの) AI に打たせる 13
  15. 15. … …が、駄目…! 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 14 動作せず… 他の人の AI もこちらの判定ルーチンをコール 呼び出しが無限ループ 犯罪的だっ…! ざわ… ざわ…
  16. 16. もっとひどい AI までっ…! 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 15 それをやってしまったら…… 戦争だろうがっ…! ざわ… ざわ… 開始時に、ルールを無視して 石を全部自分の色に変更!!!
  17. 17. さて今回は… 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 16
  18. 18. 不採用だったアルゴリズム  「ライフライン」 テレフォン  例えば、 twilio (電話API) でオセロ名人に電話をかけて正着を訊いてはどうか オーディエンス 会場アンケートAPI (謎) 50:50 ちょっとよくわからない
  19. 19. 社会的ハック 18 敵チームのひとりを事前に買収
  20. 20. 社会的ハック 19 「石が少ないことこそ美しい」という価値観の創生
  21. 21. そんな中… ある日のチャット… 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 20
  22. 22. AI を強化して勝つっ…!! 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 21 AI のアルゴリズムで勝つ その手があったっ…! 目からうろこっ…! 天啓っ……! ざわ… ざわ…
  23. 23. というわけで… 今回の AI アルゴリズム
  24. 24. 1. そこに置くことで、 (味方の盤面の価値 – 敵の盤面の価値) が最大になる位置に置くっ!
  25. 25. 2. 置いて、次に他の3人の分も置いてみることで、 (味方の盤面の価値 – 敵の盤面の価値) が最大になる位置に置くっ!
  26. 26. 盤面の価値の評価 25 評価関数 得点 得点テーブル (各マスを得点化) 打てる数 石を打てる場所の数が多い 石の周囲 石の周りに空が少ない 確定石 返されることのない石が多い 辺 辺に連続しておくときのパターン
  27. 27. 局面での重みづけ 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 26 局面に応じた評価関数の重みづけをパラメーター化 10個のパラメーター public class AIParameter { double[] parameters = new[] { 0.71, 0.50, 0.04, 0.76, 0.50, 0.19, 0.52, 0.76, 0.97, 0.38 }; }
  28. 28. 最強のパラメーターを求めて… 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 27 どのパラメーターの組み合わせが最強? 「遺伝的アルゴリズム」が使えるのではっ…! 圧倒的、閃きっ …! ざわ… ざわ…
  29. 29. 遺伝的アルゴリズム 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 28 パラメーターの異なる多くのAI (最初は乱数で生成) この時点でもっとも強いAI 3つと何回か対戦 よりチームを多く勝ちに導いた AI 2つ 交配 • クローン • 交叉 (組み換え) • 突然変異 (一部を乱数で変更) 何世代も繰り返し 優秀なパラメーター (遺伝子) をのこす
  30. 30. “ReversiGameRunner” を作成 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 29 コマンドライン ツール 一晩中でも、遺伝的アルゴリズムを続けられる 名付けて “Shallow Learning” 圧倒的、浅さっ …! ボロ… ボロ… ボロ…
  31. 31. 今回のパラメーター 仙台IT文化祭2017 http://2017.sendaiitfes.org/ #sendaiitfes 30 0.36, 0.30, 0.06, 0.63, 0.46, 0.07, 0.85, 0.26, 0.09, 0.93
  32. 32. 目標: 同じチームの石野さんの アルゴリズムのサポート 31 石野さんの石は、 自分の石と同じ価値っ…!

×