SlideShare ist ein Scribd-Unternehmen logo
1 von 33
ICFPProgramming Contest 2009参加記 田中英行
ICFP Programming Contest とは ICFP(関数型プログラミング言語に関する学会)が主催するプログラミングコンテスト チーム人数、使うマシン、使うプログラミング言語、なんでもありの72時間耐久レース
今年の課題 物理シミュレータと達成すべき状態が与えられるので、衛星を操ってそれを達成せよ 課題は4つ 4つ目の課題は24時間目以降に発表 物理シミュレータは独自のマシン語によって記述されている そのマシンのIOのトレースをサブミットする
解く流れ VMを実装する VMとやり取りして目標を達成するためのプログラムを作る サブミットする 改善する 繰り返し
課題1Hohmann 地球の周りを円運動する衛星がある。その衛星をある別の高度で円運動するようにせよ。加速なしで誤差1000m以内で900秒維持せよ。 衛星を動かすには燃料がいる 少ないほどスコアがいい(と書いてあるが、実は逆)
課題1解法 ホーマン遷移 http://en.wikipedia.org/wiki/Hohmann_transfer_orbit エネルギー最小 実装するだけ 微調整が必要?
課題2Meet and Greet 円運動をする衛星を別の円運動をする衛星にぴったりくっつけろ。静止状態で誤差1000m、900秒間維持せよ。 燃料消費、時間消費が少ない方がスコアが高い
課題2解法 (回転方向が同じなら)必要なだけ待ってから、ホーマン遷移すればよい。 ホーマン遷移にかかる時間をシミュレーションで予測(t) 対象の角加速度を計算(ω) 自機と対象の角度が π – ωtになったら出発 回転方向が違う場合 ないことを祈る
課題2解法:図 ωt
課題3Eccentric Meet and Greet 楕円軌道を描く衛星を別の楕円軌道を描く衛星にくっつけろ。静止状態で1000m以内、900秒維持せよ。
課題3解法 楕円軌道->円軌道に遷移 円軌道->目標の楕円軌道に重なる円軌道に”タイミングを計って”ホーマン遷移 楕円軌道->目標の楕円軌道との交点で、目標の楕円軌道に遷移
課題3解法:図 青⇒赤⇒緑⇒黄 の順に遷移
解法3紛糾 …て、こんなもんできるか! 宇宙物理の専門家じゃあるまいに 難しいところ 主にタイミングを合わせるところ 残り時間も少なかったので、別解を考えることにした
課題3:別解 ひたすら追いかける 以上 なんとこれで解けた やけくそになったのが功を奏した
解法3:別解 ただやみくもに追ってもぴったりくっつけられるわけではない 位置とベクトルの両方をぴったり合わせる必要がある 次のような式が良いようだった Δv= (unit (tx-x) * unit (tv-v)) * γ x(tx), v(tv) = 自機の(目標の)座標と速度 γ=距離に応じて変える定数
Intermission LightningDivision終了 課題3は間一髪のところだった 課題4が発表される 月が追加されてnushioさん涙目 無理ゲー臭がそこはかとなく漂う中、いったん睡眠をとることにした。
課題4Operation Clear Skies 地球と、月と、衛星11個と、燃料補給所がある。地球と月にぶつからないように、衛星11個に接近せよ。接近は1000m以内、1フレーム近付けば十分。燃料補給所に接近すると、燃料が満タンまで補給される。しかし、燃料補給所にある燃料にも限りがある。スコアは、なるべく速く多く、燃料消費少なく衛星を回収して回れば高くなる。
課題4方針 まず、適当に考えたもの 一番近い衛星を回収 燃料補給所に帰還 繰り返し 起動の遷移に課題3のものを使う
問題点 だが、うまくいかない 燃料が足りない 自機に積める燃料は10000で、うまくやらないと帰ってくることすらままならない 地球にぶつかる 適当に進んでいるだけでは、地球越しの目標に向かう時にぶつかる
課題3の改良 ほぼ一発で合わせられるようにする 加速する方向を進行方向に限定 三分探索で目標に最接近する加速量を探索 うまくいきそうなのがあれば出発 燃費がかなり良くなる だが、問題点 シミュレーションが正確ではなかったので、近づいてから補正する必要があった
課題4に組み込み これで大体5,6個捕まえられるようになった だが、捕まえてから帰ってこれなくなってくる なんでかわからないまま定数をいじって時間だけが過ぎてゆく… 残すところ数時間となったとき、ついに思いつく
高度調節 この方法での遷移は細長い楕円を経由する これで地球付近の補給所にあてるのは、地球から月にホールインワンするようなもの。これではあてられない。 なら、高度を下げてやればいいだけなのではないか?
高度調節 高度調節自体は、ようするにホーマン遷移っぽいことをすればよい 地球から遠ければそれをするとする
高度調整組み込み これで、燃料のある限り回収できるようになった 4001-4003で10個回収
逆走問題 4004番はほかの衛星が逆走している これはつかまりにくい なら、最初に自機をひっくり返すか 大体うまくいく 最初の宙返りに10000ぐらい燃料を使ってしまうので、9個しか集められなかったが
チューニング 明らかに、衛星にくっつくために、軌道まで合わせるのは燃料の無駄 位置だけ微調整して何とかならないか 時間が足りず、残念ながら何ともならなかった シミュレーション精度さえよければなあ・・・
月へ 月の近くに衛星がある(こともある)ようなので、月に行きたいが、時間も燃料もだめぽ…
終わり 定数をうまい具合にチューニングして、スコアをせこく伸ばして、終了 最終的には、3890ぐらいだった 暫定スコアボードで トップが5171.5322 (pepsiso) 10位が3377.7318
結果 http://icfpcontest.org/scoreboard.php スコア的にはトップ10には入れているかどうかも微妙なライン トップにはぼろ負け 無念…
動画 4001 http://www.youtube.com/watch?v=aTvd99IPRgQ 4002 http://www.youtube.com/watch?v=c19dSxB9Yco 4003 http://www.youtube.com/watch?v=IBO0vnGNRMw 4004 http://www.youtube.com/watch?v=1M255RhBbfM
敗因分析:戦術面 よくなかった点 シミュレーションは実機でやるべきだった すごい遅そうで倦厭していたが、燃料消費を考えると… そうでなければ、リバースエンジニアリングしてとか… は面倒ですけど… 毎回補給基地に帰るという方針 これは上ができてれば自然と改善されていたはずではあるが
敗因分析:戦略面 人的リソースな面 PFIからでるなら、十分に確保できると思ったらそうでもなかった 期間中それだけ考えてくれる人が4人ぐらいは欲しい… 作業分担の面 問題そのものに取り組んでくれる人が少なかった (nushioさんの軌道修正をしてあげるべきだったか)
感想 問題は相変わらずよくできてて、楽しかった 無理ゲーが楽勝になる感覚が3回ぐらい味わえた 主催者は相変わらず期間中にデバッグしてた これはどうしようもないのか 負けたのは悔しい また来年

