🔙 Back to Top

Tue Aug 08 2017

icfpc2017

repo

autotaker/icfpc2017

日記

今揃いうる広義の negainoido っぽいチームに加えて面識の無い三人がチームに加わった. AI を書くための便利フレームワーク.cpp が彼らによって作られており、 それなりに効率的に AI が量産された.

合宿と称して那須高原にある民泊を利用した. ICFPC でお風呂に入れて寝る場所が確保されている状況は初めてだった.

問題 (初期ルール)

N人ゲームでターン制でプレイする (\(N=4,8,16\)).

無向グラフが与えられる. 頂点の内いくつかには λ マークのラベルが付与されており mine (鉱山) と呼ばれる. それは 100-1000 頂点ある内の3頂点とか5頂点程度しかない貴重なものである.

できるプレイはグラフから一つの枝を選んで自分のものにすること. パスをするということも許されているが、初期のルールではパスをすることにメリットはない. 一つの枝の所有権はたかだか一人のプレイヤーにしかない.

ちょうど枝数だけプレイが行わると、各プレイヤーは自分が所有している枝の組み合わせによってスコアが決まる.

頂点集合を \(V\)、mine の集合を \(M\) (\(M \subset V\)) とする. 頂点 \(u, v\) の間の最短距離を \(d(u, v)\) とする (これは枝の所有権は無視して計算する). \(r_p(u, v)\) をプレイヤー \(p\) が所有する枝だけで \(u, v\) が連結なら \(1\) で、ないなら \(0\).

このときプレイヤー \(p\) のスコアの計算式は次: \[\sum_{u \in M} \sum_{v \in V} r_p(u, v) d(u, v)^2\]

考察

拡張ルール

ICPFCは伝統的に、コンテスト中にルールのアップデートがあるのが普通. 今回も合計三回のルール変更があった.

  1. future
  2. splurge
  3. option

これによっていくつかの戦略は実現が難しくなる (あるいは無駄になる). 例えば splurge と option によって他人の future (っぽい長いパスを繋ぐの) を妨害することが難しくなる.

やったこと

かんたんなモンテカルロを回すAIを書いた. 一辺を取って (次の手) 残りでランダムなプレイをした勝率で辺 (手) の評価をする. 結局ランダムなプレイは本当にただランダムにやっただけのが小さなグラフではそれなりに強かった. どうせランダムなんだから、真面目にプレイをシミュレーションする (ターンを回してランダムに辺を割り当てていく) よりも、辺について舐めてランダムにプレイヤーを割り当てていくほうが (実装にも依るだろうけど、あなたが普通の実装をしていたなら) 早い. もはやみんなが公平な回数のターンをプレイしていないが.

やってないこと

基本的に枝は連結するように選ぶはずなので、 すでに所有してる枝からランダムウォークすることで、その人が次に選びそうな枝を予測できそう. それに従ってモンテカルロを回せば強くなったかもしれない.

日記、ラップトップパソコンを買った

パソコン選びについて

System76 の Galago Pro を買った. YouTube で検索するとレビュー動画がいくつか出てくる.

自分で所有するパソコンくらい、自分が好きなOSだけを入れて使いたい. というわけで Ubuntu に適したラップトップを選ぶことにした. 経験上 Macbook でさえ無ければ、どんなノートパソコンであっても、Ubuntu くらい入れればそれなりに動くけど. 問題はこう、そのパソコン特有のハードへのドライバの問題で、 例えばキーボードのバックライトが光らないとか、そいういうの.

インターネットに Linux をインストールしたという情報が多く集まってさえいれば、どんなでもいいんでは. と思って arch wiki を見ると、どんなパソコンでも何かしらそのハードウェアに問題を抱えていることがわかる. 512GB以上のSSDを選ぶと認識しない、とか.

"linux best laptop" とかでググるとトップに XPS 13 が出てくるが、それはあくまでも devloper edition の話であって、 通常の Windows プリインストールのものはそういった問題がなくはない. それなら、はじめから Linux の何かのディストリビューションが入っていて、出荷時点でテストが行われたものを買ったほうがいいだろう.

購入から発送まで

購入したあとに見つけたサイトだけど、 System76でUbuntu搭載のノートパソコン(laptop)を注文してみた その2 - 有馬総一郎のブログ と大体同じだった. 記念と思ってパソコンと一緒に鞄を注文したのだけど、 ラップトップとは別で発送が成されたらしい (まだ手元にない).

配達はヤマト運輸が来た. System76 からは UPS で配達されたらしいが、国内でバトンタッチされるの?かな. 着払いで 8500円 請求された. 関税とからしい.

環境構築

初めから入ってる Ubuntu 17.04 を使っている. デスクトップ環境はいつもどおり i3.

IME, 日本語環境

fcitx を使おうとしたがうまく動かなかった. 初めから入ってた Unity 環境でうまく動いていた ibus (ibus-mozc) を使うことにした.

キーボード

Unity の設定で Caps を Ctrl にしたが、それは i3 デスクトップ環境では有効ではないらしかった. そういえば今使っている i3 を入れたデスクトップパソコンは HHKB (UNIX配列) を繋いでいるので Caps で困っていなかったのだが、Caps を無効にする方法が思い出せなかった.

setxkbmap を使う.

setxkbmap -option ctrl:nocaps -option altwin:swap_alt_win

タッチパッド

デフォルトで二本指のスクロールが機能しているが、垂直方向のスクロールが無効になっているのと、 スクロールの向きが直感的ではない問題がある (指を上にやると下にスクロールする).

スクロールの向きについては system-setting のマウスの設定で natural scrolling をオフにすると直る. i3 環境でも機能した.

垂直方向のスクロールについては設定がなかったので

xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Scrolling" 1 1

Dropbox

apt install dropbox を試したり (しかしそんなパッケージはない) Dropbox 公式サイトから .pkg を落としたり試したが (2010年のものであってたぶん無理)

apt install nautilus-dropbox

すればいいだけだった.

apt で入れたものリスト

前回の 2016/04/10 とおおよそ同じ.

うまく動いていないので fcitx-mozc はあとで消しておこう. terminator もなんか無駄な高機能を使う理由もないので消した. gnome-terminal で十分だ.

screen は最新版を使いたいのでわざわざ自前コンパイルしてたが、 apt でも十分最新 (4.05) が入るようになってたので apt で入れた.

gimp もう使わないので削除.

プログラミング言語の類は apt から入れる時代ではなくて、 そのプログラミング言語のバージョン管理ツールから入れる時代. それ自体のインストールはたいてい、一行コマンドで実行できるようになっていて便利だし.

sudo apt install \
build-essential \
rlwrap \
vim \
zsh \
git \
screen \
apt-file \
i3 \
feh \
xsel \
acpi \
ruby \
zathura \
mplayer \
imagemagick \
graphviz \
pavucontrol \
pandoc \
mecab \
automake \
chromium-browser \
xdotool \
pdftk
# manually install
twurl
jq
peco