หลักคิดสำคัญของ EvoX คือ นักวิจัยไม่ควรเสียเวลากับการสื่อสารแบบขนาน การจัดสรรอุปกรณ์ และความทนทานต่อข้อผิดพลาดแบบกระจาย ดังนั้นระบบจึงถูกแยกออกเป็นห้าโมดูลระดับแรก ได้แก่อัลกอริทึม โมดูลปัญหา เวิร์กโฟลว์ โมดูลเฝ้าสังเกตและ ตัวจัดตารางเวลา Runtime โดยสี่โมดูลแรกตอบคำถามว่า "วิวัฒนาการอะไร วิวัฒนาการอย่างไร จัดระเบียบอย่างไร และสังเกตอย่างไร" ส่วนตัวจัดตารางเวลา Runtime ตอบคำถามว่า "คำนวณที่ไหน และทำให้คำนวณได้อย่างไร" เมื่อเส้นแบ่งนี้ชัดเจนแล้ว นักวิจัยเพียงมุ่งเน้นที่ "จะวิวัฒนาการอย่างไร" ส่วนระบบระดับล่างรับผิดชอบจัดตารางการคำนวณไปยัง GPU อุปกรณ์เร่งความเร็ว หรือคลัสเตอร์แบบกระจาย
ขอบเขตหน้าที่ของทั้งห้าโมดูล
- โมดูลอัลกอริทึม: อธิบายเฉพาะตรรกะการค้นหาและการอัปเดต (การเลือก การผสมข้าม การกลายพันธุ์ กฎการอัปเดต) ไม่ผูกกับปัญหาเฉพาะใด ๆ และไม่รับรู้ว่าเทนเซอร์ถูกวางบนการ์ดใบใด
- โมดูลปัญหา: ให้บริการอินเทอร์เฟซประเมินแบบรวมแก่ภายนอก โดยห่อหุ้มการจำลอง ฟังก์ชันเป้าหมาย หรือสภาพแวดล้อมของฝั่งธุรกิจให้อยู่ในรูปแบบที่ฐานรากเรียกใช้ได้โดยตรง
- เวิร์กโฟลว์: จัดระเบียบกระบวนการวิวัฒนาการตามระยะ (การเริ่มต้น การวิวัฒนาการแบบวนซ้ำ การตัดสินการลู่เข้า ฯลฯ) กำหนดว่า "ทำอะไรก่อน แล้วทำอะไรต่อ"
- โมดูลเฝ้าสังเกต: เก็บรวบรวมตัวชี้วัดในแต่ละระยะ บันทึกสถานะประชากรและเส้นโค้งการลู่เข้า เพื่อการวิเคราะห์และดีบัก
- ตัวจัดตารางเวลา Runtime: ทำหน้าที่เป็นชั้นดำเนินการแบบรวม ซ่อนความแตกต่างของพลังประมวลผลต่างชนิดกัน กระจายการคำนวณแบบกลุ่มไปยัง GPU อุปกรณ์เร่งความเร็ว หรือคลัสเตอร์แบบกระจาย และ接管รายละเอียดด้านการขนานและการสื่อสาร
ประโยชน์ด้านการโยกย้ายที่ได้จากการแยกส่วน
รูปแบบความร่วมมือผ่านอินเทอร์เฟซแบบ "รวมตัวสูง เชื่อมโยงต่ำ" นี้ ทำให้อัลกอริทึมและปัญหาเป็นอิสระต่อกัน และทำให้ปัญหาและพลังประมวลผลเป็นอิสระต่อกัน เมื่อนักวิจัยพัฒนาโอเปอเรเตอร์กลายพันธุ์ตัวใหม่ ก็เพียงทำตรรกะวิวัฒนาการให้เสร็จในโมดูลอัลกอริทึม โมดูลปัญหายังคงให้บริการอินเทอร์เฟซประเมินแบบรวม เวิร์กโฟลว์และโมดูลเฝ้าสังเกตคงรูปแบบการจัดระเบียบเดิม ส่วนตัวจัดตารางเวลา Runtime จะกระจายการคำนวณเทนเซอร์แบบกลุ่มไปยัง GPU หรือคลัสเตอร์แบบกระจายโดยอัตโนมัติ โดยไม่ต้องแก้ไขโค้ดระดับล่างใด ๆ
เนื่องจากอินเทอร์เฟซมีความเสถียร ฐานรากชุดนี้จึงรองรับสถานการณ์วิวัฒนาการหลายประเภทพร้อมกันได้ ทั้งการเรียนรู้แบบเสริมกำลัง การเขียนโปรแกรมเชิงพันธุกรรม และการหาค่าเหมาะที่สุดเชิงการจัดกลุ่ม ช่วยหลีกเลี่ยงการสร้างโครงสร้างพื้นฐานทางวิศวกรรมสำหรับการขนาน การจัดตาราง และการดำเนินการแบบกระจายซ้ำสำหรับแต่ละสาขา สิ่งที่ต้องแยกแยะคือ การแยกส่วนลด "งานวิศวกรรมที่ซ้ำซ้อน" ไม่ใช่ "ความสามารถในการคำนวณ": การแบ่งชั้นจะมีประสิทธิภาพจริงหรือไม่ ยังต้องใช้การทดลองอ้างอิงเพื่อตรวจสอบว่าค่าใช้จ่ายในการจัดตารางยอมรับได้หรือไม่
