อัลกอริธึมการสร้างประวัติทำงานอย่างไร


19

ฉันได้ยินเกี่ยวกับเกม Dwarf Fortress แต่ตอนนี้มีเพียงหนึ่งคนที่ฉันติดตามบน Youtube ได้ให้ความเห็นเกี่ยวกับเรื่องนี้ ... ฉันประหลาดใจยิ่งกว่าเมื่อฉันสังเกตเห็นว่า Dwarf Fortress สร้างประวัติศาสตร์ให้โลกได้อย่างไร!

ตอนนี้อัลกอริทึมเหล่านี้ทำงานอย่างไร พวกเขามักจะทำอะไรเป็นอินพุตยกเว้นความยาวของการจำลอง? พวกเขาจะมีความเฉพาะเจาะจงได้อย่างไร?

และที่สำคัญกว่านั้น พวกเขาสามารถทำใน Javascript หรือ Javascript ช้าเกินไป? (ฉันเดาว่าสิ่งนี้ขึ้นอยู่กับความลึกของการจำลอง แต่ยกตัวอย่างป้อมปราการคนแคระ)


3
"สามารถสร้างเป็น Javascript ได้หรือไม่" คำตอบคือใช่ แต่ขึ้นอยู่กับว่าคุณต้องการผลลัพธ์เร็วแค่ไหนและซับซ้อนแค่ไหนที่คุณต้องการให้มันเป็น ป้อมปราการคนแคระใช้เวลาสักครู่เช่นกัน - และมันก็ช้าลงตามยุคโลก! ดังนั้นตราบใดที่คุณต้องการประวัติตื้น ๆ คุณสามารถทำได้ใน Javascript ดังนั้นมันขึ้นอยู่กับว่าคุณต้องการให้ประวัติซับซ้อนแค่ไหน
doppelgreener

2
เขาหมายถึง "ที่ระดับของป้อมปราการคนแคระ" ตามขนาด
MichaelHouse

2
@Bane ใช่ฉันหมายถึงคุณสามารถเปลี่ยนแปลงจำนวนประวัติใน DF ได้ เมื่อคุณเริ่มโลกมันจะสร้างภูมิประเทศแบบสุ่มก่อนจากนั้นเริ่มริ้วรอยโลกก่อนที่ดวงตาของคุณจะสร้างประวัติศาสตร์ขึ้นมา คุณดูมันในขณะที่อาณาจักรขยายและหดตัวเมื่อการเปลี่ยนแปลงของภูมิประเทศเป็นป่าที่เติบโตและลดถอยลงเมื่อพื้นที่กลายเป็นผีสิง มันก้าวหน้าไปทุกปี (หรือหลายปีต่อครั้ง) ต่อหน้าต่อตาคุณ สิ่งนี้จะดำเนินต่อไปจนกว่าคุณจะบอกให้หยุด ยิ่งคุณได้รับรุ่นที่ช้ากว่า (เนื่องจากการใช้งาน CPU ไม่ใช่กลไกของเกม)
doppelgreener

1
เพื่อความชัดเจน: ยิ่งโลกมีอายุมากขึ้นเท่าไหร่การคำนวณในแต่ละปีก็จะช้าลงเท่านั้น ในโลกหนุ่มสาวมันจะต้องผ่านช่วงสองสามปีแรกในโลกที่มีอายุหลายร้อยปีในปีหน้าอาจใช้เวลาสองหรือสามวินาทีในการสร้าง
doppelgreener

1
โอ้นั่นฉันรู้ ด้วย "ความลึก" ฉันไม่ได้หมายถึงจำนวนปีที่ฉันหมายถึงจำนวนของเหตุการณ์ที่เกิดขึ้นและความแม่นยำของการจำลอง คุณสามารถเก็บจำนวนคนที่มีอาณาจักรหรือคุณสามารถมีคลาสที่เรียกPersonว่าทำงานบ้านไปที่กองทัพ ฯลฯ ตื้น ๆ จะทำให้ขนาดของอาณาจักรตัดสินผลของการต่อสู้ แต่ ลึกจะมีการต่อสู้ของทหารแต่ละคนเพื่อตัวเขาเอง
jcora

คำตอบ:


27

ปิดแรกมีบางคำแนะนำสำหรับการสร้างประวัติศาสตร์เกี่ยวกับป้อมแคระ มีคนถามฟอรั่มของ Bay12สักครู่และมีการแชร์การถอดเสียงและคุณสามารถค้นหาว่าการสนทนาเริ่มต้นที่ใดโดยการค้นหา: "หัวข้อของเราในวันนี้คือการสร้างโลกและการสร้างประวัติศาสตร์"