Weitere ähnliche Inhalte

Was ist angesagt?

【DBDA勉強会2013】Doing Bayesian Data Analysis Chapter 9: Bernoulli Likelihood wit...
【DBDA勉強会2013】Doing Bayesian Data Analysis Chapter 9: Bernoulli Likelihood wit...【DBDA勉強会2013】Doing Bayesian Data Analysis Chapter 9: Bernoulli Likelihood wit...
【DBDA勉強会2013】Doing Bayesian Data Analysis Chapter 9: Bernoulli Likelihood wit...Koji Yoshida
 
胸腔胃-气道瘘:经鼻空肠营养管和胃减压管置入治疗--申
胸腔胃-气道瘘:经鼻空肠营养管和胃减压管置入治疗--申胸腔胃-气道瘘:经鼻空肠营养管和胃减压管置入治疗--申
胸腔胃-气道瘘:经鼻空肠营养管和胃减压管置入治疗--申baiyunguofeng
 
Authoring Tools Comparision in Detail
Authoring Tools Comparision in DetailAuthoring Tools Comparision in Detail
Authoring Tools Comparision in DetailTim Lu
 
gfw工作原理及突破技术
gfw工作原理及突破技术gfw工作原理及突破技术
gfw工作原理及突破技术Daniel Cheung
 
