กระบวนทัศน์ใดที่จะใช้สำหรับการเขียนเอ็นจิ้นหมากรุก


9

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

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


1
นี่คือการเขียนคอมไพเลอร์ C ตั้งแต่เริ่มต้น ฉันจะไม่บูรณาการล้อ ฉันจะศึกษาสิ่งที่มีอยู่ก่อน
งาน

10
@ Job: เป้าหมายของฉันคือกระบวนการมากกว่าผลลัพธ์ แม้ว่าฉันจะลงเอยด้วยเอ็นจิ้นที่แย่มากฉันคิดว่าอาจมีคุณค่าในกระบวนการวิเคราะห์ปัญหาและพัฒนาวิธีการโจมตีโดยเฉพาะอย่างยิ่งถ้าฉันได้เรียนรู้วิธีการเขียนโปรแกรมใหม่ในกระบวนการ
สะกิด

1
โชคดี. ไม่มีนายจ้างตัวจริงคนไหนที่ขอให้คุณพัฒนาตัวเองตั้งแต่แรก แต่ในระหว่างการสัมภาษณ์พวกเขาอาจถามว่าคุณจะโจมตีปัญหานี้อย่างไร
งาน

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

1
@ Mark, วิธีการเกี่ยวกับการกอดชีวิต;) = การเดินทาง, ภาษา, โรงละคร, บทกวี, กลางแจ้ง, ฯลฯ ? ฉันชอบการเขียนโปรแกรม แต่เมื่อฉันไม่ได้ทำมันฉันมีอีก 1,000 สิ่งที่ต้องทำ
งาน

คำตอบ:


7

การประเมินไม่ได้เป็นปัญหาแบบขนานเท่าที่ฉันรู้ แต่การประเมินเชนต่าง ๆ คือดังนั้นฉันจะเขียนมันเพื่อใช้ประโยชน์จากหลายคอร์และมัลติเธรดอย่างแน่นอน

ไม่ว่าคุณจะไปทำงานหรือกึ่งหน้าที่เป็นเรื่องของรสนิยม โดยส่วนตัวแล้วฉันจะใช้ OOP และใช้การสนับสนุนสำหรับการเขียนโปรแกรมการทำงานและการขนานที่มีอยู่ในอินสแตนซ์ C #

บน sidenote ถ้าฉันจะเขียนโปรแกรมหมากรุกฉันจะพยายามทำให้มันสามารถ "คิด" เกี่ยวกับหมากรุกได้ การใช้การประเมินบอร์ดเพื่อเดรัจฉานบังคับชุดค่าผสมที่เป็นไปได้ทั้งหมดได้ถูกทำจนตายและดีมาก แต่ไม่มีความคืบหน้ามากนักในการทำกลไกหมากรุกที่คิด / ฟัสซีมากขึ้น นั่นเป็นความท้าทาย! :)

ค้นหาบางเกมที่มีการเล่นตำแหน่งที่ยากมากและการเคลื่อนไหวที่แข็งแกร่ง (พวกเขากำลังทำเครื่องหมาย! หรือ !!) และใช้พวกเขาเพื่อฝึกอบรมและทดสอบเครื่องยนต์ของคุณ


2

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


2

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

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


ELO-wise ให้คะแนนได้อย่างไร? เปรียบเทียบกับเจ้าเล่ห์?

@ Thorbjørn Ravn Andersen - หนึ่งในเครื่องมือหมากรุกโอเพ่นซอร์สระดับสูงที่เขียนใน C และโดย Dr. Robert M. Hyatt ผู้ใช้ชีวิตในการเขียนโปรแกรมหมากรุก โชคไม่ดีที่ฉันยังไม่ได้ทดสอบการให้คะแนน elo เพราะยังมีหลายสิ่งที่ต้องทำก่อนการทดสอบการให้คะแนน elo การประเมินในปัจจุบันคือการประเมินค่าชิ้นดังนั้นมันจึงค่อนข้างอ่อนแอและยังไม่ได้ใช้อัลกอริทึมที่จำเป็นทั้งหมด โชคร้ายที่ฉันไม่มีเวลาใช้เวลากับโปรเจ็กต์นี้ในขณะนี้ ฉันหวังว่าวันหนึ่งจะเป็นไปได้ที่จะดำเนินการต่อไป
Freshblood

ขอโทษฉันคิดว่ามันสามารถเล่นได้จริง ความผิดฉันเอง.

@ Thorbjørn Ravn Andersen - ฉันได้เผยแพร่บางรุ่นที่นั่นและเซ็ตการแก้ไขที่เก็บล่าสุดพร้อมที่จะสร้าง ฉันแค่อยากจะบอกว่ามันค่อนข้างอ่อนแอในขณะนี้
Freshblood

2

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

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

ฉันยังต้องการเห็นใครบางคนพยายามที่จะบุกเข้าไปใน 100 อันดับแรกของเครื่องมือหมากรุกโดยใช้ภาษาที่ใช้งานได้

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