히스토리 생성 알고리즘은 어떻게 작동합니까?


19

나는 Dwarf Fortress 게임에 대해 들었지만 유튜브에서 내가 팔로우하는 사람들 중 한 명만이 그것에 대해 논평을했습니다 ... Dwarf Fortress가 실제로 세계의 역사를 어떻게 만들어 내는지 알았을 때 나는 놀랐습니다!

이제이 알고리즘은 어떻게 작동합니까? 시뮬레이션 길이를 제외하고 일반적 으로 입력 으로 무엇을 취합니까? 그들이 얼마나 구체적 일 수 있습니까?

그리고 더 중요한 것은; Javascript로 만들 수 있습니까, 아니면 Javascript가 너무 느립니까? (이것은 시뮬레이션의 깊이에 달려 있다고 생각하지만 Dwarf Fortress를 예로 들어 보겠습니다.)


3
"자바 스크립트로 만들 수 있습니까?" 대답은 분명히 그렇습니다. 그러나 결과를 얼마나 빨리 원하고 얼마나 복잡하게 하느냐에 달려 있습니다. 드워프 요새도 시간이 오래 걸리며 세계가 나이가 들어감에 따라 속도가 느려집니다! 얕은 역사를 원한다면 Javascript로 할 수 있습니다. 따라서 역사가 얼마나 복잡한 지에 달려 있습니다.
doppelgreener

2
그는 규모면에서 "드워프 요새 수준"을 의미합니다.
MichaelHouse

2
@Bane 예, DF에 얼마나 많은 기록이 있는지 변경할 수 있습니다. 세계를 시작하면 먼저 지형을 무작위로 생성 한 다음 눈앞에서 세계를 노화시키고 역사를 생성합니다. 지형이 바뀔 때 숲이 자라거나 물러 가고 지역이 귀신이 들거나 더 이상 붙어 있지 않은 등으로 제국이 확장되고 축소되는 것을 볼 수 있습니다. 그것은 당신의 눈앞에서 해마다 (또는 한 번에 몇 년씩) 진행됩니다. 이것은 중지하도록 지시 할 때까지 계속 진행됩니다. 멀수록 게임 메커니즘이 아닌 CPU 사용량으로 인해 생성 속도가 느려집니다.
doppelgreener

1
매우 명확하게 말하면, 세계가 나이가 들수록 매년 계산 속도가 느려집니다. 젊은 세계에서는 처음 몇 년 동안, 수백 년 된 세계에서, 내년에는 생성하는 데 몇 초 또는 몇 초가 걸릴 수 있습니다.
doppelgreener

1
아, 알아 "깊이"라는 말은 몇 년을 의미하는 것이 아니라 발생하는 사건의 수와 시뮬레이션의 정확성을 의미했습니다. 제국에 몇 명의 사람들이 있는지, 아니면 실제로 Person집안일을하고, 군대에가는 등 의 클래스를 가질 수 있습니다 . 깊은 곳에서 각 병사가 자신을 위해 싸울 것입니다.
jcora

답변:


27

첫째는, 거기에 일부 드워프 요새에 대한 역사 발전에 대한 힌트. 누군가가 Bay12 포럼 에서 한동안 물었고, 대화 내용 을 공유했으며 "오늘 우리의 주제는 세계 세대와 역사 세대입니다"를 검색하여 토론이 시작되는 위치를 찾을 수 있습니다.


Dwarf Fortress가 어떻게 작동하는지 정확히 알지 못하지만 게임에서 매우 기본적인 첫 번째 초안을 구현할 계획을 설명합니다. 간단한 셀룰러 오토마타 를 사용하겠습니다 . 세포 배양 및 생물 군계와 같은 Spore 프로토 타입 을 살펴보면

여기에 이미지 설명을 입력하십시오

이들은 셀룰러 자동화의 예와 이들이 생산할 수있는 것입니다. 본질적으로 나는 다른 인종에 대한 규칙을 만들 것입니다. 규칙의 몇 가지 예는 다음과 같습니다.

  • 다른 종족에 대한 적대감
  • 그들의 기후 선호
  • 그들의 자원 요구 사항
  • 그들의 출생률과 수명
  • 그들의 욕구 (기술 연구, 상업, 평화로운 존재, 세계 지배)
  • 그들의 능력 (구조 구축, 자원 수집, 전쟁 제작 등)
  • 등등...

