ざっくばらんメモ_20:kaggle, visitor function

kaggle recruit challenge

code

Kernelにて今まで公開されてきたメソッドをアンサンブルして LB0.479を実現しているものが公開されていた。

利用されているメソッドの中に自分の公開したものが含まれていた。

そのおかげか自分のkernelがブロンズを獲得。

ただこのメソッドは以前使っていたもので古いので、最新のやり方で出した結果で置き換えたら性能向上できると 考えトライ。しかし結果は変わらず。

現在93位。

visitor functionの作り方

多型な関数表現をしたい時に役立つプログラムデザイン。

elementとvisitorという2つの概念がある。

elementクラスはvisitorクラスを入力とするvirtual accept関数のみを持つ。

この時、想定する全ての型をelementのinheritanceとして宣言。

各element毎に固有の動作を定義しておく。

各elementはinheritanceされてきたaccept関数を持つ。

次に各elementを入力とした関数を持つvisit関数を持つvisitorクラスを宣言。

ここで各elementのaccept関数を定義し、それらは入力されてくるvisitorクラスの visit関数に対して自身(elementクラス)を入力として実行するようにする。

最後に、visitor継承クラスを(複数)作り、それぞれにおいて各element毎にそのelementを 入力とするvisit関数の内容を定義する。

以上をクライアントが利用する場合においては、 クライアントはvisitorクラスのインスタンスを作成し、 それは各elementに関してaccept()関数を通して実行される事になる。

結果、異なった型を持つelementに関して同じvisitor関数を用いて処理が行えるようになる。