วิวัฒนาการที่แตกต่างของ SciPy

Wiwat Hnakar Thi Taek Tang Khxng Scipy



บทความนี้เกี่ยวกับ SciPy Differential Evolution (DE) SciPy เป็นไลบรารีของภาษา Python และ Differential Evolution เป็นเมธอดหรือฟังก์ชันของไลบรารี SciPy คนส่วนใหญ่เรียนรู้เกี่ยวกับ Python ไม่ว่าจะเป็นนักพัฒนาหรือไม่ก็ตาม เนื่องจาก Python มีไลบรารีและฟังก์ชันมากมายทำให้ Python มีความปลอดภัยและเชื่อถือได้มาก SciPy มักจะใช้สำหรับการแก้สมการเชิงอนุพันธ์และพีชคณิต การประมาณค่า การเพิ่มประสิทธิภาพ และอื่นๆ ที่นี่ เรากำลังพูดถึงการใช้ SciPy DE เพื่อช่วยให้คุณเข้าใจวิธีการใช้ฟังก์ชันวิวัฒนาการเชิงอนุพันธ์ของ SciPy ในแอปพลิเคชัน Python

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 ที่ใช้สำหรับการย่อขนาด เมื่อคุณใช้ตัวอย่างก่อนหน้านี้ในโค้ด คุณจะเข้าใจแนวคิดของวิวัฒนาการที่แตกต่างได้ชัดเจนยิ่งขึ้น