따라서이 모든 것이 효과를 발휘할 수있는 가장 중요한 정보는 이러한 종족을 속이는 세상입니다. 지형은 선호도와 확장을 결정합니다. 따라서 세계를 생성 한 후에는이 종족이 적절하게 살 수있는 세계에서 임의의 위치를 ​​골라 풀어 놓으십시오. 이제 흥미로운 것들이 일어나기 시작합니다. 이제 욕구와 능력을 가진 육상과 레이스가 생겼으므로 역사를 짓기 시작할 수 있습니다. 이 종족들은 자원을 모은 다음 구조를 구축합니다.

  • 도시 높은 자원, 높은 거주 성 지역이다.
  • 도로 는 더 큰 도시를 연결합니다.
  • 강을 건너는 다리 .
  • 산을 통해 터널 .
  • 전투에 대응하여 최전선 근처의 요새 .

다른 종족은 어떤 구조를 습격하거나 정복 할 수 있습니다. 역사에 도시 나 요새와 같은 구조물이 오래 존재할수록 방어하기가 더 어려워집니다. 그리고 통제를 원하는 인종에게는 더 바람직합니다. 종족이 만나는 곳에서 전투가 벌어집니다 (적어도 하나는 적대적입니다). 전투는 랜드 마크 또는 주변 구조물의 이름을 따서 명명되거나, 전투가 중요하거나 랜드 마크 이름이 지정되지 않은 경우 랜드 마크는 전투 후 이름이 지정됩니다.

상업, 자원 수송을 통해 도로, 교량 및 터널이 확장됩니다. 각각 최대 자원 처리량을 가지며 자원 소비에 따라 증가 할 수 있습니다. 초원 한가운데 돌로 요새를 짓고 있습니까? 그 길은 필요한 돌을 운반하는 데 큰 도움이 될 것입니다. 그들은 더 커지고 이름을 얻습니다.

자연 재해가 발생하여 인구와 역사에 영향을 미칩니다. 지진으로 마을이 폐허가되거나 터널이 무너질 수 있습니다. 홍수는 도로 나 다리를 씻을 수 있습니다.


드워프 요새만큼 심층적 인 것은 아니지만 시작입니다. 이제 당신이 상상할 수 있듯이 (그리고 Johnathan Hobbs가 언급했듯이) 더 많은 종족이 확장 될수록 더 많은 세포가 시뮬레이션되고 있습니다. 더 많은 셀이 시뮬레이션되고있을뿐만 아니라 현재 빌드 / 유지 보수, 임금과의 싸움, 상거래와 상거래 등이 있기 때문에 시뮬레이션이 더 복잡합니다. 이것은 모든 언어에 무겁습니다. 자바 스크립트가 더 느려질 수 있습니다. 그러나 속도 향상을 위해 항상 복잡성을 희생 할 수 있습니다.

그것은 모두 시뮬레이션이지만 (복잡하지만) 중요한 이벤트를 기록하고 기록이라고합니다.

또한 Dwarf Fortress 세계 세대를 더 빠르게 만드는 방법을 브레인 스토밍하는 사람들을위한 Bay12 포럼 게시물 을 찾았습니다 . 나는 그것을 읽지 못했지만 구현 속도가 너무 느린 문제가 발생하면 힌트를 줄 수 있습니다.


언제나처럼 훌륭하고 유익한 @ Byte56. :)
jcora

1
고마워요 어쩌면 항상 그런 것은 아니고 사람들이 내가 알고 있다고 생각하는 질문을하는 경우가 있습니다. 그것에 대해 더 많이 생각하고 적어 놓을 수있는 기회를 주셔서 감사합니다. :)
MichaelHouse

4

부수적으로, JavaScript는 생각만큼 느리지 않습니다 .

브라우저 개발자들은 JavaScript 엔진최적화하는많은 시간과 노력을 들였습니다 . 내가 연결 한 벤치 마크는 벤치 마크 된 작업 중 중앙에서 JavaScript가 C보다 5 배 느리다 는 것을 보여 주며 , 이는 다른 해석 언어에서는 말할 수 없습니다. 그리고 하한은 훨씬 인상적 입니다 .C와 동등 합니다.

물론 언어 벤치 마크는 그다지 의미가 없습니다. 다른 벤치 마크를 사용하여 반례를 찾을 수도 있습니다. 그러나 요점은 JavaScript가 매우 빠르다 입니다. 아니요, C 또는 C ++이 아니며 시도하지 않습니다. 그러나 "해석 된 언어 == 느림"사고 방식에 얽매이지 않는 것이 좋습니다. 사소한 복잡하지 않은 작업의 경우 성능은 알고리즘 설계에서 더 중요하고 언어 선택에서는 덜 중요하기 때문입니다.

실제로이 모든 것을 의견에 쓰려고했지만 공간이 부족합니다.


1

예, 그것은 자바 스크립트로 빌드 할 수 있습니다 .ASM.js와 같은 proyects를 확인하십시오 .C보다 거의 2 배 느린 속도입니다. 웹 코어를 사용하는 여러 코어를 관리하는 경우 DF보다 훨씬 빠릅니다 (자원 측면에서) , 지금은 모노 코어입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.