eccomp2020
進化計算コンペティションは,進化計算の実応用と産学交流を促進するために,2017年に始まった最適化コンペティションです.過去3年のコンペティションでは,現状の進化計算の主な応用先である製造業や航空宇宙分野における連続最適化問題を出題してきました.
今回は,進化計算の新しい応用先を開拓する目的で,ゲーム業界における『ゲームを楽しくする乱数の設計問題』を取り上げます.通常,ゲームに使われる乱数はメルセンヌ・ツイスターやXorshiftなどのごく一般的な方法で生成します.しかし,これらの数学的には偏りの小さいはずの乱数が,ゲームのプレイヤーにとっては偏っているように(時には恣意的に操作されているようにさえ)感じられ,強い不満をもたらすことがしばしばあります.人間は確率的な事象に対して様々なバイアスをもっていることが知られており,偏りのない乱数は人間にとってむしろ偏っているように感じられるのです.そこで今回のコンペティションでは,いかにしてプレイヤーにとって偏りのないように感じられる(実際には偏った)乱数を設計できるかを競います.進化計算コンペティション初の組合せ最適化問題です!
お知らせ
$ pip install -U opthub-client-cli$ pip install -U opthub-client-clievaluation_errorに,スコア計算時のエラーはscoring_errorに格納されます.| イベント | 日時 | アナウンス |
|---|---|---|
| Webサイト公開 | 2020年10月19日(月)20:00 | 本ページ |
| チュートリアル問題公開 | 2020年10月19日(月)20:00 | こちら |
| コンペティション問題公開 | 2020年10月23日(金)18:00 | 本ページ |
| 競技開始 | 2020年10月30日(金)20:00 | 本ページ,進化計算学会ML |
| 競技終了 | 2020年12月16日(水)23:59 | 本ページ |
| 結果発表 | 2020年12月19日(土)午前 | 進化計算シンポジウム2020(Zoom開催) |
結果発表に参加するためには,進化計算シンポジウム2020へのお申込みが必要です.詳しくは進化計算シンポジウム2020のページをご覧ください.
どなたでも無料で参加できます.
今年からオンラインでの競技方式に変わりました.こちらのチュートリアルにしたがって,所属組織のメールアドレスでアカウントを作成してください.
==9月の進化計算学会研究会のハンズオンに参加された方へ
ウェブサイトの正式公開に伴い,ハンズオンで使用したアカウントは削除させていただきました.また,クライアントをアップデートしました.ハンズオンに参加された方も,改めてチュートリアルをプレイしていただきますようお願いいたします.==
コンペティションは単目的部門と多目的部門に別れており,各アカウントはいずれか一方または両方の部門に参加することができます.それぞれの部門には,問題を解くことで参加したとみなされます.1つの部門は複数の問題からなり,参加した部門のすべての問題を解く必要があります.
1人で参加することも,複数人が1チームとして参加することもできます.1チームの人数に制限はありません.チームで参加する場合は,代表者を1人決めて代表者がアカウントを作成してください.1人の参加者が複数のチームに所属することはできません.ただし指導教員は禁止事項に違反しない範囲で複数のチームにアドバイスできます.Q&Aもご覧ください.
以下に違反した場合は失格となります.
| 時間 | 内容 | 発表者 |
|---|---|---|
| 09:00--09:05 | 開催趣旨の説明 | 濱田 直希(KLab株式会社) |
| 09:05--09:20 | 乱数設計問題の説明 | 於保 俊(KLab株式会社) |
| 09:20--11:30 | 参加者からのプレゼン(1件10分) | 各参加者 |
| 11:30--12:00 | 結果の総括およびディスカッション | 濱田 直希(KLab株式会社) |
単目的部門・多目的部門のそれぞれに複数の賞を用意します.受賞者には進化計算学会から表彰と,KLab株式会社様から賞品がございます.詳しくは後日発表いたします.
KLab株式会社様より優勝賞品をご提供いただきました.
KLab株式会社の於保です。
今回の進化計算コンペティション2020では、出題原案のアイディア提供と協賛というかたちで当社が関わらせていただいております。どうぞよろしくお願いいたします。
さて、今回の問題ですが、これまでとはかなり趣の異なるものではあるのかなと思います。せっかくなのでこの問題ができた裏話を少しお話ししようかと思います。
今回の問題の元になったアイディアは、私が10年ほど前に仕事でソーシャルゲームの運営をしていた時に遭遇した課題がきっかけです。詳しいことは諸事情によりあまりお話しできないのですが、ざっくり言うとユーザー体験を向上させるためにそれまで手作業で作成していた乱数のもとになるデータを、遺伝的アルゴリズムを活用して計算するツールの開発をして解決したというものでした。
この事例を弊社の濱田に話したところ、実はこういった課題は私の手がけた事例に限らず多くのゲームに現れるものであり、既存の研究とも繋がりがあるとわかったため、今回のコンペティションに出題することにしました。当時片手間に考えたことがこんなにも大きな広がりを持っていたのかという驚きと、そこまで至らなかった過去の自分に少しの悔しさを感じています(笑)。ゲームの中でつかわれる乱数は、それぞれのゲームの「ゲーム性」に非常に密接に関わる部分でもあり、ここでの知見が新たな応用に結び付く可能性があるとも言えると考えています。
ゲームというと一般的には遊びのコンテキストで捉えられ、たかが遊びと思われがちですが、実際のところ現代のゲームは、皆さんが想像している以上に巨大なテクノロジーの集大成となっています。例えば、今回のテーマになっている乱数はもちろん、写実的な画面表示に関わる数学や、敵味方のAIの仕組み、物理計算や効率的な探索アルゴリズムやデータ構造、データの圧縮や暗号化、チート対策などのセキュリティなど、数学とコンピュータサイエンスのオンパレードです。また、ユーザーの行動などの様々な情報が、リアルタイムにデータ化されていることも面白いところだと思います。
今回のテーマをきっかけに、研究対象としてのゲームの魅力に気付いていただけたら、非常にエキサイティングだと思いますし、それによってさらにゲームの可能性が広がることが楽しみです。きっと我々現場の開発者は気付いていないだけで、もっと面白い課題が埋もれているはずです。
今回のコンペでは是非、ゲームのように楽しんで問題に取り組んでいただければと思いますし、皆さんの知的好奇心を満たし、新たな知見と広がりを見出すきっかけになれば幸いです。
2020年11月11日 KLab株式会社 エンジニアリングマネージャー 於保 俊
単目的部門・多目的部門それぞれ部門ごとに総合順位を決定し,総合順位の上位者を表彰します.
総合順位は,各部門16問の順位の総和(小さいほど良い)で決定します.問題ごとの順位は,単目的部門では目的関数の最小値,多目的部門ではHypervolumeの最大値で決定します.
A. どんな方法で解いても構いません.人力でいくつか解を送って様子をみたり,応答曲面を構築したり,途中でソルバーを打ち切って再スタートすることもできます.ホワイトボックスな関数については,ローカルでプログラムを組んで好きなだけ評価しても構いません.要するに,禁止事項に抵触しない限りは何でもアリです.もし判断に迷うことがあれば,お問合せ先までご質問ください.
A. 今年のコンペは一定の評価回数で競うため,一度送信したデータを取り消すことはできません.チュートリアル問題で十分にテストしてから本番の問題を解くようにしてください.
A. 一度送信したデータはサーバに記録されており,opt list solutionsコマンドで取得できます.しかし,ソルバーを同じ状態から再開するためには,ソルバーの状態変数や乱数種なども復元する必要があるはずです.これらはご自身で定期的にファイルに保存するなどして,突然のトラブルに備えてください.
A. 参加できます.代表幹事以外の委員は,問題を解くうえで有利になるようなインサイダー情報は知ることができません.そのため,運営に関わる教員やその学生であっても,一般参加者と同じ公平な条件で参加できます.
A. 教員は指導目的で複数のチームにアドバイスできるものとします.ただし,お互いのチームのデータを教えないようにしてください.アドバイスの内容も,個々のチームのデータだけから分かることに限定してください.
A. 競技期間終了後に削除できます.お問合せ先までご連絡ください.なお,アカウントを削除すると,そのアカウントで送信したデータも削除されます.
A. 複数の問題に同時に解を送信することもできますし,同じ問題に複数の解を同時に送信することもできます.並列数に上限はありません.解はサーバに登録された順番に評価されます.解を並列に送信するには,以下のような方法があります.
opt submitコマンドを実行する.opt submitコマンドをバックグラウンド実行する.opt submitコマンドに--no-waitオプションを指定する.この場合,サーバでの評価・採点を待たずにコマンドが終了します.評価・採点の結果を取得するには,しばらく待ってからopt list solutionsコマンドを実行します.A. Windowsのコマンドプロンプトでは,コマンドの長さが8192文字までに制限されています.コマンドラインに解を直接記述するとこの制限をオーバーしてしまいます.そのため,解をファイルに保存して,ファイル経由で送信する必要があります.
Pythonの例:
import json
from subprocess import check_output
def evaluate(x):
with open("solution.json", "w") as f:
json.dump(x, f) # Write a solution to the file
stdout = check_output("opt submit --match=3 --solution=solution.json", shell=True) # Submit the solution
y = json.loads(stdout.decode("utf-8")) # Convert a JSON string into dict
return y
if __name__ == "__main__":
x = "12345123451234512345123451234512345123451234512345"
res = evaluate(x)
print(res)
進化計算学会 実世界ベンチマーク問題分科会
eccomp2020@googlegroups.com
主催者
jpnsec
ID
eccomp2020