ICFP 2008レポート:チームライバ

他の多くのAdeptレポートに触発されて私たちはICFP 2007に参加し、4位になりました。 昨年の印象は最もポジティブであり、今年はわずかに異なる構成ではありましたが、再び集まりました。 今回も多くの喜びを受け取り、全体としてタスクに対処しましたが、会議を待って少し良いことを見つけることが残っています:)





左から順に:適応グリッド、パスグラフ、軌道



機能プログラミングコンテストに関する国際会議が何であるか、それがどのように進むのか、今年の課題は何であるかを知らない人のための優れた紹介です。



チームについて少し。



チームryba ICFP 2008クルー(アルファベット順:)

マイク・アイザツキー

アレクセイ・ゴパチェンコ

マキシム・モッシエンコ

ローマン・シェフチェンコ



私たちは皆、最高のツールはあなたが最高のものを所有していることが証明されたツールだと考えています。 たまたま私たちにとってJavaだったので、特にICFP 2007の経験を考慮すると、言語を選択する問題は発生しませんでした。



昨年と同様、ローマが私たちを集めました。 個人的に、私は非常に徹底的に準備しました-私は非常に始まりの15時間前に寝ました%)前回の結果に基づいて、正しい結論が下され、私たちは1日8時間以下で仕事をすることに同意しました-可能であればすべて同時に 場所も確認済みで選ばれました-JetBrains office。 Mikeを除く全員がWinXPでワークステーションを使用し、後でLiveCDでVMWareサーバーを使用しました。 Mikeは、Mac Book Proとネイティブサーバーが利用可能になり次第、それを使用しました。 開発環境はもちろんIntelliJ IDEAです。



初日(金曜日23:00-土曜日04:30)



競技中、Romaは競技ウェブサイト、メーリングリスト、および手続き(スクリプト、パッケージング、ヘルスチェック、結果の送信)の順守を監視しました。 また、事前にLiveCDをダウンロードして確認し、プロジェクトのSubversionリポジトリを準備しました。



課題が公開されるとすぐに、私たちは10分間読書を始めました。

ボードの近くでの5分間のブレインストーミングセッションの結果:



マイクは地図上のパスを検索する方法を正確に知っており、すぐに続行します

すべてをできるだけ早く攪拌する必要があります

書き込みおよびリンクコンポーネント:着信/発信メッセージ、ワールドモデル、パス検索、タキシング、視覚化

シンプルなサーバーシミュレータが必要です-なぜなら 主催者がいつ投稿するかはわかりません



マイクのソリューションでは、可能なパスのグラフを作成し、 ダイクストラのアルゴリズムを使用して最短を見つけました。 グラフはグリッドセルの中心に構築されます。グリッドセルは、象限に適応再帰分割することで得られます%)書き込みとチェック(グラフ用紙とペンを使用して:)マイクはこれを1〜2時間かけて行いました。



一方、Maxは最も必要なTelemetry、Obstacleなどのオブジェクトからプロトコルをすばやく作成します。 Romka-ローバーが世界をどのように見ているかを視覚化することで、サーバーの実装を考慮してマップの読み込みを開始しました。 時間を無駄にせず、プロジェクトに負担をかけすぎないように、 www.json.org / javaのコードを使用しました 。 すぐに目標を達成しました。マップをアップロードし、Maxによって記述された基本オブジェクトで世界の表現を構築し、Romkaがこれをすべてペイントしてくれました。 サーバーはまだありません。これがマップを表示する唯一の方法です。 サンプルカードが非常にシンプルで非常に似ており、ローバーと火星人のパラメーターが同じであることを残念に思います。



これで、マイクは区画をテストし、実際の地図上の方法を検索できます。 テッセレーションの作業をすばやく評価する最良の方法は視覚的であり、マイクは対応するコードをビジュアライザーに追加します。 この時点で、初めて、上図のようなものが表示されます。 検索が正しく機能していることをすぐに確認できます。詳細を調整し、最大のパフォーマンスを達成するだけです。 思考の糧(およびより便利なツール)を受け取ったマイクは、再びコードを掘り下げます。



勇気を出して物理をシミュレートしたように、モデルサーバーが利用可能になりました。 Maxはコードをネットワーク化する準備ができていたので、LiveCDを拾い上げ、忍び寄る火星人を見ました。 すべてがどのように機能するかを見て、私たちはシミュレーターを必要としないことに決めました。 時間通りに:)



