福野泰介の一日一創 - create every day

福井県産業政策課より依頼あってスピーチ、AI人材、グローバル人税育成が急務。まだまだ行動が足りません。

Chromebookでも動いた、IchigoJam web。フルスクリーン表示にするとIchigoJam端末!
(アメリカの子供に合わせてつくった小文字キーボードはちょっと残念。日本向けは大文字キーボードが理想)

AIもやってみたいという子どもたちや、AIに興味持ってもらいたい大人に、ジャンケンAIの実装例。

まずは普通にジャンケンプログラム(参考、ぜったい勝てないジャンケン / はじめてのプログラミングその18

10 B=RND(3)+1 20 ?:INPUT"JANKEN[1-3]",A:IF A=0 CONT 30 LET[1],"GU","CHOKI","PA" 40 ?STR$([A]);"-";STR$([B]) 50 C=(A-B+3)%3 60 LET[0],"AIKO","MAKE","KACHI" 70 ?STR$([C]) 80 GOTO10

10行がコンピューターの手を決めるところ。人間の手を聞く前に決めているので、ズルしてないです。
これをサブルーチン化(他のプログラミング言語では関数化、メソッド化とも)

10 GSB@AI 100 @AI:B=RND(3)+1:RTN

続いて、勝負数、勝数、勝率を表示

5 N=0:W=0 71 IF C N=N+1:W=W+(C=2) 72 IF N ?"N:";N;" WIN:";W;" ";W*100/N;"%"

100回ほど対戦してみると、勝率は50%に近づいていきます。
グーしか出さない頑固なAIにしてみます。

100 @AI:B=1:RTN

勝率100%、余裕ですね!
コンピューターを強くするために、人間の出した手を数えて、確率を変動させて強くしてみます。

100 @AI:IF A=0 B=RND(3)+1:RTN 110 [10+A]=[10+A]+1 120 S=0:FOR I=11 TO 13:S=S+[I]:NEXT 130 B=RND(S) 140 IF B<[11] B=3:RTN 150 IF B<[12] B=1 ELSE B=2 160 RTN

人間が出した手 A を、配列に記録。120行で合計を求め、ランダムでどの範囲にあるかで出す手 B を決めています。
パーを連続して出すと、すぐに対策されます。真剣に勝負して、勝率50%を上回れるかな?

記録した配列を表示して確認

115 FOR I=11 TO 13:?[I];" ";:NEXT:?

止めて再度実行しても、学習した結果は残っています。リセットするには変数をリセットするコマンド

CLV

単純に記録するだけだと、グー、チョキ、パーと順番に出されると記録上偏りが無くて強さがでません。
そこで、人によって次に出す手に偏りがあると仮定して、前の手と次の手を記録するように改造します。

100 @AI:IF A=0 B=RND(3)+1:RTN 110 IF D=0 D=A:B=RND(3)+1:RTN 120 D=10+D*4:[D+A]=[D+A]+1 130 D=A:E=10+A*4 140 S=0:FOR I=E+1 TO E+3:S=S+[I]:NEXT 150 B=RND(S) 160 IF B<[E+1] B=3:RTN 170 IF B<[E+2] B=1 ELSE B=2 180 RTN

Dが前回の手、配列を3x3、9つ使っています。その記憶を表示するにはこちら

125 FOR J=1 TO 3:FOR I=1 TO 3:?[10+J*4+I];" ";:NEXT:?:NEXT

このようにアルゴリズムが説明できるAIを説明可能なAIと呼ぶようです。

現代AIの主流、ディープラーニングは、ジャンケンを例にすると、相手の手だけでなく、その時の気温や、表情、掛け声のトーン、仕草など、さまざまなデータを使って、何層かの中間データを作って計算する方式。

コンピューターパワーの増大や、アルゴルズムの改善によって、ますます複雑化するAI。機械的に説明を生成することはいくらでもできるでしょうが、その長大な説明を理解することにどのくらい意味があるのでしょう?

便利な道具、本質押さえて、じゃんじゃん便利に使っていきましょう!

5 N=0:W=0 10 GSB@AI 20 ?:INPUT"JANKEN[1-3]",A:IF A=0 CONT 30 LET[1],"GU","CHOKI","PA" 40 ?STR$([A]);"-";STR$([B]) 50 C=(A-B+3)%3 60 LET[0],"AIKO","MAKE","KACHI" 70 ?STR$([C]) 71 IF C N=N+1:W=W+(C=2) 72 IF N ?"N:";N;" WIN:";W;" ";W*100/N;"%" 80 GOTO10 100 @AI:IF A=0 B=RND(3)+1:RTN 110 IF D=0 D=A:B=RND(3)+1:RTN 120 D=10+D*4:[D+A]=[D+A]+1 125 FOR J=1 TO 3:FOR I=1 TO 3:?[10+J*4+I];" ";:NEXT:?:NEXT 130 D=A:E=10+A*4 140 S=0:FOR I=E+1 TO E+3:S=S+[I]:NEXT 150 B=RND(S) 160 IF B<[E+1] B=3:RTN 170 IF B<[E+2] B=1 ELSE B=2 180 RTN

完成した、出す手の癖を読むジャンケンAIプログラム。


PCNメンバー、株式会社ict4eのアフリカからのインターン報告会。
ますます重要になる、人口拡大と発展が明らかなアフリカとのリレーション。若く、紙文化をスキップした強みあり!
ICT学生起業家を生み出す方法 - 総務省 IoT新時代の未来づくり検討委員会 人づくりWG


エジプトの西隣、リビアからの福井への2週間のインターン。


IchigoJamのはんだづけとプログラミング、タミヤのカムロボの組み立て、TICAD7への展示ともりだくさん。


1970年代のテレビ番組、がんばれ!!ロボコンが有名というリビア、GANTZの元ネタになったというガンツ先生との連携提案がおもしろい。
一番の提案という、IchigoJamという名前なのだから、基板の形もイチゴ型に!
確かに、基板の普通に慣れすぎていました。


早速、ラフデザイン!赤基板でヘタの部分は白にしておき、緑シールか、ペンで好きに塗ってもらう感じ?
大使館も周りに多い、南青山291でのIchigoJamワークショップ、いいかも!

グローバル化する社会に向けて、自分だけの作品作りができるスキルを提供したい。
作品を紹介する道具としての英語などの外国語を使って伝わる楽しさに気がつけばOK!
リビアと日本のこどもたちがつながるきっかけとしたい。

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像