読者です 読者をやめる 読者になる 読者になる

顧問は見た!沖縄高専のプロコンの驚愕の真実!!

閲覧注意:ICT委員会のメンバーにとって過激な表現があります。気をつけてお読みください。

1.はじめに

沖縄高専旭川市で催された第24回高専プロコンに参加した。沖縄高専高専プロコンに初めて挑戦したのは学校設立後3年目だったので、今年で8回目のプロコン参加であり、私自身も8回目の引率だった。

なっちゃんまるさのブログに学生視点からプロコンに対して具体的にどのように取り組んだのを書いているので、私はICT委員会の顧問視点から、今回のプロコンに沖縄高専がなにを目指してどう活動してきたのかを書くことにする。

2.去年残した奇跡的な実績

今年のICT委員会の活動方針を決めるにあたって、昨年度残したICT委員会の実績が大きなプレッシャーになった。昨年度のICT委員会はいわば全戦全勝してしまった。参加したコンテストというコンテストで全て受賞したのである。今年、ICT委員会がなんの賞も取れないようだったら「沖縄高専は一発屋」ということになる。日々頑張っている学生を見ているだけにICT委員会に一発屋のレッテルを貼られるのだけは避けたかった。

昨年のICT委員会の活動実績は奇跡と言っていい。たとえば去年はプロコン自由部門のメンバーはそのままパソコン甲子園モバイル部門にも参加していた。チームのリーダをしたまるさはプロコンとパソコン甲子園だけではなく、IT forgsの活動も掛け持ちしていたのである。結果はプロコンで特別賞、パソコン甲子園でグランプリを受賞したのだが、顧問の立場からするとそれは幸運以外のなにものでもなかった。外部からみると沖縄高専スゲーと思われたのかもしれないが、その内実はいっぱいいっぱいであった。

3.今年度のICT委員会の取り組み方針

今年度の取り組み方針として大きく掲げたのはコンテストの掛け持ち禁止である。ひとりで参加するコンテストを一つだけに絞り、確実な受賞を狙った。

今年度のICT委員会の戦力を考えるとチームを4つ編成するのが精一杯であった。その3チームをプロコン競技部門と自由部門、パソコン甲子園モバイル部門、プログラミング部門に振り分けることとした。今のICT委員会にはプロコン課題部門にでる余力は無い。そこで、ICT委員会が手を出すことができないプロコン課題部門を私とS先生が指導している卒研生4名に卒研テーマとして取り組ませることとした。

これでプロコン3部門に応募が可能となった。

目標はあくまでも卒研生チームを含めたプロコン3部門受賞であった。

4.予選

全部門受賞を目指す以上、予選を通過しなければ意味が無い。3部門受賞を目標に挙げてはいるが各部門に1チームしかエントリーしていないので全チームが予選通過しないといけない。プロコン競技部門は事実上予選はないのと同じなので、プロコン自由部門・課題部門、パソコン甲子園モバイル部門の3つの開発アイデアを出さなければいけない。それも確実に予選通過ができるアイデアと企画書のクオリティが要求される。

まず大切なのがアイデア出し。今年はICT委員会全員でアイデア検討会を何度も開催した。また、アイデアを出す段階でまるさが見つけてきた智慧カード3ブレスターを数セット購入しアイデアを膨らませた。

アイデアについては何度もダメ出しし、企画書も例年にないクオリティを学生に求めた。予選落ちするわけにはいかないのである。

今年のプロコン自由部門・課題部門の応募数は多かった。過去最多だったようだ。パソコン甲子園モバイル部門も増えている。

私としてはできる限りの指導をしたのである程度の自信はあったものの予選の結果発表まで緊張の日々が続いた。学生には「この内容で予選落ちるわけがない」と何度も繰り返し言っていたが、これは自分に言い聞かせるために言っていたのかもしれない。

結果、応募した全部門の予選が通過できた。プロコン課題部門が2.7倍、自由部門が3.5倍、パソコン甲子園モバイル部門が2.7倍の倍率であった。予選通過時点で学生はよくやったと思う。が、目標はもっと高いところにあった。

