ปัญญาประดิษฐ์ง่ายๆ ในการสอนไดโนเสาร์ออฟไลน์ของ Google Chrome ให้กระโดดกระบองเพชร โดยใช้โครงข่ายประสาทเทียมและอัลกอริทึมทางพันธุกรรมอย่างง่าย
ดู วิดีโอนี้เพื่อดูการทำงานจริง และเรียนรู้วิธีการทำงาน: ปัญญาประดิษฐ์กับไดโนเสาร์ของ Google
ติดตั้ง Node.js
บนคอมพิวเตอร์ของคุณ
โคลน/ดาวน์โหลดโฟลเดอร์นี้ลงในคอมพิวเตอร์ของคุณ
รัน npm install
ภายในโฟลเดอร์นี้
เปิดเกมไดโนเสาร์ของ Chrome แล้ววางเทอร์มินัลไว้ (ต้องอยู่บนหน้าจอเดียวกัน) (เคล็ดลับ: ไปที่เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ และภายใต้เครือข่าย ให้ตั้งค่าเป็นออฟไลน์)
รัน node index
ภายในโฟลเดอร์นี้ หากพบเกมแล้ว เกมจะเลื่อนเคอร์เซอร์ของเมาส์ไปยังจุดกำเนิด floor
ไดโน กดปุ่ม s
ในเทอร์มินัลเพื่อเริ่มการเรียนรู้
เรามีอินพุตที่แตกต่างกัน 3 แบบที่อ่านจากพิกเซลของหน้าจอ:
นอกจากนี้เรายังมีหนึ่งเอาต์พุตที่มี 3 สถานะที่เป็นไปได้:
แต่ละรุ่นประกอบด้วย 12 โครงข่ายประสาทเทียม (จีโนม)
จีโนมแต่ละตัวได้รับการทดสอบกับเกม โดยการจับคู่อินพุตการอ่านจากเกมกับอินพุตของโครงข่ายประสาทเทียมอย่างต่อเนื่อง และโดยการรับเอาต์พุต/การเปิดใช้งานจากเครือข่ายและนำไปใช้กับปุ่มของคีย์บอร์ด
ในขณะที่ทดสอบจีโนมแต่ละจีโนม เราจะติดตาม "ความฟิต" ของมันโดยการนับกระบองเพชรกระโดดในเกม
เมื่อรุ่นทั้งหมดเสร็จสมบูรณ์ เราจะกำจัดจีโนมที่แย่ที่สุดออกจนกว่าจะได้จีโนม N
ด้วยจีโนม N
เหล่านั้น เราจะเลือกสองรายการแบบสุ่ม และข้ามค่า/การกำหนดค่าของพวกมัน หลังจากนั้น เราจะใช้การกลายพันธุ์แบบสุ่มในค่า/การกำหนดค่าของโครงข่ายประสาทเทียม เพื่อสร้างจีโนมใหม่
เราทำครอสโอเวอร์/มิวเทชันจนกระทั่งได้จีโนม 12 ตัวอีกครั้ง และทำซ้ำอย่างต่อเนื่อง
การใช้งานทั้งหมดเสร็จสิ้นโดยใช้ Node.js พร้อมด้วย Synaptic (ไลบรารี Neural Network) และ RobotJs (ไลบรารีสำหรับอ่านพิกเซลและจำลองการกดปุ่ม)
มีไฟล์บางไฟล์ในโครงการ:
index.js
: มันรวมทุกสิ่งเข้าด้วยกัน
Scanner.js
: เลเยอร์นามธรรมพื้นฐานเหนือไลบรารี RobotJs ที่อ่านหน้าจอเหมือนการติดตามรังสี นอกจากนี้ยังมีฟังก์ชั่นสาธารณูปโภคบางอย่าง
UI.js
: ขอบเขตสากลสำหรับการจัดการ UI มันเริ่มต้นและอัพเดตหน้าจอเมื่อมีการเปลี่ยนแปลง
GameManipulator.js
: มีโค้ดที่จำเป็นทั้งหมดเพื่ออ่านเซ็นเซอร์ และใช้เอาต์พุตกับเกม ยังรับผิดชอบในการคำนวณคะแนน รับสถานะของเกม และทริกเกอร์การโทรกลับ/ผู้ฟังเพื่อการใช้งานจริง
Learner.js
: เป็นการใช้งานหลักของอัลกอริทึมทางพันธุกรรม นี่คือจุดที่ "ความมหัศจรรย์" เกิดขึ้น โดยการสืบทอดรุ่นต่อรุ่น ทำการคัดเลือก "ตามธรรมชาติ" ครอสโอเวอร์ การกลายพันธุ์...
genomes
ที่มีนามสกุล .json
enter
(จากนั้นเพื่อเริ่มกด s
)o
เพื่อบันทึกการสร้างCc
เพื่อเสร็จสิ้นกระบวนการเกมไดโนมีข้อผิดพลาดที่น่ารำคาญ โดยเกมเริ่ม "ลอย" ไปทางขวาตามเวลา ทำให้ไดโนผิดจากต้นกำเนิดของเกม นั่นทำให้โปรแกรมอ่านไดโนเป็นกระบองเพชรเพราะมันมีสีเดียวกัน
คุณสามารถแก้ไขได้ด้วยการรีเฟรชหน้าเว็บอย่างต่อเนื่อง หรือโดยการวางโค้ดนี้ภายในคอนโซลในตัวตรวจสอบองค์ประกอบ:
// Make sure the dino does not drift to the right
setInterval(function (){Runner.instance_.tRex.xPos = 21}, 2000)
โปรดปฏิบัติตามคำแนะนำสไตล์ Node.js จาก Felix มันไม่ซับซ้อนและมีรูปแบบที่เรียบง่ายสำหรับสิ่งต่างๆ