「単純な」デューティサイクル、1テレメトリ=> 1コマンド(直接加速)を簡単にスケッチしました。 開始し、サーバー上でローバーがどのように素早く前進し、壁や石から跳ね返るのかを魅了します。



物理学は非常に合理的であり、火星人は驚くほど馬鹿だと結論付けています。 それにも関わらず、計画通り、グラフにはすべての火星人を「一時的な」障害物として含めます。



一方、競技開始から6時間が経過しました。 私たちはよく眠り、明日15:00に開始して解散することに同意しました。



一日の終わりには次のことができます。

サーバーに接続してメッセージフローを解析する

愚かな前進:)

マップを通行可能/禁止ゾーンのグリッドに分割します(簡単にするために、ここでは障害物の周りの正方形について説明します)

迷路を含む地図上に最短経路を構築します



2日目(土曜日16:00-日曜日03:00)、ライトニングラウンド



最初に登場したので、実際の到着に進みます。テレメトリを聞き、内部マップとローバーのステータスを更新します。 その後、ローバーの現在の位置からテレメトリ処理サイクルまでの現在のマップ上のパスの計算をオンにします。 私の(非常に強力な)マシンでは「リアルタイム」で時間がなく、遅延が累積していることがわかります。 マイクが計算が大幅に加速することをすぐに警告したという事実を考えると、私はそれに注意を払わないことにしました。



私は徐々にクライアントに地図が表示されるのを見ています、火星人は通り過ぎています。 ラウンドの終了とスコアを処理します。 しばらくの間、火星人が1つずつローバーに突入する様子を観察します。 Romkaは引き続き視覚化に取り組んでいます。



次に、Windowsでの開発の快適さを大幅に向上させる方法を思い付きました。サーバーをループで起動します。 サーバーmap.wrldを実行します。 完了-この方法では、いつでもクライアントを起動し、サーバーコンソールに気を取られることなく作業を見ることができます。 後で私はそこにsvnを追加し、マップを便利かつ迅速に変更する機会を得ました。



マックスがやって来て、私たちはステアリングを学ぶ時だと判断しました。 ここで、私たちは完全に三角法を忘れていたことがわかります:(私はこの恥を説明しません...一般的に、基本的な三角関数の定義を読み直している間、後半のマイクが登場し、ベクトルの擬似スカラー積の助けを借りて全員を救いました:)さらに、彼はコードを最適化し、既に新しい方法で検索されています。



すべての部品を組み立てるとすぐに、ローバーはすぐに基地に到達し始めました。 時々彼らは管理に対処できませんでした 遠隔制御システムの可変遅延を考慮していませんでした。



テレメトリ計算の問題を考慮に入れました



サーバーが古いステアリング位置を送信できるという事実を考慮に入れました



22:00までにテストカードで非常に安定した結果が得られ、LiveCDを微調整してチェックした後、コードをリグニングラウンドに送信しました。



1〜2時間、コードを試し、何をどのように改善するかを話し合い、最終的に休息を余儀なくされました。



3日目(日曜日16:00-月曜日03:00)



レイテンシー、最適化



4日目(月曜日13:00-23:00)



はい、私たちのスケジュールのために、私たちは4日間を取りました:)その日は3人でした-マイクは私たちに参加できませんでした。



まず、火星人を経路探索マップから除外することにしました。 彼らはいつも高速で逃したので(これは不思議ではありません)、私たちは最後の瞬間に道路に沿ってかわすことに決めました。 これにより、新しいオブジェクトが表示された場合にのみパスを再計算できました。



チューニング

最大-速度検出



おわりに



はい、タスクは前の年とは非常に異なっていましたが、私たちはそれが十分に面白いことがわかりました。 はい、準備は明らかに私たちを失望させましたが、特に私たちのチームは何の障害も満たしていませんでした。 グラフィックスはありませんが、サーバーを勝利に導く方が便利でしょう。 テストデータがほとんどなく、私の成功を評価する公式な方法が完全に欠けているという事実は、本当に好きではありませんでした...



かっこいい

コロケーション

スケジュール



あそこ

安定したモジュールインターフェース

チューニング結果の統計

他の戦略への切り替え



リンク集



チームは公式プロジェクトについて報告します。cecs.pdx.edu/〜jgmorris / icfpc08 / index.cgi / wiki / TeamPages wiki

記事habrahabr.ru/blog/icfpc/46589.html



All Articles