そうそう、予選と言えばパソコン甲子園のプログラミング部門を忘れてはいけないが、これはkagamizへの絶対的な信頼があるので全くといって心配していなかった。kagamizは昨年度、プロコン競技部門と各種競技プログラミングを掛け持ちしてもらっていたが、今年は競技プログラミングに集中してもらった。予選については本人にはそれなりのプレッシャーはあったとは思うが、予選は問題なく通過できた。本当は2チーム予選通過を狙っていたのだが、2年生の実力が今一歩であったことに加え、パソコン甲子園事務局側の「できるだけ多くの学校に本選に出て欲しい」との意思が垣間見える予選結果であった。まあ、これはコンテストを続けるためには必要な大人の事情なので疑義も不満も一切ない。

これからはプロコンの各部門毎に顧問目線での分析を書くことにする。

5.プロコン競技部門

プロコン競技部門の目標は「委員長を表彰台へ」だった。目標を実現するために4年生3人、2年生1人、1年生2人のアサインした。今年のICT委員会としては最強の布陣を敷いた。結果は1回戦敗退、敗者復活勝ち上がり、準決勝敗退だった。惨敗といっていい。原因は「過去の失敗の教訓を活かせず、過去の失敗を繰り返した」の一言に尽きる。 プロコン競技部門は他高専とのプログラムを通した戦いである。その戦いに必要なプログラムを不完全なままで、やっと動作することを確認しただけで本番に臨んだのである。 競技部門はルールを理解して仕様を満たすシステムを作ればよいのではなく、最適なシステムが要求される。そのためには多くの視点からの検討と試行錯誤が不可欠となる。決勝戦の様子から今年の競技部門の最適システムは次のようなものであった。

  • 大のサイコロのみを用いる

  • サイコロ職人をよく訓練する

  • 間違いがあった場合、最小限のコストで修正できる

沖縄高専の戦略はこの全てにおいて間違えていた。

第1の誤り:大と中のサイコロを用いた

沖縄高専はサイコロ一つで1~6までの6つの目に加えて、2と3を90度回転させた状態の2つを加え8つの状態を表現することとした。すなわちサイコロ一つで3ビット表現できることになる。さらに大と中のサイコロを用いることによってサイコロ一つで4ビット表現ができる。従って、大だけのサイコロを用いる場合に比べ、大中のサイコロを使うと同じビット数の情報を表現するサイコロの数が25%少なくて済む。しかし、これには大きな副作用があった。画像認識が困難を極めたのである。

ひとつは大と中の区別の問題である。大と中のサイコロは刻まれている目の大きさが同じであるため、目の大きさだけでは大中の区別がつかない。そこで、画像をエッジ検出しサイコロの大きさを抽出する必要がある。しかし、運営側から事前に提供されたサンプル画像が照明がかなり明るくサイコロのエッジ検出が不可能なものであった。そのため、エッジ検出に頼らない方法での大中サイコロの区別を模索することになった。とはいえ、目の配置や影の位置などを手がかりにしたアドホックな方法をとらざるを得ない。当然100%の認識率にはならない。誤認識の修正は回答室にいるメンバーにゆだねることになる。

もうひとつは影の問題である。パケットは斜め上から照明が当てられるため、大に挟まれた中のサイコロは左右から大のサイコロの影になる。また、大中のサイコロを混ぜて並べたとき中のサイコロの下の部分に隙間ができ、これが影になる。画像処理ではこの影の処理に悩むことになった。2値化処理のアルゴリズムや閾値の調整、形状などから影の除去処理を行ったが、これも完全ではない。結果として、サイコロの目の誤認識につながり、これも回答室メンバーの目視による修正が必要となる。本番においてこの問題によって致命的な結果をまねいた。準決勝戦において競技前の照明の調整が不十分であったため、大サイコロに挟まれて影になった中サイコロがほとんど見えなかった。人間が見ても見分けることができないので画像処理どころではない。その結果、沖縄高専は準決勝で正解文字列長0となり惨敗した。