ฉันไม่รู้แน่ชัดว่าป้อมปราการของ Dwarf ทำอะไรได้บ้าง แต่ฉันจะอธิบายว่าฉันวางแผนที่จะนำร่างฉบับแรกมาใช้ในเกมได้อย่างไร ฉันจะใช้ง่ายautomata ถือ หากคุณมองผ่านต้นแบบสปอร์เหล่านี้เช่นการเพาะเลี้ยงเซลล์และชีวกลศาสตร์

ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นตัวอย่างของการทำเซลลูลาร์อัตโนมัติและสิ่งที่พวกเขาสามารถผลิตได้ โดยพื้นฐานแล้วฉันจะสร้างกฎสำหรับเผ่าพันธุ์ต่าง ๆ ตัวอย่างของกฎจะเป็น:

  • พวกเขาเป็นศัตรูต่อเผ่าพันธุ์อื่น
  • สภาพภูมิอากาศของพวกเขา
  • ความต้องการทรัพยากรของพวกเขา
  • อัตราการเกิดและอายุขัยของพวกเขา
  • ความปรารถนาของพวกเขา (การวิจัยเทคโนโลยีการค้าการดำรงอยู่อย่างสันติการครอบครองโลก)
  • ความสามารถของพวกเขา (การสร้างโครงสร้างการรวบรวมทรัพยากรการทำสงครามและอื่น ๆ )
  • และอื่น ๆ ...

ดังนั้นสิ่งที่สำคัญที่สุดสำหรับการทำงานทั้งหมดนี้คือโลกที่จะเข้าร่วมการแข่งขันเหล่านี้ ภูมิประเทศจะเป็นตัวกำหนดค่ากำหนดและการขยาย ดังนั้นเมื่อคุณสร้างโลกแล้วให้เลือกสถานที่แบบสุ่มในโลกที่เผ่าพันธุ์เหล่านี้จะมีชีวิตอยู่อย่างเหมาะสมและปล่อยให้มันหลวม ตอนนี้สิ่งที่น่าสนใจเริ่มเกิดขึ้น ตอนนี้คุณมีที่ดินและเผ่าพันธุ์ที่มีความต้องการและความสามารถคุณสามารถเริ่มสร้างประวัติศาสตร์ เผ่าพันธุ์เหล่านี้รวบรวมทรัพยากรจากนั้นโครงสร้างจะถูกสร้างขึ้น:

  • เมืองที่มีทรัพยากรสูงพื้นที่ที่น่าอยู่อาศัยสูง
  • ถนนเชื่อมต่อเมืองใหญ่
  • สะพานข้ามแม่น้ำ
  • อุโมงค์ผ่านภูเขา
  • ป้อมปราการใกล้แนวหน้าของการขยายเพื่อตอบสนองต่อการต่อสู้

โครงสร้างใด ๆ ที่สามารถบุก / ยึดครองโดยเผ่าพันธุ์อื่น ยิ่งโครงสร้าง (เช่นเมืองหรือป้อมปราการ) อยู่ในประวัติศาสตร์นานเท่าไหร่ก็ยิ่งสามารถป้องกันได้มากเท่าไหร่ก็ยิ่งยากที่จะครอบครองได้มากเท่านั้น และยิ่งเป็นที่ต้องการสำหรับการแข่งขันที่ต้องการการควบคุม การต่อสู้ถูกยืดเยื้อเมื่อการแข่งขันเกิดขึ้น (อย่างน้อยหนึ่งศัตรู) การต่อสู้ได้รับการตั้งชื่อตามสถานที่สำคัญหรือสิ่งก่อสร้างใกล้เคียงหรือหากการต่อสู้มีความสำคัญหรือไม่มีการระบุสถานที่สำคัญสถานที่สำคัญจะถูกตั้งชื่อตามการต่อสู้

ถนนสะพานและอุโมงค์ถูกขยายผ่านการค้าและการขนส่งทรัพยากร แต่ละอันมีปริมาณงานสูงสุดที่สามารถเพิ่มขึ้นได้ด้วยค่าใช้จ่ายทรัพยากร สร้างป้อมปราการหินกลางทุ่งหญ้า? ถนนเหล่านั้นกำลังจะถูกใช้อย่างหนักเพื่อขนส่งหินที่ต้องการ พวกเขาจะใหญ่ขึ้นและได้รับชื่อ