eLearning Manager4U
eLearning Manager4UeLearning Manager4U
eLearning Manager4Uguestd83ce7
 
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~devsumi2009
 
FIT UXER APP 運用遊戲化設計協助非專業健身者養成健身習慣
FIT UXER APP 運用遊戲化設計協助非專業健身者養成健身習慣FIT UXER APP 運用遊戲化設計協助非專業健身者養成健身習慣
FIT UXER APP 運用遊戲化設計協助非專業健身者養成健身習慣NTUST
 
Internet Ued Process
Internet Ued ProcessInternet Ued Process
Internet Ued Processrex song
 
7-Eleven OPEN POINT APP設計
7-Eleven OPEN POINT APP設計 7-Eleven OPEN POINT APP設計
7-Eleven OPEN POINT APP設計 NTUST
 
【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術devsumi2009
 
Taiwan Museum 台灣博物館APP跨渠道體驗設計
Taiwan Museum 台灣博物館APP跨渠道體驗設計Taiwan Museum 台灣博物館APP跨渠道體驗設計
Taiwan Museum 台灣博物館APP跨渠道體驗設計NTUST
 
GIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDGIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDtripodworks
 
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~devsumi2009
 
Cybozu Inc 10th anniversary event - developing section.
Cybozu Inc 10th anniversary event - developing section.Cybozu Inc 10th anniversary event - developing section.
Cybozu Inc 10th anniversary event - developing section.cydn.cybozu.co.jp
 
Несколько шагов
Несколько шаговНесколько шагов
Несколько шаговStitch1678
 
Rsgt2021 cybozu booth_session
Rsgt2021 cybozu booth_sessionRsgt2021 cybozu booth_session
Rsgt2021 cybozu booth_sessionKazuhiroNiwaya
 

Was ist angesagt? (19)

Tips th
Tips thTips th
Tips th
 
EclipSky200712
EclipSky200712EclipSky200712
EclipSky200712
 
【DBDA勉強会2013】Doing Bayesian Data Analysis Chapter 9: Bernoulli Likelihood wit...
【DBDA勉強会2013】Doing Bayesian Data Analysis Chapter 9: Bernoulli Likelihood wit...【DBDA勉強会2013】Doing Bayesian Data Analysis Chapter 9: Bernoulli Likelihood wit...
【DBDA勉強会2013】Doing Bayesian Data Analysis Chapter 9: Bernoulli Likelihood wit...
 
胸腔胃-气道瘘:经鼻空肠营养管和胃减压管置入治疗--申
胸腔胃-气道瘘:经鼻空肠营养管和胃减压管置入治疗--申胸腔胃-气道瘘:经鼻空肠营养管和胃减压管置入治疗--申
胸腔胃-气道瘘:经鼻空肠营养管和胃减压管置入治疗--申
 
Authoring Tools Comparision in Detail
Authoring Tools Comparision in DetailAuthoring Tools Comparision in Detail
Authoring Tools Comparision in Detail
 
gfw工作原理及突破技术
gfw工作原理及突破技术gfw工作原理及突破技术
gfw工作原理及突破技术
 
eLearning Manager4U
eLearning Manager4UeLearning Manager4U
eLearning Manager4U
 
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~
 
FIT UXER APP 運用遊戲化設計協助非專業健身者養成健身習慣
FIT UXER APP 運用遊戲化設計協助非專業健身者養成健身習慣FIT UXER APP 運用遊戲化設計協助非專業健身者養成健身習慣
FIT UXER APP 運用遊戲化設計協助非專業健身者養成健身習慣
 
