[研究報告の目次へ戻る]

山梨大学ソフトウェアコンテスト1999

渡辺 喜道

山梨大学工学部コンピュータ・メディア工学科

nabe@cs.yamanashi.ac.jp

概要

山梨大学に在籍する大学院生を含む全学生を対象に「山梨大学ソフトウェアコンテスト1999」を開催した.コンテストは,ゲームプレイ,テキスト処理,グラフィックス,初心者の4つの部門に分けて行われた.1999年9月24日に課題を発表し,同年12月3日に結果を発表した.参加者は全体で55名であり,当初の予想を上回る参加者数であった.また,優秀な作品も多く大盛況だった.

キーワード:Software, Contest, Software development, Programming techniques

1 はじめに

2000年問題やWebサイトへの不正アクセスなどのソフトウェアに関連する話題が毎日のように聞かれるようになった.2000年問題では大きなトラブルは発生せず問題は起きなかったといえるかもしれないが,ソフトウェアが存在する限り2000年問題と同様な問題は次々とやってくる.また,Webサイトへの不正アクセスからシステムを守るために,セキュリティレベルを高めるようにソフトウェアを修正することが必要となる場合も少なくない.このようにソフトウェアは絶えず進化していく必要があり,急激な変化に柔軟にかつ迅速に対応できる知的高度ソフトウェアが期待されている.保守・運用が容易である高品質のソフトウェアを生産するための技術や生産プロセスの質の向上へのニーズはますます高くなっている.

また,コンピュータ機器の低価格化や高性能化,インターネットの爆発的な普及により,一般家庭で簡単にプログラムを作成できる環境を容易に実現できるようになった.このため,専門家でない一般の人々がプログラムを作る機会が非常に増えた.これは便利なソフトウェアが増えることを間接的に意味しており,大変喜ばしいことである.さらに,山梨大学においては学生の質がますます多様化してきているため,現在のカリキュラムでは自分の持てる力を必ずしも十分に発揮できないような学生の存在が顕在化してきている.このような状況を鑑み,ソフトウェアを作る喜びやソフトウェアの魅力をより多くの学生に伝え,既存のカリキュラムに物足りなさを感じている学生にも充実感を感じてもらうために,ソフトウェアコンテストを開催することとした.コンテストの主催は工学部コンピュータ・メディア工学科であり,後援は(有)シンク情報システム,運営は工学部コンピュータ・メディア工学科内に組織したコンテスト実行委員会という形態で実施した.

2 コンテストの目的

全国各地でソフトウェアコンテストは開催されているが,山梨大学で開催する試みははじめてである.一般に見受けられる多くのソフトウェアコンテストでは,ソフトウェアの芸術的側面に重点がおかれている.つまり,作品の見た目の美しさとか華やかさといった視覚的効果の優劣を競っているコンテストが多い.ソフトウェアのそのような側面も大変重要であるが,今回のコンテストでは,これからますます重要になると思われるソフトウェア開発やプログラミング技法などの技術的側面を審査の対象として実施することにした.具体的な目的を以下とした.

  1. 高度情報社会を担う高度な知識を有する人材の育成
  2. 高品質で高性能なソフトウェアを効率よく開発するための技術の推奨と普及
  3. ソフトウェア開発の魅力のアピール
  4. 学生の知的レベルの向上と活性化

3 コンテストの内容と結果

山梨大学の大学院生を含む学生全体を対象にしたため,応募してくる学生の技術的レベルの差が大きい場合が考えられる.そのため,課題を一種類にすると低学年の学生は敬遠しがちになり,全学生を対象にした意味が薄れる.また,学年に関わりなく得意とする分野を持っている学生もいる.今年度はこれらのことを考慮し,ゲームプレイ部門,テキスト処理部門,グラフィックス部門,初心者部門の4つの部門を設けてコンテストを実施することにした.それらの各部門の特殊性を考慮し,課題発表と成績発表,表彰式以外の日程は部門ごとに独立に設定することとした.

3.1 ゲームプレイ部門

この部門の課題は,「オセロゲームの盤面情報を入力し,次に打つべき手を返す C 言語の関数(プログラム)を作成すること」である.課題自体は比較的簡単で敷居が低いが,強いゲームを作ることは非常に奥が深く,興味深い課題であった.

この部門は以下のスケジュールで実施した.

課題発表9月24日
講習会10月19日
事前競技会10月29日,11月9日,11月19日
解答締切11月30日
競技会12月3日
表彰式12月7日

講習会では,オセロゲームを作る上で参考になると思われるミニマックス戦略の説明と計算の性能追求に役立つと思われる並列化プログラミング技法の説明が行われた.作品の評価方法としては,参加者の間で対戦し優勝者を決める方式を採用した.作品の質の向上のために,本番の競技会の前に3回の事前競技会を開いた.このことにより,他の参加者に関する情報を知ることができ,参加者の意欲が沸き立てられた.

