『新人君! RPGの世界でJavaを学ぼう』をやった
はじめに
本記事は、下記記事の続編。
upura.hatenablog.com
Githubのrepository
【冬休みの宿題】『新人君! RPGの世界でJavaを学ぼう』をやる
遺伝的アルゴリズムでゴールを決めてみた
「遺伝的アルゴリズム」を用いて、サッカーでゴールを決めるのを目的とした学習モデルを設計した。2年前の大学の授業で作った資料が発掘されたので、ブログにまとめる。
モデル化
赤色のチームが攻撃し、青色のチームのゴールを狙う。1回のシミュレーションは、赤色のチームがセンターラインから攻撃を開始し、青色のチームにボールを奪われるか、ゴールを決めるまで実施する。
2チーム分22人のエージェントを作成し、一定の規則に従い移動するよう制御。具体的には以下の通り。
- 赤色のチーム……ゴール方向に向かって、一定速度で進む
- 青色のチーム……赤色のチームのボールを保持しているエージェントに向かって、一定速度で進む
赤色のチームは、一定の時間(フェーズ)ごとに、ボールを保持したままドリブルするか、味方にパスを出すかを決める。ゴールへ一定の距離まで近づいたエージェントがボールを保持している場合、シュートを打つ。シュートは必ず決まる。
青色のチームのエージェントが、ボールを保持している赤色のチームのエージェントに一定の距離(ごく近く)まで近づいた場合、ボールを奪う。
遺伝的アルゴリズム
赤色のチームに、上記のような遺伝子情報を持たせる。右上の表は、例えば「1フェーズ目で2番のエージェントにボールを保持させる(この時点で2番のエージェントがボールを保持していればドリブルし、そうでなければ他のエージェントからパスを貰う)」ということを意味する。
評価値
とある遺伝子情報に対し、その指示に従ってシミュレーションを実行する。ここで「赤色のチームの一番先頭のエージェントが、どれだけ青色のチームのゴールに近づけたか」を評価値とする。
複数個の遺伝子情報の中から、評価値の高いものを選択し、交叉(組み換え)を行うことで次世代の遺伝子情報群を生成する。「シミュレーションと評価→選択と交叉」の繰り返しで徐々に性能の高い遺伝子情報が生み出され、最終的にはゴールを決められる遺伝子情報が誕生するという仕組み。
実験結果
第1世代
即座にボールを奪われてしまう。
第3世代
第1世代より成長していると分かる。
世代ごとの評価値の推移は上記の通り。世代を重ねるごとに評価値が上がっていると分かる。
第8世代
遂にゴールを決められる遺伝子情報が誕生。オフサイドとか言わない。
考察
以下の2条件を試してみた。
- 青色のチームのフォーメーションを変更
- 青色のチームの動き方を変更
- 自分よりもボールの方が自陣ゴールに近い場合は、通常より速く移動
詳細は割愛するが、ゴールを決められる遺伝子情報が誕生するまでの時間は、1の場合はそれほど変わらず、2の場合は長く(13世代ほど)なった。(少なくとも今回の場合)システム設計自体を整えるより、問題が生じた場合の対策を用意しておく方が効果的だと示唆された。
参考
2年前の資料作成時、下記の動画を参考にした。当時は投稿者について知らなかったが、「平成将棋合戦ぽんぽこ」の製作者さんだった。
www.nicovideo.jp
Rで棒グラフと折れ線グラフを重ねた図を作成 〜出生数・出生率を例に〜
下記のツイートを見て、出生数・出生率の推移を調べてみようと思った。
初の予告退位で、統計に表れるような「産み控え」が発生するのか?は興味深い。「えっ?あなた平成うまれなの?」って子供が将来言われないように1年待つ人って、うちの親の感覚(自分の親が「大正女」とか古い人みたいに言われてる)だと一定数いるようだが、今の人は気にしないような気もするし。
— 渡邉正裕 (@masa_mynews) December 26, 2017
可視化した結果は下記の通り。
データは下記サイトからダウンロードした(出典:厚生労働省「人口動態統計」)。
内閣府ウェブサイトの常時暗号化による「https:」への切り替え - 内閣府
Rスクリプト
label <- t(df['year']) num <- t(df['birth_num']) rate <- t(df['birth_rate']) par(mar=c(4, 5, 2, 5)) barx <- barplot(num, names.arg=label, xlab = "", ylab = "Number of live births", col=c('white')) par(new=T) plot(barx, as.matrix(rate), type="o", axes = F, xlab = "", ylab = "") axis(side = 4) mtext("Birthrate", side = 4, line = 3) box() abline(v=51)
東大を退学して10月に新卒入社した
はじめに
- 退学 Advent Calendar 2017の6日目の記事
- 本Advent Calendarの2日目の記事で触れられていた、「中退してすぐにプログラマとして就職できて良かった話」みたいな記事
辞めた理由
- 学部を出て就職するつもりで4年次に内定を持っていたが、4年次から本格化した研究が上手くいかない自分が悔しく「このまま研究の奥深さ(自分に向いているorいない/自分が好きor嫌い)を知らずに就職したら後悔する」と思い、2016年7月に全内定を辞退して大学院進学を決意
- 真面目に取り組んだ甲斐あり、卒業時には優秀卒論賞を受賞しMITでの短期プログラムにも参加、修士課程1年では国内会議(査読なし)発表・国際会議(査読あり)を経験
- 前々から30代後半で家業を継ぐ可能性があり、(研究活動の最初の一歩をひと通り体験できたこの段階で)早めに次は一度企業で働いてみたいと思った
就活
- 2017年3月ごろから就職の可能性を意識し出し、企業の選定を開始
- 2017年5月中旬に新卒枠
(新卒とは言っていない)で3社エントリー - 2017年6月頭に第一希望の内定を獲得
- しばらく判断を保留していたが、2017年8月に大学院退学と入社を決意
現状の評価
- 学生時代は朝4時半起きで週6日以上研究室に行くストイックな生活をしていたので、企業勤めになっても生活に特に変化はない(むしろホワイト化した)
- 企業ならではの行動の遅さなどは若干不満だが、企業だからこそ体感できることもあり、概ね満足
- 金銭面も独り身の現状では全く文句ない
おわりに
- 2017年は激動の年だったが、現時点では退学して良かったという所感
- 「はじめに」でも書いたように生存バイアスなので、一般論として大学・大学院は退学しない方が良いと思う
- 正直ブログでは書けない/書き切れない話も多いので、(退学を考えている人など)興味ある方は連絡ください