Internet Ued Process
Internet Ued ProcessInternet Ued Process
Internet Ued Process
 
7-Eleven OPEN POINT APP設計
7-Eleven OPEN POINT APP設計 7-Eleven OPEN POINT APP設計
7-Eleven OPEN POINT APP設計
 
【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術
 
Taiwan Museum 台灣博物館APP跨渠道體驗設計
Taiwan Museum 台灣博物館APP跨渠道體驗設計Taiwan Museum 台灣博物館APP跨渠道體驗設計
Taiwan Museum 台灣博物館APP跨渠道體驗設計
 
GIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDGIGAPOD OFFICEHARD
GIGAPOD OFFICEHARD
 
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
 
Cybozu Inc 10th anniversary event - developing section.
Cybozu Inc 10th anniversary event - developing section.Cybozu Inc 10th anniversary event - developing section.
Cybozu Inc 10th anniversary event - developing section.
 
Cellphone
CellphoneCellphone
Cellphone
 
Несколько шагов
Несколько шаговНесколько шагов
Несколько шагов
 
Rsgt2021 cybozu booth_session
Rsgt2021 cybozu booth_sessionRsgt2021 cybozu booth_session
Rsgt2021 cybozu booth_session
 

Andere mochten auch

C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみたfirewood
 
2015 lodc&UDC ゴミ多言語変換用データ基盤
2015 lodc&UDC ゴミ多言語変換用データ基盤2015 lodc&UDC ゴミ多言語変換用データ基盤
2015 lodc&UDC ゴミ多言語変換用データ基盤Takuya Yamagata
 
Streaming data processing ライブラリの紹介 (主に Conduit)
Streaming data processing ライブラリの紹介 (主に Conduit)Streaming data processing ライブラリの紹介 (主に Conduit)
Streaming data processing ライブラリの紹介 (主に Conduit)krdlab
 
Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦Preferred Networks
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミングnagoya313
 
Yesodを支える技術
Yesodを支える技術Yesodを支える技術
Yesodを支える技術Hiromi Ishii
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
 
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」Preferred Networks
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
アーキテクチャ主導の情報システムへ
アーキテクチャ主導の情報システムへアーキテクチャ主導の情報システムへ
アーキテクチャ主導の情報システムへKent Ishizawa
 
大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦いYuto Komai
 

Andere mochten auch (20)

手書きスライド
手書きスライド手書きスライド
手書きスライド
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
Xpath in-lens
Xpath in-lensXpath in-lens
Xpath in-lens
 
Monad tutorial
Monad tutorialMonad tutorial
Monad tutorial
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
2015 lodc&UDC ゴミ多言語変換用データ基盤
2015 lodc&UDC ゴミ多言語変換用データ基盤2015 lodc&UDC ゴミ多言語変換用データ基盤
2015 lodc&UDC ゴミ多言語変換用データ基盤
 
Streaming data processing ライブラリの紹介 (主に Conduit)
Streaming data processing ライブラリの紹介 (主に Conduit)Streaming data processing ライブラリの紹介 (主に Conduit)
Streaming data processing ライブラリの紹介 (主に Conduit)
 
Digital Signature and PKI
Digital Signature and PKIDigital Signature and PKI
Digital Signature and PKI
 
Ppl
PplPpl
Ppl
 
Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミング
 
Yesod勉強会
Yesod勉強会Yesod勉強会
Yesod勉強会
 
Yesodを支える技術
Yesodを支える技術Yesodを支える技術
Yesodを支える技術
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
アーキテクチャ主導の情報システムへ
アーキテクチャ主導の情報システムへアーキテクチャ主導の情報システムへ
アーキテクチャ主導の情報システムへ
 
Sql world とは
Sql world とはSql world とは
Sql world とは
 
大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い
 

Icfp2009