履歴生成アルゴリズムはどのように機能しますか?


19

ドワーフ要塞というゲームについて聞いたことがありますが、YouTubeでフォローしている人の1人だけがそれについて解説しました。

さて、これらのアルゴリズムはどのように機能しますか?シミュレーションの長さを除いて、通常は入力として何を使用しますか?それらはどれほど具体的ですか?

そして更に重要なことに; Javascriptで作成できますか、またはJavascriptが遅すぎますか?(これはシミュレーションの深さに依存しますが、例としてDwarf Fortressを取り上げます。)


3
「Javascriptで作成できますか?」答えは明らかに「はい」ですが、結果をどれだけ早く求め、どの程度複雑にするかによって異なります。ドワーフ要塞も時間がかかります-そして、世界が老化するにつれて遅くなります!したがって、浅い履歴が必要な場合はJavascriptで実行できます。そのため、履歴をどの程度複雑にするかによって異なります。
-doppelgreener

2
彼は「ドワーフ要塞のレベルで」という意味です。
マイケルハウス

2
@Baneはい、DFの履歴の量を変更できるということです。ワールドを開始すると、最初にランダムに地形が生成され、次に目の前でワールドが老化し始め、進行するにつれて履歴が生成されます。帝国が拡大したり縮小したり、地形が変化したり、森林が成長したり後退したり、エリアに幽霊が出たり(幽霊が出なくなったり)するなど、あなたはそれを見る。それはあなたの目の前で年々(または実際には一度に数年)進行します。これは、停止するよう指示するまで続きます。遠くに行くほど、ゲームの仕組みではなくCPUの使用による世代の取得が遅くなります。
-doppelgreener

1
非常に明確にするために、世界が古ければ古いほど、計算は毎年遅くなります。若い世界では最初の数年を駆け抜け、数百年前の世界では、翌年の生成に数秒から数秒かかることがあります。
-doppelgreener

1
ああ、それは知っている。「深さ」とは、年数を意味するものではなく、発生するイベントの量とシミュレーションの精度を意味します。帝国に何人の人がいるのかを保持することもできますし、実際にPerson家事をしたり、軍隊に行ったりするクラスを持っていることもできます。各兵士が自分自身のために戦うことは深いでしょう。
jcora

回答:


27

まず、ドワーフ要塞についての歴史生成のヒントがいくつかあります。誰かがBay12フォーラムでしばらく前に尋ねたところ、トランスクリプトが共有され、「今日のトピックは世界の生成と歴史の生成」を検索することで議論の始まりを見つけることができます。


ドワーフ要塞がどのようにそれを行っているかは正確にはわかりませんが、ゲームで非常に基本的な最初のドラフトを実装する方法を説明します。単純なセルオートマトンを使用します。細胞培養やバイオームなど、これらの胞子のプロトタイプをご覧ください。

ここに画像の説明を入力してください

これらは、セルラーオートメーションの例であり、それらが生成できるものです。基本的に、さまざまな人種のルールを作成します。ルールの例を次に示します。

  • 他の種族に対する敵意
  • 気候の好み
  • リソース要件
  • 彼らの出生率と寿命
  • 彼らの欲望(技術研究、商業、平和な存在、世界支配)
  • それらの機能(構造の構築、リソースの収集、戦争の作成など)
  • 等々...

したがって、これらすべてが機能するための最も重要なインプットは、これらの人種を投入する世界です。地形によって好みと広がりが決まります。したがって、世界を生成したら、これらの種族が適切に生活する世界のランダムな場所を選択し、それらを解放します。今、興味深いことが起こり始めています。欲望と能力を備えた土地とレースを手に入れたので、歴史を築き始めることができます。これらのレースはリソースを収集し、構造が構築されます。

  • 資源が多く住みやすい地域の
  • 道路は大きな町をつないでいます。
  • 川を渡る
  • 山を通るトンネル
  • 戦闘に応じて拡張の最前線にある要塞

他の種族はどのような構造物も襲撃/征服できます。(町や要塞のような)構造物が歴史上に長く存在するほど、防衛力が強いほど、引き継ぐことが難しくなります。そして、より望ましいのは、コントロールを望む種族です。レースが行われる場所で戦闘が行われます(少なくとも1つは敵対的です)。戦いは、ランドマークまたは近くの建造物にちなんで命名されます。または、戦いが重要であるか、ランドマークに名前が付けられていない場合、ランドマークには戦いにちなんで命名されます。

道路、橋、トンネルは、商業と資源の輸送によって拡大されます。それぞれに最大のスループットがあり、リソースの消費とともに増加します。草原の真ん中に石の要塞を建てる?これらの道路は、必要な石を輸送するために頻繁に使用されます。彼らは大きくなり、名前を取得します。

自然災害が発生し、人口と歴史に影響を与えています。地震は町を破壊し、トンネルを崩壊させる可能性があります。洪水は道路や橋を洗い流すかもしれません。


それはドワーフ要塞ほど詳細ではありませんが、始まりです。あなたが想像できるように(そしてジョナサン・ホッブスが言及したように)、これらの種族が拡大するほど、より多くの細胞がシミュレートされています。より多くのセルがシミュレートされるだけでなく、構築/維持する構造、賃金との戦い、商取引と...商取引などが存在するため、シミュレーションはより複雑になります。これはどの言語でも重くなります。Javascriptがすぐに遅くなる可能性があります。ただし、速度を向上させるために常に複雑さを犠牲にすることができます。

それはすべてシミュレーションですが(複雑ではありますが)、途中で重要なイベントを記録し、それを履歴と呼んでいます。

また、ドワーフ要塞の世界世代をより速くする方法をブレインストーミングする人々のためのBay12フォーラム投稿を見つけました。私はそれを読み通していませんが、実装が遅すぎるという問題に遭遇した場合、いくつかのヒントを提供するかもしれません。


いつものように素晴らしく有益です、@ Byte56。:)
jcora

1
ありがとう、Bane。いつもではないかもしれませんが、人々は私が何かを知っていると思う質問をすることが起こります。もっと考えて何かを
書き留める

4

念のため、JavaScriptは思ったほど遅くありません

ブラウザ開発者は、JavaScriptエンジンの最適化に多くの時間とエネルギーを費やしまし。私がリンクしたベンチマークは、ベンチマークされたタスクのうち、中央値では、JavaScriptがCの5倍しか遅くなかったことを示しています。そして、下限はさらに印象的です:Cと同等です。

もちろん、言語ベンチマークはあまり意味がありません-おそらく、異なるベンチマークを使用して反例を見つけることができます。しかし、ポイントはJavaScriptがかなり速いということです。いいえ、CやC ++ではありません。また、そうしようとはしていません。しかし、「解釈された言語==遅い」という考え方にとらわれないことは良いことです。なぜなら、どんな些細な複雑さのタスクでも、パフォーマンスはアルゴリズムの選択により重要であり、言語の選択よりも重要だからです。

私は実際にこれらすべてをコメントで書くつもりでしたが、スペースが足りませんでした。


1

はい、javascriptで構築できます。ASM.jsのようなプロジェクトをチェックしてください。Cの2倍の速度が得られます。複数のコアを処理する場合(Webworkerを使用)、DF(リソースの点)よりもさらに高速になります、現在はモノコアです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.