ゲームプレイ部門の参加者は,大学院工学研究科の学生6名と工学部の学生13名の合計19名であり,成績上位の3名は以下であった.

  1. 向山 明夫 君(工学部電子情報工学科3年生)
  2. 船山 健一郎 君(工学部電子情報工学科3年生)
  3. 渡辺 龍宏 君(大学院工学研究科電子情報工学専攻1年生)

第1位の作品は,すべての参加者の作品と対戦した結果,全勝である40勝0敗であった.第2位は33勝7敗,第3位は31勝9敗の成績であった.

第1位の作品の特徴および工夫点を以下に述べる.第1位の向山君の作品では,オセロゲームの局盤を序盤,中盤,終盤の前半,終盤の後半の4つの段階に分けて戦略を立てている.各段階の戦略の概要を以下に示す.

  1. 序盤
    序盤はオセロゲームの定石として知られている約50種類に従い,次に打つべき手を決める.最初から定石に当てはまらなくなるまでを序盤と定義した.
  2. 中盤
    序盤が終ってから残り16手まで中盤と定義した.中盤ではオセロゲームの盤面の状態を予め決めた評価関数によって数値化し,その値をもとにミニマックス法およびα-βカットなどの数理アルゴリズムを用いて,7手先まで読んで次に打つべき手を決める.ここで用いた評価関数を工夫したことにより,よい戦略を立てることができ,結果として全勝というすばらしい成績を収めることができた.評価関数には,(1)確定石の差,(2)次に打つべき手数に関係する情報値,(3)開放度,(4)盤面上の石の数の差の4つのパラメータの重み付き和を用いている.確定石とは,それ以後決して相手の石の色に変化しない石をいう.また,開放度とは,注目する石に隣接する空間上の石の置いてない部分の割合をいう.さらに,各パラメータに付ける重みは,(1)確定石の差が最も高く,その次に(2)の情報値と(3)の開放度の順に高くしている.
  3. 終盤の前半
    残り15手から12手までを終盤の前半と定義した.基本的に終盤では石の数の差をもとに次の手を決める.終盤の前半では,必勝読み切り(ゲーム終了まで読み切るが,最善手ではなく必勝の手が見つかった時点で手の探索を終る方法)を行って次の手を決める.
  4. 終盤の後半
    残り11手から最後までを終盤の後半と定義した.終盤の後半では完全読み切り(ゲーム終了まで読み切り,可能なすべての手の中から最善手を選ぶ方法)を行い,ミニマックス法およびα-βカットを用いて,次の手を決める.

3.2 テキスト処理部門

この部門では,自然言語処理技術の応用として最近注目されている情報検索に焦点をあてた課題とした.具体的には,「毎日新聞社のご厚意により使用が許可された一年分の新聞記事を題材とし,この記事をあらかじめ設定された分野に分類するプログラムを作成すること(文書の自動分類プログラムの作成)」が課題である.自然言語処理技術の応用に関する課題であり,研究的色合いが濃く,やりがいのある課題であった.

この部門は以下のスケジュールで実施した.

課題発表9月24日
講習会WWW上で解答の鍵となるヒントを解説した.
応募期間10月15日〜30日
解答締切11月26日
審査期間11月26日〜12月3日
成績発表12月3日
表彰式12月7日

テキスト処理部門の参加者は,大学院工学研究科の学生2名と工学部の学生3名の合計5名であり,成績上位の3名は以下であった.

  1. 小林 朋幸 君(工学部電子情報工学科4年生)
  2. 古屋 利光 君(大学院工学研究科電子情報工学専攻1年生)
  3. 梅原 雅之 君(工学部電子情報工学科4年生)

第1位の作品の特徴および工夫点を以下に述べる.第1位の小林君の作品では,新聞記事の中に出てくる単語の出現頻度を数え,その特徴と単語の重要度を考慮しながら,記事を分類している.具体的には,機械学習アルゴリズムの弱学習アルゴリズムを鍛える手法であるAdaboosting手法を決定木に適用し,上手に分類している.彼のアルゴリズムの概要は以下である.

  1. まず,訓練用の記事から単語を抽出し,出現頻度の高いn単語を抽出する.
  2. 各記事に含まれる単語の分野別重要度を計算し,n項ベクトルを構成する.
  3. 分野ごとにn項ベクトルの和を計算する.
  4. n項ベクトルを正規化し,その分野の代表値とする.このとき,エントロピーを計算し,正規化に利用している.
  5. 分野の代表値と調べたい記事の値との内積を取り,その結果が最大である分野をその記事に属する分野とする.

3.3 グラフィックス部門

この部門の課題は,コンピュータグラフィックスの重要なアルゴリズムであるレイトレーシング法(視線光線追跡法)をVRML(Virtual Reality Modeling Language)を使って,ポリゴン・ゲーム的な3次元アニメーションのコンテンツとして実現することである.WWWの普及で簡単にコンピュータグラフィックスを作成できるようになっている現状では,ホットな話題であり,自由な発想でプログラミングできる比較的自由度の高い課題であった.

