สร้างเกม AI เพื่อชนะ 2048 เกม
สิ่งที่สำคัญที่สุดเกี่ยวกับปี 2048 คือการไปถึงคะแนนสูงสุดโดยการเคลื่อนย้ายกระเบื้องและรวมกระเบื้องเดียวกัน
เราต้องกำหนดวิธีการย้ายกระเบื้องในเกมและวิธีการสร้างกระเบื้องใหม่หลังจากทุกการเคลื่อนไหว
รหัสอยู่ใน Env.py
ความพยายามครั้งแรกของฉันคือใช้วิธีการค้นหาต้นไม้ Monte Carlo เพื่อชนะเกม ฉันพยายามที่จะผ่านการเคลื่อนไหวที่เป็นไปได้ทั้งหมดในความลึกการค้นหาที่กำหนดจากนั้นเปรียบเทียบคะแนนในผลลัพธ์เพื่อเลือกการตัดสินใจที่ดีที่สุดในสถานการณ์เฉพาะ
รหัสอยู่ใน 2048_Search.py
ในวิธีนี้ฉันตั้งค่าความลึกจาก 1 ถึง 5 และวิ่ง 100 ครั้งในแต่ละความลึก
นี่คือผลลัพธ์บางอย่าง
PS: อัตราการชนะเฉลี่ยแสดงถึงโอกาสที่จะถึง 2048
คะแนนสูงสุดเฉลี่ย: 210.24
อัตราการชนะเฉลี่ย: 0%
การเข้าถึงสูงสุด | นับ | สะสม % | ย้อนกลับสะสม % |
---|---|---|---|
32 | 1 | 1% | 100% |
64 | 6 | 7% | 99% |
128 | 39 | 46% | 93% |
256 | 47 | 93% | 54% |
512 | 7 | 100% | 7% |
1024 | 0 | 100% | 0% |
คะแนนสูงสุดเฉลี่ย: 1223.68
อัตราการชนะเฉลี่ย: 30%
การเข้าถึงสูงสุด | นับ | สะสม % | ย้อนกลับสะสม % |
---|---|---|---|
256 | 4 | 4% | 100% |
512 | 19 | 23% | 96% |
1024 | 47 | 70% | 77% |
2048 | 29 | 99% | 30% |
4096 | 1 | 100% | 1% |
8192 | 0 | 100% | 0% |
คะแนนสูงสุดเฉลี่ย: 1646.08
อัตราการชนะเฉลี่ย: 54%
การเข้าถึงสูงสุด | นับ | สะสม % | ย้อนกลับสะสม % |
---|---|---|---|
256 | 1 | 1% | 100% |
512 | 9 | 10% | 99% |
1024 | 36 | 46% | 90% |
2048 | 48 | 94% | 54% |
4096 | 6 | 100% | 6% |
8192 | 0 | 100% | 0% |
คะแนนสูงสุดเฉลี่ย: 2216.96
อัตราการชนะเฉลี่ย: 78%
การเข้าถึงสูงสุด | นับ | สะสม % | ย้อนกลับสะสม % |
---|---|---|---|
256 | 0 | 0% | 100% |
512 | 3 | 3% | 100% |
1024 | 19 | 22% | 97% |
2048 | 58 | 80% | 78% |
4096 | 20 | 100% | 20% |
8192 | 0 | 100% | 0% |
คะแนนสูงสุดเฉลี่ย: 2467.84
อัตราการชนะเฉลี่ย: 78%
การเข้าถึงสูงสุด | นับ | สะสม % | ย้อนกลับสะสม % |
---|---|---|---|
256 | 0 | 0% | 100% |
512 | 2 | 2% | 100% |
1024 | 20 | 22% | 98% |
2048 | 48 | 70% | 78% |
4096 | 29 | 99% | 30% |
8192 | 1 | 100% | 1% |
คอมพิวเตอร์ของฉัน MacBook Pro 15 "2012 (MID) ไม่สามารถจัดการกับจำนวนการคำนวณจำนวนมากสำหรับผู้ที่สนใจในหัวข้อนี้สามารถพยายามกำหนดจำนวนความลึกที่ใหญ่กว่าเพื่อดูว่าเกิดอะไรขึ้น
ฉันลองวิธีการที่แตกต่างกับปัญหานี้ ในช่วงเริ่มต้นของเกมฉันใช้ความลึกเล็กน้อยเพื่อค้นหาเพื่อเร่งกระบวนการ ความลึกเริ่มต้นจาก 2 และมีขนาดใหญ่ขึ้นอีกหนึ่งหลังจากทุก ๆ 400 เคลื่อนไหวจนถึงความลึกของชุด
ฉันวิ่งไป 200 ยุคและเพียง 42.5% ของเกมทั้งหมดถึงความลึก 6 อย่างไรก็ตามผลของความลึก 6 นั้นค่อนข้างน่าประทับใจ
การเข้าถึงสูงสุด | นับ | สะสม % | ย้อนกลับสะสม % |
---|---|---|---|
1024 | 1 | 1.18% | 100% |
2048 | 50 | 60% | 98.8% |
4096 | 34 | 100% | 40% |
ในความลึก 5 คะแนนและจำนวนการย้ายที่สอดคล้องกัน เราจะเห็นได้ว่าโดยเฉลี่ยแล้วเราต้องย้ายสูงกว่า 1,600 ขั้นตอนเพื่อไปถึง 2048
การเข้าถึงสูงสุด | นับ | ผลรวมของการเคลื่อนไหว | จำนวนเฉลี่ยของการย้ายต่อเกม |
---|---|---|---|
512 | 2 | 1172 | 586 |
1024 | 25 | 25321 | 1012.84 |
2048 | 56 | 93276 | 2208.64 |
4096 | 17 | 48163 | 2833.12 |
หลังจากใช้วิธีการค้นหาฉันได้ศึกษาวิธีการเรียนรู้การเสริมแรง (RL) เพื่อที่จะเข้าใจอย่างละเอียดมากขึ้นเกี่ยวกับ RL ฉันใช้ DQN ซึ่งเป็นสาขาหลักของ RL ในเกม 2048
DQN ใช้ Q-value เป็นรางวัลเพื่อประเมินการตัดสินใจที่เครื่องทำ
รหัสอยู่ในโฟลเดอร์ DQN
Sarsa ยังเป็น RL ชนิดหนึ่ง Sarsa แตกต่างจาก DQN เล็กน้อย
ในระยะสั้นความแตกต่างคือนโยบาย SARSA เลือกวิธีที่ปลอดภัยที่สุดเพื่อหลีกเลี่ยงความล้มเหลว (เกมมากกว่า) ในเกม
ในทางกลับกันนโยบาย DQN มักจะเลือกวิธีที่จะไปถึงคะแนนสูงสุดและบางครั้งก็ล้มเหลวในเกมแรก
รหัสอยู่ในโฟลเดอร์ Sarsa