第2の誤り:サイコロ職人の訓練が足りなかった

沖縄高専はサイコロ職人はミスをしないことを前提にシステムを開発した。開発当初は誤り訂正符号の付加を考慮するなどミスをカバーする仕組みを検討していたが、並べるサイコロの数が増えるため誤り訂正はしないことにした。サイコロ職人は人間であり当然ミスをすることは考えられるが、訓練によってミスを無くすことにした。

当初計画では8月の上旬にシステムが完成し、約1ヶ月間サイコロ職人の訓練をするはずであった。また、この訓練の過程で最適なサイコロの並べ方を模索することを考えていた。

しかし、システムの各モジュールが結合できたのが2週間前。結合後、プログラム上の様々な問題が噴出し、本格的な訓練が可能になったのは1週間前。授業も始まっており、システムの修正をしながらの訓練であったので多くの時間を割くことができず、本番と同じようなリハーサル形式で一日に数回するのが精一杯であった。これでは絶対的に訓練が足りないことは明らかである。

結果として、本番でサイコロ職人がミスをした。ミスをしないことを前提としたシステムなのでこれは致命的であった。

また、サイコロ職人の訓練が少ないことはサイコロの並べ方の検討不足につながる。優勝チームは回答室を無人にし、3人がそれぞれ別のパケットを担当してサイコロを並べていた。沖縄高専は一人がPCに表示されたサイコロの図を見ながらもう一人に並べる目を上にして渡していた。すなわちサイコロを選ぶ人と並べる人に役割分担した。これは、並べるサイコロを大と中にしたのにも起因している。何度かの予行演習で2種類のサイコロを正しく並べるためにはこの方が早かったのである。しかし、大のサイコロだけ使ったら場合など、ほとんど検討しなかった。

第3の誤り:文字列を圧縮した

沖縄高専は与えられた文字列を圧縮することによって並べるサイコロの数を最小限にすることを考えた。これについては多くの高専が取り組んだと想像するが、結果として決勝戦上位3チームは圧縮を用いていなかった。今年の競技部門は圧縮しないシステムの方が正解であったといえるだろう。これは、競技で与えられた文字列が極めて圧縮しにくいものであったことが一つの要因と考えられる。アルファベットの大文字と小文字をランダムにちりばめられていたら圧縮の効果はほとんど望めない。

とはいえ、沖縄高専は文字列圧縮にかなりの力を注いだ。沖縄高専がとった圧縮のアルゴリズムは次のようなものである。

  • Run Length圧縮

最も基本的な圧縮方法ではあるが、同じ文字列が続いた場合には絶大な効果がある。例年の競技の傾向から事務局が100文字の「a」のような文字列を出してくることが予想されたため実装した。

  • 辞書圧縮

今回沖縄高専は基本的には1文字1バイトで表現することにした。事務局から提示された問題文に用いられる文字の種類は86種類。残るの170の文字コード空間を辞書として用いることとした。

たとえば「Asahikawa」を文字コード0xc0に割り当てれば、アルファベット9文字が0xc0の1バイトに圧縮できることになる。しかし、問題の文字列が事前には分からないため、全国高専名、北海道の名産など100以上の辞書を用意し、サイコロの先頭部分に辞書番号を付加することにした。

さらに、文字列を辞書マッチングする際、kagamizに動的計画法を用いるアルゴリズムを考案してもらい実装した。もし、辞書圧縮でバイト数が削減できない場合は、1文字を6ビットまたは7ビットで表現する方式に動的にスイッチできるようにした。

  • アンダーバー圧縮

事前に提示された文字列の例からアンダーバーの使用頻度が最も高いと思われたので、アンダーバーだけを特別扱いし、2ビットで表現するよう工夫した。

  • 差分圧縮

文字列が大文字または小文字のアルファベットの連続が予想されたため、文字コードをそのまま並べるのでは無く、前の文字コードのとの差分で表現することを考えた、こうすることによって4ビット程度で文字が表現できることになる。

  • 動的辞書法