この部門は以下のスケジュールで実施した.

課題発表9月24日
応募期間9月24日〜10月21日
解答締切11月26日
審査期間11月26日〜12月3日
成績発表12月3日
表彰式12月7日

しかし残念ながら,この部門の参加者はいなかった.これは,(1)自由度の高い課題であったため,コンピュータグラフィックスの対象を決定するために多くの時間を要すること,(2)レイトレーシング法を理解する必要があること,(3)Java言語およびVRMLを使えるようになる必要があることなどの原因が考えられるが,課題提出の締切まであまり時間がなかったことが最大の原因であると思われる.

3.4 初心者部門

この部門の課題は,与えられたデータから共通性を見つけて分類する問題であるクラスタリングの問題とした.具体的には,「イタリアの同一地方において,3つの異なる生産者によって作られたワインがあります.個々のワインが持つ13種類の化学的特徴をもとに,あるワインがどの生産者によって作られたものかを分類するプログラムを作成して下さい.」という課題であった.

この部門はプログラミング初心者向きであるため,コンピュータ・メディア工学科1年生および2年生を対象とした.課題の内容はテキスト処理部門と似ているが,特徴データが13個の数値で与えられている点がそれに比較して扱い易い.

この部門は以下のスケジュールで実施した.

課題発表9月24日
講習会WWW上で解答のヒントとなる技術を解説した.
応募期間9月24日〜10月21日
解答締切11月15日
審査期間11月15日〜12月3日
成績発表12月3日
表彰式12月7日

WWW上に公開した講習会では,この課題を解くために有益と思われる方法(ニューラルネットワークによる方法,決定木による方法,KNN法)とキーワードを紹介した.初心者部門の参加者は19名であり,成績上位の3名は以下であった.

  1. 松井 千里 君(工学部コンピュータ・メディア工学科2年生)
  2. 松葉 雄貴 君(工学部コンピュータ・メディア工学科2年生)
  3. 辻  健次 君(工学部コンピュータ・メディア工学科2年生)

第1位の作品の特徴および工夫点を以下に述べる.第1位の松井君の作品では,結果が既知のデータから未知のサンプルのクラスを推定する方法として,パターン認識の分野で知られているKNN法(K Nearest Neighbors法)を使った.アルゴリズムの概略は以下である.

  1. 処理の効率化のために,既知のデータを吟味し,クラス分別の役に立ちそうもない特徴データの項目を削除する.
  2. 既知のデータを吟味し,統計的はずれ値を削除する.
  3. 調べようとする未知のサンプルに最も近いk個のサンプルを選びだし,そのサンプルが所属しているクラスに1票ずつを投じ,全部でk票投じる.
  4. 最も投票数が多いクラスを調べようとする未知のサンプルの所属クラスとする.
  5. 投票数が同じ場合は,未知のサンプルとの距離が最も小さいクラスを所属クラスとする.

4 おわりに

本稿では「山梨大学ソフトウェアコンテスト1999」の実施報告を行った.当初予定していた参加者数を大幅に上回り,活気のあるコンテストとなったと思う.コンテストは継続することが非常に重要であり,今後も続けていくことが大切だと思う.また,工学部関連だけではなく,山梨大学学生全体から参加してもらえるように企画することも重要である.さらに,山梨大学だけではなく,山梨県などの募集対象を拡大し,より充実したコンテストにすることも将来の検討課題である.

謝辞

今回ソフトウェアコンテストを開催するに当たり,後援となり,企画に参加して下さった(有)シンク情報システム様に心よりお礼申し上げます.また,コンテストを円滑に運営して下さったソフトウェアコンテスト1999実行委員会のみなさまに感謝致します.さらに,表彰式においてお世話になった伊藤洋工学部長をはじめ,工学部事務部のみなさん,新藤久和コンピュータ・メディア工学科学科長ならびに工学部コンピュータ・メディア工学科の教職員のみなさんに感謝致します.

参考文献

  1. 谷田 邦彦 : 『図解早わかりオセロ』, 日東書院, 1989.
  2. コンピュータリバーシ研究会 : 『 http://www.comp.reversi.net/doc1.html』.
  3. 高橋英明 : 最新のコンピュータ定石, 『http://www2t.biglobe.ne.jp/~RUN/opening1.html』.
  4. ヨアブ・フロインド,ロバート・シャピリ(訳 安部直樹) : ブースティング入門, 『人工知能学会誌』, Vol. 14, No. 5, 1999, pp. 771-780.
  5. Robert E. Schapire and Yoran Singer : BoosTexter: A boosting-based system for text categorization, http://www.research.att.com/~schapire/publist.html.

[この報告のトップに戻る]

研究報告の目次へ戻る]