勝者アルゎリズムAIチャレンゞ2011Ants

最近完了したAIチャレンゞの勝者のメモの翻蚳があなたの泚意を喚起し、アルゎリズムの䞀般的なポむントずいく぀かの技術的な詳现を明らかにしたす。 ゜ヌスコヌドを自分で怜査するこずもできたす。



勝ったずは信じられたせん。

そしおさらに、私が決定的に勝ったずは信じられたせん。



私はプログラミング競技が倧奜きで、私にずっおこれたでで最倧か぀最も刺激的なものでした。 数ヶ月間のコンテストの䞻催者、アシスタント、tcpサヌバヌホスト、およびすべおのプレむダヌに感謝したす。



これは私のゲヌムの䟋です aichallenge.org/visualizer.php?game=346288&user=4513  これは著者が圌の蚘事で匕甚したゲヌムではありたせん。著者のサヌバヌに盎接保存されおいるため、リンクを付けるこずはできたせん。 -箄Transl。  。 この蚘事では、私のコヌドが䜕をするのか、そしおそれがどのように成功するのかを説明したいず思いたす。 倚くの技術的なポむントがあり、䞀般にこの蚘事は戊略そのものに関するものではありたせんが、より簡単に説明しようずしたす。



コヌドに぀いお

Javaスタヌタヌパックをダりンロヌドし、ファむルの名前を倉曎し、䞍芁なものをすべお削陀し、新しいStrategy



クラスを远加するこずから始め、すぐにアリを衚すクラスも必芁になるこずに気付きたした。 私はすべおのコヌドをStrategy



クラスで䜜成したした。その結果、玄1800行のコヌドが䜜成されたした。 たた、興味深いのはAnt.java



ずTile.java



、どちらもTile.java



のフィヌルドを持぀倀オブゞェクトです。



私はスタヌタヌパックからアむデアを残したした。このパックでは、䞍明な領域がデフォルトで地面ず芋なされおいたした。 ボットの芖野を蚈算しなかったため、どの现胞が実際に地球であり、今たで芋たこずのない现胞であるかさえ知りたせんでした。



マップの各セルには、ゲヌム党䜓で䜿甚されるタむルのむンスタンスが1぀だけありたす。 アリは、すべおの私のアリず敵のアリの各タヌンの開始時に䜜成されたす。



自分で゜ヌスコヌドを芋たい堎合は、知っおおく必芁がありたす。govnokodaでいっぱいであり、私は特に誇りに思っおいたせん。 ただし、おそらく䜕らかの圢で芋たいので、 ここからダりンロヌドできたす。



戊略の実斜

倚くの人がいく぀かの䞀般的な戊略に぀いお話したしたが、残念ながら、私はそれを持っおいたせん。 私は、アリの数や占領地の割合に基づいお決定を䞋したせん。 ボットは勝ち負けおも戊術を倉えたせん。 圌はそれに぀いお党く知りたせん。 さらに、私は今の動きを芋おいないし、最初はすべおが999番目ずたったく同じように起こる。 私は、戊闘䞭であっおも敵を区別せず、蟻塚の性質を保存したせん。 ミッションの助けを借りお蟻塚からアリを送るこずに加えお、各動きはアリのロヌカル環境のみに䟝存したす。



では、毎タヌン正確に䜕が起こるのでしょうか すべおの初期化ず事前蚈算の埌、次のメ゜ッドをこの順序で呌び出したす。 以䞋では、これらすべおの方法が䜕をするのかを説明したすが、芁するに、特定の基準に適合するアリを単に移動させるだけです。 アリが移動するず、これに関する情報が即座にサヌバヌに送信され、アクションを取り消すこずはできなくなりたす。



ワむド怜玢

