SciPy Differential Evolution ในภาษา Python คืออะไร?
Scipy เป็นห้องสมุดผิวเผิน ฟรี และเข้าใจได้ซึ่งใช้เพื่อแก้ไขปัญหาทางวิทยาศาสตร์และคณิตศาสตร์ SciPy เป็นกล่องสมบัติสำหรับนักพัฒนาเพราะห้องสมุดเต็มไปด้วยโมดูลล้ำค่า SciPy ขยายฟังก์ชันการทำงานของ NumPy ด้วยคลัสเตอร์อัลกอริทึมที่มีค่า ไลบรารี SciPy มีแพ็กเกจย่อยที่สามารถใช้สำหรับการคำนวณ เช่น scipy.io, scipy.optimize เป็นต้น SciPy สร้างฟังก์ชัน 'วิวัฒนาการที่แตกต่าง' และฟังก์ชันที่มีประสิทธิภาพมากมายในแพ็กเกจ scipy.optimize scipy.optimize ใช้สำหรับการปรับให้เหมาะสมในแอปพลิเคชัน Python
ฟังก์ชันดิฟเฟอเรนเชียลเอโวลูชันเป็นฟังก์ชันส่วนกลางที่ได้มาจากแพ็คเกจเพิ่มประสิทธิภาพของ SciPy ซึ่งใช้เพื่อค้นหาฟังก์ชันหลายตัวแปรขั้นต่ำส่วนกลาง สามารถจัดการฟังก์ชันวัตถุประสงค์หลายมิติที่ไม่เป็นเชิงเส้นและไม่สามารถแยกความแตกต่างได้ เป็นอัลกอริทึมการค้นหาที่ใช้ในการค้นหาพื้นที่ของฟังก์ชันพื้นที่ต่อเนื่อง ฟังก์ชันนี้ทำงานบนค่าจริง
ไวยากรณ์ของฟังก์ชันวิวัฒนาการที่แตกต่าง
ฟังก์ชันการวิวัฒนาการเชิงอนุพันธ์มีอยู่ใน Python โดยใช้ฟังก์ชัน differential_evolution () ไวยากรณ์ของฟังก์ชันการวิวัฒนาการที่แตกต่างแสดงไว้ด้านล่าง:
มาดูพารามิเตอร์ของฟังก์ชันกัน:
ฟังก์ชันต้องสามารถเรียกได้ด้วย f(x,*args); ขอบเขตหมายถึงลำดับของตัวแปรที่สามารถระบุได้สองวิธี: กลยุทธ์เป็นตัวเลือกหรือสตริงที่มีค่าเริ่มต้น 'best1bin'; maxiter เป็นตัวเลือกหรือค่า int; popsize เป็น int หรือตัวเลือก; tol เป็น int หรือไม่บังคับ; ค่าการกลายพันธุ์อยู่ในทศนิยมหรือไม่ก็ได้ ค่าการรวมกันใหม่อยู่ในทศนิยมหรือไม่ก็ได้ เมล็ดคือไม่มี, int, NumPy และ Random
ในหัวข้อถัดไป เราจะพูดถึงฟังก์ชันการวิวัฒนาการที่แตกต่างโดยใช้ตัวอย่างง่ายๆ
ตัวอย่างที่ 1
เริ่มจากตัวอย่างง่ายๆ ที่จะพัฒนาความสนใจของคุณในการทำความเข้าใจแนวคิดของฟังก์ชันวิวัฒนาการที่แตกต่างกัน เราใช้ฟังก์ชัน differential_evolution() เพื่อหาค่าต่ำสุด แต่เพื่อค้นหาค่าต่ำสุด ฟังก์ชันจำเป็นต้องมีขอบเขตการค้นหาและฟังก์ชันวัตถุประสงค์ที่เรียกใช้ได้ที่กำหนดไว้ ด้วยเหตุนี้ เราจึงกำหนดฟังก์ชันก่อนใช้ฟังก์ชัน differential_evolution ในโปรแกรม รหัสอ้างอิงของโปรแกรมระบุไว้ด้านล่าง:
นำเข้า อ้วน เช่น เช่น.จาก เผ็ด นำเข้า เพิ่มประสิทธิภาพ
จาก เผ็ด เพิ่มประสิทธิภาพ นำเข้า differential_evolution
นำเข้า matplotlib แผนภาพ เช่น พาย
จาก matplotlib นำเข้า ซม
แน่นอน ฟังก์ชั่น ( หน้า ) :
กับ , x = หน้า
ชม. = เช่น. ตร.ว ( กับ ** 4 + x ** 4 )
กลับ เช่น. ตร.ว ( ชม. )
DE_bounds = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]
ความละเอียด = differential_evolution ( ฟังก์ชั่น , DE_bounds )
พิมพ์ ( ความละเอียด )
เรานำเข้าไลบรารีเช่น SciPy และ NumPy สำหรับการคำนวณตัวเลขอาร์เรย์ เรานำเข้าฟังก์ชัน differential_evolution จากโมดูล scipy.optimize จากนั้น ด้วยคีย์เวิร์ด “def” เรากำหนดฟังก์ชันวัตถุประสงค์ที่เรียกได้ และส่งพารามิเตอร์ “p” เรากำหนดฟังก์ชันที่ค้นหารากที่สองของการบวกตัวแปร NumPy ได้สำเร็จ ซึ่งก็คือ z, x ค่ารากที่สองถูกเก็บไว้ในตัวแปร “h” เราส่งคืนค่ารากที่สองในฟังก์ชันที่กำหนด จะถูกส่งกลับเป็นอาร์กิวเมนต์
หลังจากนั้น เราจะกำหนดขอบเขตของตัวแปรที่สามารถแยกรายการได้โดยการอธิบายค่าต่ำสุดและค่าสูงสุดของฟังก์ชัน เราเรียกใช้ฟังก์ชัน differential_evolution โดยมี 'DE_bounds”' เป็นอาร์กิวเมนต์ เราเรียกค่าฟังก์ชันด้วยตัวแปรชื่อ res ในตอนท้ายเราใช้คำสั่งการพิมพ์เพื่อแสดงผลลัพธ์ ผลลัพธ์แสดงหลังจากรันโปรแกรม ภาพหน้าจอเอาต์พุตที่คาดไว้แสดงอยู่ด้านล่าง:
Differential_evolution() แสดงว่าค่าต่ำสุดของฟังก์ชันแสดงที่จุด (0, 0)
ตัวอย่างที่ 2
นี่เป็นอีกตัวอย่างหนึ่งของฟังก์ชันวิวัฒนาการเชิงอนุพันธ์ ในนี้ เรานำอาร์เรย์และใช้การดำเนินการต่างๆ ระหว่างกัน รหัสอ้างอิงของโปรแกรมระบุไว้ด้านล่าง:
นำเข้า อ้วน เช่น เช่น.จาก เผ็ด นำเข้า เพิ่มประสิทธิภาพ
จาก เผ็ด เพิ่มประสิทธิภาพ นำเข้า differential_evolution
แน่นอน objective_func ( ง ) :
กลับ ( ง [ 1 ] - 1.2 ) / 2 + 0.5 * ง [ 0 ] * 1.3 * ( ง [ 1 ] + 0.5 ) ** 3
_ขอบเขต = [ ( - 0.3 , 0.3 ) , ( - 0.3 , 0.3 ) ]
แจกจ่าย = differential_evolution ( object_func , _ขอบเขต , ป๊อปไซส์ = 80 , ขัด = เท็จ )
พิมพ์ ( แจกจ่าย )
ดังที่แสดงในภาพหน้าจอก่อนหน้านี้ เราได้นำเข้าไลบรารี SciPy.optimize.differential_evolution และไลบรารี NumPy เข้าสู่โปรแกรมเรียบร้อยแล้ว ตอนนี้ เรากำหนดฟังก์ชันวัตถุประสงค์ในนามที่เราพบค่าต่ำสุด เราส่งนิพจน์ทางคณิตศาสตร์ในฟังก์ชันวัตถุประสงค์และส่งกลับค่าเป็นอาร์กิวเมนต์ไปยังฟังก์ชันที่กำหนด ขอบเขตระหว่างค่าฟังก์ชันเป็นสิ่งที่จำเป็น ดังนั้น หลังจากกำหนดฟังก์ชันแล้ว เราแก้ไขทั้งค่า (สูงสุดและต่ำสุด)
หลังจากกำหนดตัวแปรที่จำเป็นทั้งหมดแล้ว เราเรียกฟังก์ชัน differential_evolution เพื่อหาค่าต่ำสุดของฟังก์ชัน เราบันทึกค่าส่งคืนขั้นต่ำของฟังก์ชันไว้ในตัวแปรที่เรียกว่า disp ในตอนท้ายของโปรแกรม เราจะส่งตัวแปร disp ในคำสั่งพิมพ์เพื่อแสดงผล หลังจากรันโปรแกรม ค่าต่ำสุดของฟังก์ชันที่กำหนดไว้จะแสดงบนหน้าจอพร้อมขอบเขต ต่อไปนี้เป็นผลลัพธ์:
ตัวอย่างที่ 3
อย่างที่เราเห็น วิวัฒนาการเชิงอนุพันธ์จะส่งคืนค่าต่ำสุดที่แตกต่างกันของฟังก์ชันวัตถุประสงค์ตามคำจำกัดความ ที่นี่ เราใช้อีกตัวอย่างหนึ่งที่เกี่ยวข้องกับ differential_evolution() รหัสอ้างอิงสำหรับโปรแกรมนี้แสดงอยู่ด้านล่าง:
นำเข้า อ้วน เช่น เช่น.จาก เผ็ด นำเข้า เพิ่มประสิทธิภาพ
จาก เผ็ด เพิ่มประสิทธิภาพ นำเข้า differential_evolution
แน่นอน obj_func ( โอเปอเรเตอร์ ) :
กลับ 3 ** 9 / 0.2 + 6 / 3 * 2 ** ยี่สิบ
เขตแดน = [ ( - 0.5 , 0.5 ) , ( - 0.5 , 0.5 ) ]
ออก = differential_evolution ( obj_func , เขตแดน , ขัด = จริง )
พิมพ์ ( 'เอาต์พุตคือ:' , ออก )
ไลบรารีถูกอิมพอร์ตเข้ามาในโปรแกรมนี้ได้สำเร็จเนื่องจากเราไม่สามารถดำเนินการตามที่เราต้องการได้หากไม่มีไลบรารีเหล่านี้ ด้วยเหตุนี้ เราจึงรวมไลบรารี SciPy ไว้ในโปรแกรม หลังจากนั้น ให้กำหนดฟังก์ชันวัตถุประสงค์ด้วยการดำเนินการที่จำเป็น เราหาค่าต่ำสุดของฟังก์ชันที่กำหนดนั้น หลังจากปรับขอบเขตของฟังก์ชันแล้ว เราเรียกฟังก์ชันที่กำหนดไว้ในวิวัฒนาการเชิงอนุพันธ์เพื่อหาค่าต่ำสุดของฟังก์ชัน สิ่งนี้จะถูกเก็บไว้ในตัวแปร เราแสดงสิ่งนี้โดยเรียกตัวแปรนี้ในคำสั่งพิมพ์ ผลลัพธ์ของโปรแกรมนี้แสดงไว้ด้านล่าง:
เช่นเดียวกับในภาพหน้าจอก่อนหน้า ค่าต่ำสุดของฟังก์ชันคือ [0.29236931, 0.16808904] คุณยังสามารถเรียกใช้ตัวอย่างเหล่านี้ในสภาพแวดล้อมของคุณเพื่อทำความเข้าใจแนวคิดของฟังก์ชัน differential_evolution ได้ดียิ่งขึ้น
บทสรุป
เรามาสรุปบทความนี้กันโดยย่อ เราเข้าใจการทำงานพื้นฐานของวิธีการวิวัฒนาการที่แตกต่างซึ่งเป็นของไลบรารี SciPy ใน Python Python เป็นภาษาล่าสุดที่มีไลบรารีที่ยืดหยุ่นมากมาย นักพัฒนาส่วนใหญ่ได้รับความช่วยเหลือในการแก้โครงสร้างโค้ดที่ซับซ้อนโดยฟังก์ชันและไลบรารีที่กำหนดไว้ล่วงหน้า วิวัฒนาการที่แตกต่างเป็นฟังก์ชันหรือวิธีการเพิ่มประสิทธิภาพแพ็คเกจ SciPy ที่ใช้สำหรับการย่อขนาด เมื่อคุณใช้ตัวอย่างก่อนหน้านี้ในโค้ด คุณจะเข้าใจแนวคิดของวิวัฒนาการที่แตกต่างได้ชัดเจนยิ่งขึ้น