前記のような圧縮をかけた後、最後に動的辞書法によって圧縮した。しかも、単に圧縮するだけでは無く、辞書中に回文があってもよいように独自の拡張もした。

われわれは様々な圧縮アルゴリズムを実装するだけではなく、K高専との文字列圧縮の非公式対戦を通して、かなり高度な圧縮アルゴリズムを実装した。

しかし、結果は前述したように圧縮しない高専が上位を独占したのである。そもそも、今回の競技ではサイコロ職人はミスをするものであり、そのミスを最小限のコストで修正できるシステムが勝てるシステムであった。文字列を圧縮することによってさいころの数を減らし、その結果、制限時間内に多くの文字を送るという戦略そのものが机上の理論だったわけである。文字列を圧縮した場合、サイコロ職人がミスをしたら、そのパケット全体もしくは間違えた文字を起点に再圧縮したものを送ることになる。したがって、圧縮したデータの修正には多くのコストがかかる。その反面、非圧縮の場合、単純にその文字だけを送ればよい。

私自身、プロコンが終わった今だからこそ、このようなことが言えるわけであるが、本当に競技部門で勝つためには何度も試行錯誤しながら正解にたどりつく必要がある。

今回の沖縄高専競技部門のチームは個人の能力は高かった、しかし、個人それぞれの中での最適を追求するあまり、局所解に完全に陥っていた。システム全体を俯瞰し局所的には最適解では無くても、システム全体で最適解を導き出すことができなかった。すなわちチームとして一つの目標に向けて推進する力を欠いていた。沖縄高専は個々の力は決してある方では無い、それゆえチームで総力を挙げて取り組まなければ他高専に勝てない。

沖縄高専としては8回目のプロコン挑戦で会ったが毎年同じことを繰り返している。6年前の津山大会で決勝まで進んだことはあるが、そのときは考えたシステムが偶然に正解に極めて近いものだったに過ぎない。それ以外は、残念な結果を残している。

プロコンが終わる度に反省はしているが翌年には活かしていない。この現状を打破しなければいけない。来年度の課題である。

6.プロコン自由部門

自由部門の結果は特別賞であった。今年は最優秀賞しか見ていなかったので結果として惨敗であった。しかも、企業賞もとれなかった。

今年の自由部門は技術力をアピールするのが狙いだった。しかし、完成したのは実用性や性能面で問題のある中途半端なものにとどまってしまったのが最大の敗因。

開発チームは5年のくま、4年のまるさを中心として、2年生が1人、1年生2人の5人体制をとった。1年生は将来に向けたOJTを目的にチームにいれた。

結果としてチームとしてのパフォーマンスは最悪であった。チームで一丸となっての開発や作業は最後までほとんど見られなかった。軸となるべきくまとまるさはお互いが何をしているのかよく分からない状態であったし、ICTの次世代を担うべき1年生にはほとんど仕事を振っていなかった。2年生に対しては、技術力を高めるためにくまが集中的に指導したが、結果として戦力にはなり得なかった。

スケジュール管理も全くできていなかった。プロジェクト開始時にはまるさがスケジュール管理をしていたが、中盤以降は機能しなくなった。結果として、システム全体が動き始めたのがおよそ3週間前だった。今回のテーマは技術力の高さがウリであるため技術的に解決しなければいけないハードルは高くまた数も多かった。本選3週間前から噴出する様々な課題を解決するにはあまりにも短い。くまの開発力を持ってしても解決できるものではない。また、まるさは夏休み中にインターンシップがあったこともあって、開発にほとんどコミットできていなかった。

今年の自由部門は一言で言えば、くまが個人で作ったシステムをまるさがプレゼンしたに過ぎない。ただ、くまもまるさもこれまで蓄積した技術力と経験があったため何とか特別賞がとれたというのが実態である。今年度はチーム編成も含めて反省の残る自由部門であった。

6.プロコン課題部門

前述したように今年のICT委員会には課題部門を取り組む力が無かった。そこで、私とS先生が卒研指導している5年生に卒業研究としてプロコン課題部門に取り組ませることにした。