ภัยธรรมชาติเกิดขึ้นส่งผลกระทบต่อประชากรและวิถีแห่งประวัติศาสตร์ แผ่นดินไหวอาจลดเมืองให้เป็นซากปรักหักพังหรือยุบอุโมงค์ น้ำท่วมอาจชะล้างถนนหรือสะพานออกไป


มันไม่ลึกเท่าป้อมปราการคนแคระ แต่มันเป็นการเริ่มต้น ในขณะที่คุณสามารถจินตนาการ (และตามที่ Johnathan Hobbs พูดถึง) ยิ่งเผ่าพันธุ์เหล่านี้ขยายตัวมากเท่าไรเซลล์ก็ยิ่งถูกจำลองมากขึ้น ไม่เพียง แต่เซลล์ที่ถูกจำลองเท่านั้น แต่การจำลองมีความซับซ้อนมากขึ้นเนื่องจากขณะนี้มีโครงสร้างเพื่อสร้าง / บำรุงรักษาการต่อสู้เพื่อค่าจ้างการค้าเพื่อ ... การค้าและอื่น ๆ สิ่งนี้หนักสำหรับทุกภาษา Javascript อาจช้าลงในไม่ช้า อย่างไรก็ตามคุณสามารถเสียสละความซับซ้อนเพื่อเพิ่มความเร็วได้เสมอ

มันคือแบบจำลองทั้งหมด (แม้ว่าจะซับซ้อน) คุณแค่บันทึกเหตุการณ์สำคัญตลอดทางและเรียกมันว่าประวัติศาสตร์

ฉันเพิ่งค้นพบโพสต์ฟอรั่มของ Bay12สำหรับผู้ที่ระดมสมองวิธีทำให้คนแคระสร้างป้อมปราการโลกให้เร็วขึ้น ฉันไม่ได้อ่าน แต่อาจให้คำแนะนำบางอย่างหากคุณเคยประสบปัญหากับการใช้งานของคุณช้าเกินไป


ยอดเยี่ยมและให้ข้อมูลเช่นเคย @ Byte56 :)
jcora

1
ขอบคุณสารพิษ อาจไม่เสมอไปมันแค่เกิดขึ้นที่ผู้คนถามคำถามฉันคิดว่าฉันรู้อะไรบางอย่างเกี่ยวกับ ขอบคุณที่ให้โอกาสฉันคิดมากขึ้นและได้เขียนบางสิ่งบางอย่าง :)
MichaelHouse

4

เช่นเดียวกับประเด็นด้านJavaScript ไม่เป็นที่ช้าที่สุดเท่าที่คุณอาจจะคิดว่า

นักพัฒนาเบราว์เซอร์ได้ใช้เวลามากเวลาและพลังงานในการเพิ่มประสิทธิภาพเครื่องมือ JavaScript ของพวกเขา มาตรฐานที่ฉันเชื่อมโยงเพื่อแสดงให้เห็นว่าจาวาสคริปต์มีค่ามัธยฐานช้ากว่า C เพียง 5 เท่าซึ่งไม่สามารถพูดได้สำหรับภาษาที่ตีความอื่น ๆ และขอบเขตที่ต่ำจะยิ่งน่าประทับใจมากขึ้น: ในหุ้นที่มี C

แน่นอนว่าเกณฑ์มาตรฐานทางภาษานั้นไม่ได้มีความหมายมากนัก - คุณอาจพบตัวอย่างเคาน์เตอร์โดยใช้เกณฑ์เปรียบเทียบที่แตกต่างกัน แต่ประเด็นก็คือว่า JavaScript เป็นอย่างรวดเร็ว ไม่ไม่ใช่ C หรือ C ++ และไม่พยายามเป็น แต่มันเป็นเรื่องดีที่จะไม่ติดอยู่ในความคิด "การตีความภาษา == ช้า" เพราะสำหรับงานที่ไม่มีความซับซ้อนใด ๆ ประสิทธิภาพการทำงานจะมีความสำคัญมากขึ้นในการออกแบบอัลกอริทึมและการเลือกภาษาที่น้อยลง

จริง ๆ แล้วฉันจะเขียนทั้งหมดนี้ในความคิดเห็น แต่ฉันวิ่งออกจากพื้นที่


1

ใช่มันสามารถสร้างบนจาวาสคริปต์ตรวจสอบ proyects เช่น ASM.js ซึ่งได้ความเร็วที่ช้าที่สุดเกือบ 2 เท่าของ C หากคุณดูแลหลายคอร์ (โดยใช้เว็บเวิร์ค) มันอาจเร็วกว่า DF ตอนนี้เป็น monocore แล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.