ในการคำนวณเชิงวิวัฒนาการ ความหลากหลายเป็นเงื่อนไขสำคัญที่ทำให้อัลกอริทึมทำงานได้อย่างมีประสิทธิผล เพราะเมื่อมีคำตอบตัวเลือกมากเพียงพอ แรงกดดันในการคัดเลือกจะไม่ผลักประชากรเข้าสู่ค่าที่ดีที่สุดเฉพาะถิ่นเร็วเกินไป แต่ความหลากหลายก็มาพร้อมกับภาระการคำนวณมหาศาล การรันหนึ่งครั้งมักต้องประเมินคำตอบตัวเลือกหลายหมื่น乃至หลายล้านตัว เมื่อตัวเลือกถูกเขียนเป็นอาร์เรย์ของออบเจ็กต์ธรรมดาและใช้ลูปประเมินทีละรายการ เวลาส่วนใหญ่ของการคำนวณจะถูกใช้ไปกับการจัดลำดับทีละรายการและโฟลว์ควบคุมของภาษาที่ใช้ ไม่ใช่การคำนวณเชิงตัวเลขจริง ๆ ซึ่งนี่คือสาเหตุที่ลูป CPU แบบอนุกรมดั้งเดิมมีประสิทธิภาพต่ำเมื่อต้องประเมินตัวเลือกหลายหมื่นครั้งเป็นเหตุผลพื้นฐาน
การก้าวกระโดดของรูปแบบการแสดงออก: จากรายการตัวเลือกสู่กราฟการคำนวณแบบเทนเซอร์
การเปลี่ยนแปลงที่ EvoX นำมาไม่ใช่การเร่งความเร็วเฉพาะจุดของโอเปอเรเตอร์ใดโอเปอเรเตอร์หนึ่ง แต่เป็นการเปลี่ยนแปลงรูปแบบการแสดงออกของกระบวนการวิวัฒนาการ: จากการประมวลผลแบบรายการทีละตัวเลือก เปลี่ยนเป็นการคำนวณแบบกลุ่มที่ให้เทนเซอร์เป็นพลเมืองชั้นหนึ่ง ชุดตัวเลือกไม่ได้กระจัดกระจายอยู่ในอาร์เรย์ของออบเจ็กต์อีกต่อไป แต่ถูกจัดระเบียบร่วมกับผลการประเมินและสถานะของอัลกอริทึมเป็นเทนเซอร์ เพื่อให้สามารถเข้าร่วมการคำนวณได้โดยรวม
- เทนเซอร์ตัวเลือก: เขียนตัวเลือกทั้งรุ่นเป็นเทนเซอร์ที่มีรูปร่าง [ขนาดประชากร, มิติคำตอบ] ในกรณีนี้ "หนึ่งตัวเลือก" เป็นเพียงหนึ่งแถวในเทนเซอร์ ไม่ใช่ออบเจ็กต์อิสระของภาษาโฮสต์อีกต่อไป
- โอเปอเรเตอร์แบบกลุ่ม: การดำเนินการเช่นการกลายพันธุ์ทำงานกับทั้งประชากรโดยตรง เรียกใช้เพียงครั้งเดียวก็อัปเดตตัวเลือกทั้งหมดได้ ไม่ต้องเรียกซ้ำ N ครั้ง
- การประเมินแบบกลุ่ม: ได้ผลการประเมินของทั้งรุ่นในครั้งเดียวในรูปแบบ evaluate(เทนเซอร์ตัวเลือก) หน่วยนับของการประเมินเปลี่ยนจาก "ตัว" เป็น "กลุ่ม"
- กราฟการคำนวณ: การคัดเลือกและการอัปเดตสถานะไม่ใช่เพียงตรรกะควบคุมแบบอนุกรมอีกต่อไป แต่เป็นโหนดในกราฟ จึงได้รับโอกาสในการปรับให้เหมาะสมโดยคอมไพเลอร์ เช่น การหลอมรวมโอเปอเรเตอร์และการจัดตารางแบบขนาน
การเปรียบเทียบวิธีการเขียนสองแบบ
การเขียนแบบรายการใกล้เคียงกับ: ดึงตัวเลือกทีละตัว ประเมินทีละตัว เปรียบเทียบทีละตัวและอัปเดตสถานะ — ทุกขั้นตอนพึ่งพาลูปของภาษาโฮสต์ ทำให้ยากต่อการปรับให้เหมาะสมโดยรวม ส่วนการเขียนแบบเทนเซอร์คือ: เทนเซอร์ตัวเลือก → การกลายพันธุ์ → การประเมิน → การคัดเลือก → การอัปเดตสถานะ ทั้งสายถูกร้อยเรียงด้วยการดำเนินการแบบเทนเซอร์และแสดงเป็นกราฟการคำนวณหนึ่งกราฟ ซึ่งคอมไพเลอร์สามารถหลอมรวมและจัดตารางอุปกรณ์สำหรับทั้งกราฟได้ โปรดสังเกต: ตรรกะของอัลกอริทึม (การกระจายการกลายพันธุ์ แรงกดดันในการคัดเลือก) ไม่ได้ถูกเขียนใหม่ สิ่งที่ถูกเขียนใหม่คือรูปแบบการแสดงออก