これには2つの狙いがあった。ひとつはこれまでプロコンに出たことが無い学生に学外で力を試す場を与え、高専の最終学年にプロコンで頑張ったという自信をもって卒業して欲しいという思いと、もう一つは1年生からプログラミング好きで集まったICT委員会に対してプロコンの場でどの程度の結果が出せるかを見たかったからである。言い換えれば、ICT委員会よりもよい結果が出せるのならば、ICT委員会はその存在意義が問われることになる。

結果は特別賞を受賞した。ICT委員会の自由部門の特別賞と同じであったが、とてもよくやったと思う。

自由部門は5年生4人でチームを編成したが、きちんとチームとして開発をしていた。特に強いリーダーシップをもったリーダーが引っ張ったわけでは無いが、メンバひとりひとりが自分の仕事を自覚し、お互い密なコミュニケーションを欠かさなかった。自分の仕事が終わるとすぐに自分の次の仕事を見つけ出してもくもくとこなしていた。ICT委員会の自由部門とは大違いである。

開発したシステムは非常に完成度の高いものであった。細部までに作り込まれていた。ほんの小さなバグもどんどんつぶしていた。プレゼンや展示ポスターもデザイン含めて高い完成度で仕上げた。

結果が特別賞にとどまったのは、アイデアの限界だったと分析している。やはり「なぜランドセルなのか」に答え切れて無く、ニーズよりもシーズによりすぎていたと言える。もう少しアイデアに時間をかけるべきだったかもしれない。

結果はどうあれ、今回課題部門に挑戦した4名の5年生にとっては、とてもよい経験になったと思う。卒業してから高専の最終学年でのこの経験を活かして欲しいと、卒研指導担当教員として強く希望する。

7.パソコン甲子園にむけて

ICT委員会はプロコンが終わってもまだオフシーズンに入っていない。なっちゃんにはまだ委員長をしてもらっているパソコン甲子園が残っている。

今年はパソコン甲子園にはモバイル部門とプログラミング部門に参加する。

モバイル部門は去年に引き続きグランプリ連覇をめざして副委員長のきっきがモバイル部門のリーダをしている。連覇という重圧に耐えながらモバイル部門のメンバは本選まで残り4日を懸命に頑張っている。今年は本気で連覇を狙っているため、水鉄砲で遊んでいる子供にバズーカを持ち出すぐらい他校に対して圧倒的な差をつける取り組みをしている。1週間後に結果は出るが、これまでの努力は決して裏切ることはないと信じている。

プログラミング部門はkagamizに対して、グランプリとは言わないが受賞することを目標にさせている。kagamizは困難な目標を与えても、そこから決して逃げること無く挑み続けて目標を達成する力がある。必ずや受賞すると信じている。また、今年、kagamizの相方をkagamizみずから1年の部員から選抜した1年生にした。ICT委員会の競技プログラミング力を継承するためである。今年参加する1年生が来年度パソコン甲子園の本選に出場することを願っている。

8.おわりに

今年の沖縄高専ICT委員会の最大の課題は来年度以降の体制作りであった。現在のICT委員会の技術的な主力が4年生であるにもかかわらず、2年生3年生が育ちきっておらず、来年からICT委員会の弱体化が予想されたからである。そのため、今年は例年よりも1年生を多くプロコンに参加させた。その効果が来年からどのように結実するのかは現段階では不明である。パソコン甲子園が終わってから、新委員長とともに検討すべき課題である。

と、顧問目線で勝手なことを書いてきたが、さまざまな課題を抱えているものの今のICT委員会はすごいと素直に思う。委員長のなっちゃんを中心に全国の高専に誇れる活動をしている。多くの困難にぶち当たり、様々な失敗を繰り返し、何度も何度も反省しながら学生は一生懸命取り組んでいる。私は顧問という立場でそれを見守ることしかできない。高専を卒業して何年もたってから、高専で学んだことをよかったと感じ、ICT委員会で頑張ってよかったと感じるように、力を貸すことができれば、教員として幸せである。