ここでは、䞀般にBFSを取埗する方法に぀いお説明したす。 パフォヌマンス䞊の理由から、各タむルには隣接するセル氎を陀くがあるため、2次元配列にアクセスしお、rowsおよびcolsプロパティを䜿甚する必芁はありたせん。  これにより、パフォヌマンスが倧幅に向䞊するこずは疑わしい-およそTransl。 兞型的なBFSおよびそれらの倚くを䜿甚は、次のようになりたす。

 LinkedList<Tile> openList = new LinkedList<Tile>(); LinkedList<Tile> changedTiles = new LinkedList<Tile>(); openList.add(foodTile); foodTile.dist = 0; foodTile.isReached = true; changedTiles.add(foodTile); while (!openList.isEmpty()) { Tile tile = openList.removeFirst(); if (tile.dist >= 10) break; for (Tile n : tile.neighbors) { if (n.isReached) continue; if (n.type == Type.MY_ANT) { // found one of my ants at the tile n } n.isReached = true; n.dist = tile.dist + 1; changedTiles.add(n); openList.add(n); } } for (Tile tile : changedTiles) tile.isReached = false;
      
      





この䟋では、foodTileから始めお、10ステップで到達可胜なアリを探したす。 HashMapを䜿甚しお既にアクセスしたセルを保存する方が効率的である堎合は、最埌にルヌプを取り陀くこずができたす。



コヌスの初期化

各移動の開始時に、近くにいる「友人」の数や近くの敵のリストずそれらたでの距離など、アリのあらゆる皮類の比率をカりントしたす。 ここでの距離はナヌクリッドずマンハッタンの䞡方であり、BFSのステップ数によっお考慮されるため、これは少しわかりにくいです。



敵たでの距離に応じお、アリには間接的な可胜性がある危険があるかどうかを瀺すフラグがありたす。 敵の堎合、孀立しおいるかどうか぀たり、近くに他の敵アリがあるかどうかを確認したした。



初期化䞭に実行される別のタスクは、数回の移動で移動しおいない敵アリを識別するこずです。 そのような動きの数が5に達した堎合、さらに次の動きに立぀ず想定されたした。



研究ずミッション

蟻を蟻塚から遠ざけ、新しい領域を探玢し、実装で可芖領域を最倧化するこずは、互いに非垞に密接に関連しおおり、おそらくこれが私のボットの動䜜で最も重芁な郚分です。



リサヌチ

ExploreValueは、マップ䞊の各セルに保存されたす。このセルは、少なくずも1぀のアリず10タヌンでBFSで到達できない堎合、1タヌンごずに増加したす。 セルに到達できる堎合、カりンタヌはれロにリセットされたす。 したがっお、exploreValueは、セルで䜕が起こっおいるのかわからなかった時間の尺床です。



したがっお、探玢方法では、別のタスクに䜿甚されなかったすべおのアリから、最倧深さ11ステップでBFSが起動されたすが、最埌のステップのみに関心がありたす最初の10個のexploreValueは0であるこずが保蚌されおいるため。 ステップ11で到達可胜なすべおのセルのexploreValueがれロの堎合、これはアリが「自分自身」たたは氎に囲たれおいるこずを意味したす。 それ以倖の堎合、ステップ11のexploreValue合蚈が最倧になる方向にアリを移動したす぀たり、10ステップで入力するセルから到達可胜なすべおのセルのexploreValue合蚈。 2぀の異なる最初のステップを実行するこずで11ステップで任意のセルに到達できるため、BFSでは1぀たたは2぀の最初の動きのリストが保存されたす。

このようにしお、地図を探玢し、すべおのサむトを衚瀺したす。



ミッション

では、アリが自分のアリに囲たれおいるずしたらどうでしょうか もちろん、境界線に移動したす 境界線のより正確な定矩はcreateAreasメ゜ッドにあり、これに぀いおは埌で詳しく説明したす。 囜境に移動するこずをミッションず呌びたす。 ミッションは、アリず囜境の暙的现胞の2぀だけで構成されおいたす。 ミッションは、移動の間に保存されるいく぀かのデヌタの䟋ですが、目暙ぞのパスは毎回A *でカりントされたす。 アリがすでにミッションを持っおいる堎合、それはそれを実珟し続けたす。そうでなければ、新しいものが䜜成されたす。 アリにミッションがあったが、それが他の目的食物収集、戊闘、防衛に䜿甚された堎合、ミッションはキャンセルされたす。



土地ず囜境

createAreasメ゜ッドは、マップをセクションに分割したす。 今回は別のBFSを実行したすが、今回はすべおのアリ敵を含むから同時に実行したす。 開始時に、各アリには独自のプロットがあり、ラりンドトリップ䞭に到達したすべおのセルがそれに結合したす。 しかし、1人のプレヌダヌに属するセクションが衝突するず、それらは1぀の倧きなセクションにマヌゞされ、その埌、䜕床もマヌゞできたす。 BFSの埌、自分の゚リア内のすべおのセルを調べ、少なくずも1぀の隣接セルが別の゚リアに属しおいる各セルを境界セルず芋なしたす。 このBFSでは、私は20の動きよりも深くは行かないため、39歩の距離にある2぀のアリは、それらの間に霧がかかっおいおも同じ゚リアにいたす。 これにより、明らかに自分に属しおいる領域に突然の境界線がないこずが保蚌されたす。 境界セルは、アリず敵から等距離にあるか、アリから20歩離れたセルであり、敵が芋えないこずがわかりたす。 2番目のケヌスでは、境界セルが今たで芋たこずのない氎の䞊にあるこずが刀明する堎合があり、氎を怜出するずすぐにミッションを削陀したす。



ミッションを䜜成するずき、境界セルの1぀をタヌゲットずしお遞択する必芁がありたす。 アリが私の蟻塚の䞊に立たない堎合、境界セルが遞択され、そこぞ行くのが最も速くなりたすBFSを䜿甚しお決定されたす。 それ以倖の堎合、タヌゲットセルは、このセルの近くにある自分のアリず敵のアリの数の比率、敵の蟻塚たでの掚定距離、近くのセルに行くミッションをすでに持っおいるアリの数、およびそこに着くたでにかかる時間を䜿甚する耇雑な匏によっお決定されたすそこに着く...さあ、冗談です:)これは偶然に決定されたす。 絶察に偶然。 このように

 target = area.border.get(turnRandom.nextInt(area.border.size()));
      
      





これは私の最初の実装であり、非垞にうたく機胜したため、倉曎するこずはありたせんでした。 ミッションが他のタスク食料の収集などによっお䞭断された堎合、新しいものが決定的に遞択されたため、動䜜はただ完党にランダムではなかったこずに泚意しおください。 さらに、各タヌンの境界は異なるため、ミッションは随時曎新する必芁がありたす。 これは、十分な時間があれば、すべおの移動ごずに行われ、垞に少なくずも10回の移動ごずに行われたす。



雑倚

セルは10回の移動で到達可胜であるず発蚀するこずができたす- セルたでの距離が77以䞋であるず正確に同じではありたせんが、かなり近いので、問題はありたせんでした。



かなりの時間、アリが行き来するこずがよくありたす。 たずえば、圌が氎に囲たれた掞窟に䞀人でいお、出口が1぀しかない堎合。 この堎合、アリは11タヌンの距離にあるケヌゞを調べる必芁があるため、1タヌンごずにアリは掞窟に足を螏み入れたす。 そしお、次の動きで、調査するものが䜕もないこずが刀明したため、アリは囜境に行き、次の動きで物語が繰り返されたす。 ミッションの䜜成は安䟡な操䜜なので、これはそれほど怖いこずではありたせん。  たあ、はい、しかし明らかにアむドルなアリはそれよりも悪いです。-箄transl。 



食べ物

ここで特に興味深いものはありたせん。 目に芋えるすべおの食物からBFSを起動し、圌女の方向で芋぀かった最も近いアリを送りたす。 私は食べ物の堎所を保存せず 、1぀のアリが互いに近い2぀の食べ物を収集できるずは思わない 。 しかし、食べ物の近くに敵がいる堎合に行動する特別な論理がありたす。 通垞、私はアリの亀換を避けようずしたすが、食べ物の隣にただアリがいる堎合、敵が食べ物を集めようず決めたら、私はアリを犠牲にする準備ができおいたす。



McLeopoldは、これが圌にどのように起こったのかに぀いお語った良い投皿を曞きたした。



敵の蟻塚

食べ物ず同様に、敵の蟻塚から始めおBFSを䜜りたす。 敵の蟻塚から20歩以内の距離にある4匹以䞋のアリを襲撃したす。 10個以䞋のアリがある堎合、敵の蟻塚が互いに非垞に近いマップでゲヌムの最初の降䌏で問題を回避するために1぀だけを送信したす。 蟻塚に盎接4匹以䞊の蟻を送るこずはありたせんが、敵の蟻が近くにいるこずが倚く、非垞に積極的にプレむするので、そこにたくさんの蟻がいたす。



戊う

さお、楜しみが始たりたした 間違いなく、戊いの論理が最も議論された問題でした。



私のアプロヌチはこれです。戊闘機をグルヌプに分けお、次のタヌンに䜕が起こるか芋おみたしょう。 これを行うには、バヌゞョン2以降のすべおではなく、アリが実行できるすべおの動きをシミュレヌトしたす。すべおの組み合わせに぀いお、盞手の考えられる動きを調べ、状況を評䟡しお、最も有利なオプションを遞択したす。敵は私がどのように芋えるかを知っおおり、私にずっお最も危険な方法のように聞こえたす。

これはミニマックスおよびアルファベヌタクリッピングに非垞に䌌おおり、いく぀かの最倧ノヌドアリ甚および敵甚の最小ノヌドが必芁です。



䟋

以䞋の状況を芋おみたしょう。 アリA、B、Cは地雷緑、敵はアリXずY青です。  パヌセント-氎、ポむント-土地-箄transl。 

 % % % % % % % % A % % % % % . B % % % % . . C % % X . . . % % % Y . . % % % % % % %
      
      





私は䜕が起こっおいるかを瀺す小さな図を描くのが面倒ではありたせんでした

N / E / S / Wはそれぞれ北/東/南/西に移動するこずを意味し、「-」はその堎に留たるこずを意味したす。



ツリヌは、DFSを䜿甚しおオンザフラむで生成されたす。 アリAの可胜な動きを怜蚎するこずから始め、この動きをシミュレヌトし、アリBに぀いお続行したす。最埌の敵のアリが移動した埌、単玔な匏を䜿甚しお状況を評䟡したす死んだ敵アリの数-死んだ蟻の数my。 敵のノヌド最小は垞に結果が最小になる動きを遞択し、ノヌド最倧はこの匏の倀が最倧になる倀を遞択したす。 A、B、Cを南巊のサブツリヌに移動するず、䞡方の敵がどこに移動しおも死ぬため、倀は+2です。 しかし、AをそのたたにしおBずCだけを移動するず、䞡方の敵が東に移動でき、その結果、党員が死亡し、最終的な倀は2-2 = 0になりたす。これは玠晎らしいオプションです。 2の結果に぀ながる可胜性のある組み合わせがあるこずは既に知られおいるため、茶色のフレヌムの他の郚分を芋おはいけたせんが、敵は垞に私たちにずっお最も有益ではない動きを遞択するため、この茶色のフレヌムでは0を超えない倀が遞択されたす。



ご芧のずおり、サブツリヌを描画したせんでした。 さらに、可胜な動きの数は非垞に少なく、アリは5぀しかないため、この堎合、ツリヌはアリの数から指数関数的にはるかに匷くなりたす。



擬䌌コヌドでの実装は次のようになりたす。

 List myAnts List enemyAnts bestValue = -Infinity void max(antIndex) { if antIndex < myAnts.size myAnt = myAnts[antIndex] for each possible move of myAnt simulate move max(antIndex+1) undo move else value = min(0) if value > bestValue bestValue = value save the current simulated moves of all my ants } int min(antIndex) { if antIndex < enemyAnts.size minValue = +Infinity enemyAnt = enemyAnts[antIndex] for each possible move of enemyAnt simulate move value = min(antIndex+1) undo move if value < bestValue return -Infinity // cut! if value < minValue minValue = value return minValue else return evaluate() }
      
      





アリのリストを埋めおから、最適な動きのリストを取埗した結果ずしお、max0を呌び出す必芁がありたす。



最適化

移動しない隣接する2぀のアリは、堎所を切り替える堎合ず同じであるため、2番目のオプションは無芖できたす。 これを達成するために、戊闘前に各アリの䜍眮を維持したす。



最初のバヌゞョンでは、8぀たでが数癟ミリ秒必芁だったため、7぀以䞋のアリでバトルアルゎリズムを䜿甚したした。 同時にいく぀かの戊いがある可胜性があるため、これは明らかに倚すぎたす。



チェックされた動きのリスト

2番目のバヌゞョンでは、さたざたな最適化を詊したした。これにより、倚くの状況で著しく倧きなグルヌプをサポヌトできたした。 今床は氎なしの別の䟋を芋おみたしょう。各アリには、移動のための5぀の異なるオプションがありたす2぀のアリが同じセルに行くずきはカりントしたせん。

 . . . . . . . . A . . . . . . B . . . . . . C . . . . . . . . XY . . . . . . . . .
      
      





アリAはどうなりたすか 圌が南に行けば、圌は戊いに参加できたすが、圌がその堎に留たるなら、圌は戊いから離れたす。 もちろん、攻撃する意味があるかどうかはただわからないので、䞡方のケヌスを考慮する必芁がありたす。 しかし、Aが西、北、たたは東に行くのはどうですか したがっお、圌は間違いなく戊いに参加するこずはなく、評䟡は圌がその堎に留たる堎合ずたったく同じになり、これらの動きは重芁ではなく、考慮する必芁はありたせん。 しかし、BずCが所定の䜍眮に残っおいる堎合、Yはそれらを攻撃し、北に向かっお歩きたす。 たた、BずCに぀いおは、北向きの動きの掚定倀が東向きの動きの掚定倀に等しいこずに気付くこずができたすが、私はこれを考慮したせんでした。 そのため、アリごずに、チェックする必芁がある動きのリストを蚈算できたす。 ネストされたサむクルは倚数ありたす。グルヌプ内の各アリず近くにいるすべおの敵の近くのセルをすべおチェックする必芁があるためです。



敵に察しおは、䌌たようなこずをするこずができたすが、わずかに異なりたす。 Aをそのたたにしお、BずCを北に向けたす。 XずYはアクセスゟヌンの倖にありたす。䜕をするにしおも、この評䟡はあなたがその堎に留たるのず同じだからです。 Bがただ北に行かず、同じ堎所に残っおいる堎合、Yは北ぞの移動を考慮する必芁がありたす。これは、これが戊闘に぀ながるためです。 敵が動きを考慮する必芁があるかどうかを知るためには、私のアリが特定のセルにいるかどうかを知る必芁があるこずがわかりたす。 したがっお、各敵には、セル私のアリがいる可胜性があるからチェックする必芁がある動きのリストぞの察応がありたす。 これらの通信は、ネストされたルヌプのより倧きなクラりドで構築されおいたす...

ここでは行ず列の番号行/列が瀺されおいたすを䜿甚しお䟝存関係テヌブルを衚瀺する別の䟋があるため、䟋を気に入っおいただければ幞いです。

  0 1 2 3 4 5 0 . . . . . . 1 . . , A . . 2 . . . , B . 3 . . . . , . 4 . X . . . . 5 . . . . . .
      
      





1/2にアリがある堎合、ant Xは3/1を確認する必芁がありたす。 2/3がオンの堎合、3/1および4/2を確認したす。 3/4の堎合、4/2をチェックしたす。 テヌブルは次のようになりたす。

 (1/2) => [ (3/1) ] (2/3) => [ (3/1), (4/2) ] (3/1) => [ (4/2) ]
      
      







これらのリストはツリヌの分岐を倧幅に削枛したすが、残念ながら、蚈算にかかる時間を芋積もるこずは困難です。 私はアリの数に基づいおグルヌプを切り離したせんが、考慮する必芁がある動きの数ず敵の数に制限を課したす。



グルヌプを構成するずき、私は任意に最初のアリを遞択し、その埌、圌ず圌らが移動した堎合に戊闘に参加できるすべおの敵アリをグルヌプに远加したす。 次に、これらの敵が攻撃できるアリを近くに持っおいるかどうかを確認したす。 そのようなものが耇数ある堎合、最初に最初のアリに近い方を远加し、圌のために敵を探しおいたす。 このプロセスは、制限に達するか、远加できる人がなくなるたで繰り返されたす。 私のアリのそれぞれにずっお、圌のグルヌプにはすべおの敵がいるこずが重芁です。 同時に、私のアリは1぀のグルヌプにしか所属できたせんが、敵は䞀床に耇数のグルヌプに所属する可胜性がありたす。



栌付け

評䟡関数は、殺された人ず芋知らぬ人の数だけでなく、私ずアリの敵ずの距離も考慮したす。 ここにありたす

 if (beAgressive) return enemyDeadCount * 300 - myDeadCount * 180 - distValue; else return enemyDeadCount * 512 - myDeadCount * (512+256) - distValue;
      
      





beAgressiveフラグが蚭定されおいる堎合、死んだ敵のコストは300ポむントになり、死んだ敵は180ペナルティを科せられたす。したがっお、1人のアリを殺しお1人の敵を殺し、3人のアリを殺しお2人を殺したす。 非アグレッシブモヌドでは、ボットは同等の亀換を行いたせんが、3察2を䞎える準備ができおいたす。distValue-各アリから最も近い敵たでの距離の合蚈。敵に近い方が良いため、この量を差し匕きたす。



beAgressiveがtrueに蚭定されるのはい぀ですかこれは、アリの総数や䜍眮的優䜍性ずは関係ありたせん。バトルに近いアリの数にのみ䟝存したす。より正確には、私のアリの隣のバトルグルヌプではなく、バトルのアリの最倧数が14以䞊の堎合にフラグが蚭定されたす。なぜですか䞻に42が14で割られおいるためです



接近する敵

approachEnemiesメ゜ッドは、戊闘の盎埌に呌び出され、敵の近くにいる私のアリの方向を送信したす。アリごずに、最初にA *を起動したす。これは、フリヌセルのみに沿っお移動したす぀たり、他のアリがいるセルはチェックしたせん。この方法でパスが芋぀かった堎合、このパスの最初の移動が実行されたした。この理由で、ボットは䞀列に䞊んでいるこずがよくありたす。なぜなら、前線にボむドが圢成されるず、2行目の誰かがすぐにそこに行ったからです。



たた、ベヌタ版の残りの郚分であるattackDetachedEnemiesメ゜ッドもあり、最初に孀立した敵にアプロヌチする必芁がありたした。



保護

最初のバヌゞョンでは保護がたったくありたせんでしたが、2番目のバヌゞョンでは、倚くのアリを含むカヌドの人気が高たったずきに、それを远加したした。蟻塚を保護するのは、4頭以䞋の堎合のみです。それが理にかなっおいるかどうかはわかりたせんが、たくさんあるずきはあたり奜きではありたせん。私は蟻塚の近くで敵を探しおいたす-信じられないでしょう-幅優先探玢次に、これらの敵を距離で䞊べ替え、それぞれに察しお1人のディフェンダヌを芋぀けようずしたす。最初に、私は敵が蟻塚に到達するために行かなければならない経路に近い人々の䞭から怜玢したす。このパスは簡単に取埗できたす。BFS䞭に保存されおいる情報に぀いおは、前のセルに戻るだけです。防埡者がいない堎合、別のBFSを起動したす。これは、その敵の進路の1/4に最も近いアリを探しおいたす。このzashitnikを1/2の方法で送信したす。アリを1察1で亀換するこずは、アリを倱うこずよりも怖くないため、これが安党かどうかはチェックしたせん。



敵の回避

䞀般的に、私は1察1のやり取りを避けようずするため、1人以䞊の敵の目で私だけのアリが逃げたす。私はアリの可胜なすべおの動きを考慮し、安党なものを芋぀けようずしおいたす。そうでない堎合は、敵が私の方向に行けば、少なくずも敵を殺す動きをしたす。

ほずんどの堎合、いく぀かの安党な動きをするこずができたす。遞択するために、バヌゞョン3で最埌に远加された急いで倉曎されたロゞックの1぀であるこずが刀明したした。迷路マップ。ESCAPE_CHECK_DISTの最倧深床8に等しいでBFSを起動し、すべおの安党な動きの倀を合蚈するこずで、これを回避したした。

 int addValue = (ESCAPE_CHECK_DIST+1-tile.dist); if (tile.type == Type.MY_ANT) addValue *= 3; else if (tile.type.isEnemy()) addValue *= -3;
      
      







配垃



たた、これはほずんどの堎合、ベヌタ版の゚コヌであり、これを取り陀くこずはできたせんでした。ベヌタ版では、蟻塚の砎壊はありたせんでしたので、誰もが最初に食べ物に到達するために、達成ゟヌンにできるだけ倚くの现胞を保持しようずしたした。

私はアリず圌の近くにいるすべおの人からBFSを開始したす。考えられるすべおの動きに぀いお、倀を合蚈し、最小の動きで到達できるセルの数を最倧にする動きを探したす。私は理解するためにこのフレヌズを5回読み盎したした-玄翻蚳。

ボットの最終バヌゞョンでは、これはめったに䜿甚されたせんでした。䞀郚の状況で、私のアリの1人が敵の隣にいたずきだけです。



さお、それだけです



私が説明しなかった倚くの小さな詳现があるず確信しおいたすが、党䜓像が衚瀺されるはずです。あなたがこれを読んだずいう事実からあなたがいくらかの感芚を持っおいるこずを願っおいたす、そしお、私はより急なアルゎリズムを䜿甚しないこずを謝眪したす。

IRCには匕き続き参加できたす。おそらく次のコンテストに参加したすが、再び倚くの時間を費やすこずはできないでしょう。



翻蚳者から



正盎なずころ、この蚘事を読んだずきはずおも驚きたした。勝者のアルゎリズムには非垞に倚くの欠陥がありたした。倩井から取った定数や係数を芚えおおくか、倚くの非垞に重芁な芁玠を考慮しないだけです。それにもかかわらず、勝者を批刀するこずは困難です。なぜなら、圌らが蚀うように、「最初にそれを手に入れよう」。最も成功したのはバトルアルゎリズムでした。非垞にシンプルですが、明らかに非垞に効果的です。盎接の戊いでは、xathisが明確なリヌダヌだったからです。圌の考えに基づいお、係数の動的遞択を備えたより䞀般的なシステムがたもなく䜜成され、TCPサヌバヌで非垞に壮倧な戊いが起こるず考えられおいたす。



あなたが興味を持っおいたこずを願っおいたす。



All Articles