🔖

バイオインフォマティクスコンテスト2021参加記

2021/07/01に公開

6月中旬から下旬にかけて開催された Bioinformatics Contest2021 に参加したので、簡単に参加記をば。

Bioinformatics Contest って?

Bioinformatics ContestBioinformatics InstituteITMO大学, Stepik, Rosalind が主宰する一種の競技プログラミングのコンテストで、バイオインフォマティクス(生物情報学、生物に関するデータをコンピューターで解析したりする学問分野)の分野の問題が出題されて、制限時間内にいくつの問題が解けるかを競い合います。
2017年から開催されているコンテストです(2020年はコロナ禍のため中止)。

ルールなど

  • 予選と本戦で構成されている
  • 予選で規定以上の得点を取ることで本戦に出場できる
  • 予選は約1週間、本戦は24時間の中長期コンテスト(年度によって変わる可能性あり)
  • AtCoder や Codeforces のように正確なアルゴリズムのコードを提出するのではなく、テストデータが提供され、自身の環境で回答を作成し提出する形式
  • 満点回答ではなくても部分点が付く問題が多い
  • 本戦上位入賞者にはバイオインフォマティクスコンテストらしい豪華賞品!(今年の優勝者は自身の全ゲノム解析!!!)

参加のきっかけ

このコンテストを知ったきっかけは Twitter で、「たまたまバイオインフォコンでるか」というツイートを見かけたからでした。
元々バイオ系の大学、大学院を出た後エンジニアになったので、バイオインフォマティクスには興味があったものの、仕事にするにはバイオとコンピュータサイエンス両方の専門性があるわけではなく厳しいだろうということと、そもそもバイオインフォマティクスの仕事自体ほとんどないことから、大学に通う以外にバイオインフォマティクスにかかわることができないだろうと考えていて、いつか社会人大学生でも出来たら専攻してみたいな程度に考えていました。
そんな中このコンテストについて知ったので、まずはこれに出てみることにしました。
また、育児でコンテスト参加は休止していますが、アルゴリズム学習も兼ねてAtCoderなどの競技プログラミングにも昨年から参加しており、長期のコンテストであれば子供を寝かしつけた後に少しづつ解きながらできるだろうというのも自分にとっては好都合でした。ちなみに最近AtCoderではAtCoder Heuristic Contestという中長期間のコンテストが実施されていて、これも子育て世代にはちょっとありがたいと思っています。(ほんとは通常コンテストとかもアルゴリズムを学ぶという目的としてもかなり有用なのでとてもありがたいのですが。)

コンテスト当日までにやったこと

まったく準備なしで参加すると長期間コンテストとはいえさすがに手間取るため、過去問を見てどんなもんかの感触を確かめてみました。

過去問はコンテストを開催するプラットフォームのStepikにあるので、まずはそれをざっと見て、

  • どんな問題が
  • どういう形式で
  • どのくらいの難易度で

出題されるのかなどを見てみました。
これで正しく動作するアルゴリズムを提出するのではなくダウンロードしたデータに対して処理を行い、出力された解答を提出する形式だということがわかりました。
ただ、英語の問題文だったことやダウンロードしたファイルを読み込んだりと前処理が結構面倒だったのでこの時は問題形式の把握のみで終わりました。

コンテスト参加中

Qualification Round

子どもの寝かしつけに失敗してコンテスト開催当日は参加できず、2日目の夜から参加しました。
1週間の猶予があるのでまずは1問目から問題を見ていき、出来そうであれば手を付けていくという形で進めていきました。
問題自体は満点回答を出すのは厳しいものの手がまったく出せないというレベルではなく、ほとんどの問題をある程度の部分点を取ることができ、951点以上を取ることができFinal Roundに進むことができました。
実は一問目の問題が、問題文の意図がつかめず非常に焦りましたが、ほかの参加者にもわかりづらかったようでコメントに質問がたくさん寄せられているのに気づいて事なきを得ました。

Final Round

休日の24時間コンテストだったこともあり、子供の相手いていたらほとんど出れないかなと思っていたのでまずは出来そうな問題を部分点だけでも取っていくという方針でやっていきました。
開始時間が日本時間で22時だったのでまずは開始後問題をざっと読み、どれが手を付けられそうかを見ていきました。そして次の日に問題の解答に子供が寝ているときなどにチャレンジしていき、最終的に約250位くらいの順位となりました。
Final Roundではどう進めていいか迷っているものがあったのですが、Excelと条件付き書式で簡単なヒートマップのようなものを作ることでなんとなく方針が見えて来たりしました。コードを提出するものではないから色々な手で実験してでも何かをつかもうとするのとても大切だなといまさらながらに感じました。
また、最初から時間がないことが分かっていたので、とりあえず今の問題は半分くらいとれたから次に行くという割り切りをしていたのがよかったかなと思います。

感想

競技プログラミングをやっていても思うのですが、やはり制限時間がある中で他人と競い合いながら何かをするのは非常に集中するのでとても学習にはいいなと思いました。
これがもし過去問で勉強しようだけだった場合、おそらくExcelで実験してみたりコメント読んで何とか問題文の読解をしようとはせず、結局検索して解答見て理解したつもりで終わってしまっていたと思います。時間が限られている中でも実際の大会に出場してよかったと思います。
そしてなによりコンテストに出るという楽しさが味わえました、運営の方には感謝です。

これやるとよいかもというTips

上のほうでも少し書いていますが、コンテスト中にこれにもう少し早く気づいていればよかったなというのがいくつかあったので、それについても少し書いておきます。

コードを書かずに実験する・コードに固執しないで使いやすいツールを検討する

アルゴリズムを実装したコードを提出するわけではないので、Excelで作表して答えが見えてくればそれでもいいことがあったりします。特に小さいデータだとそれで十分なものも多いし、そこから規則性が見えてきてコードへ落とし込むことができることもありました。(実際Final Roundではそれで1問方針が立てられました。)
なので最初からコードを書くことに固執しすぎないでまずは目に見える形に落として、落ち着いて問題を見極めるのが大切だなと感じました。

分からなかったら積極的にコメントを見に行く

このコンテストの辛いところとして、バイオとコンピュータサイエンス両方の知識を英語で求められるところがありました。
なので問題文に何が書いてあるのかをまず読み解くのにかなり苦労して、自分の理解であっているのかどうかを確信をもつのがかなり厳しかったです。
ただ、問題にコメント欄があり、そこで質問ができ、ほかの参加者の質問の閲覧もできるため、問題文を読んでわからない場合は積極的に活用していくのがよさそうでした。

1問だけに固執しないで次の問題に行く

このコンテストの特徴として、すべて正解のデータを提出しなくても部分点が付くという点があります。これが結構重要で、1問目で80%くらいの部分点を取れていて、いい感じにコードをかけているからもうちょっと改善すれば満点になりそう!と思っても、次の問題の50%解答を提出するほうがトータルの得点はよくなったりします。さらに50%の解答くらいだと単純な全探索やExcel作表等でも到達可能だったりするので、一回別の問題に行ってしまうというのもひとつの手かなと思います。

終わりに

問題は公開されていますが一応問題の内容に触れた記事を書いていいのかどうかなど確認して、余力があればいくつか問題について書いて行ければなと思います。(主に考えたこと、やってみたことなどについて)
また2021年8月から↓のコンテストが行われるようなので、ちょっとやってみようと思います。
https://sites.google.com/view/genocon

Discussion