การใช้อัลกอริทึมทางพันธุกรรมสำหรับการปรับจูนคอนโทรลเลอร์


9

ฉันอ่านเอกสารบางอย่างเพื่อควบคุมระบบไม่เชิงเส้น (เช่นลูกตุ้มไม่เชิงเส้น) มีหลายวิธีในการกำหนดเป้าหมายระบบที่ไม่ใช่เชิงเส้น ส่วนใหญ่คนทั่วไปมีความคิดเห็น linearizaing , backsteppingและเลื่อนโหมดควบคุม

ในกรณีของฉันฉันได้ทำส่วนทฤษฎีและการปฏิบัติในการควบคุมรูปแบบไม่เชิงเส้นของลูกตุ้มง่าย ๆ รวมทั้งปัญหาอื่น ๆ ใน C ++ สำหรับลูกตุ้มนั้นฉันได้ใช้ตัวควบคุมส่วนหลังเพื่อแก้ไขงานติดตามสำหรับการเคลื่อนที่เชิงมุมและความเร็ว ผลที่ได้คือ

θ¨+(k/m)θ˙+(g/L)sinθ=u

ที่และgm=0.5,k=0.0001,L=.2g=9.81

กราฟ 1

กราฟ 2

ผลลัพธ์ที่ดี อย่างไรก็ตามการปรับจูนคอนโทรลเลอร์ใช้เวลานาน เอกสารส่วนใหญ่ใช้อัลกอริธึมทางพันธุกรรมในการปรับแต่งคอนโทรลเลอร์เช่น PD, PID และ backstepping controllers ฉันรู้สึกไร้เดียงสาในสาขานี้และฉันหวังว่าจะมีใครบางคนให้แสงสว่างกับแนวคิดนี้เป็นอย่างยิ่งโดยเฉพาะอย่างยิ่งหากมีตัวอย่าง MATLAB สำหรับการควบคุมลูกตุ้มแบบง่าย

จนถึงตอนนี้ฉันได้ออกแบบ GUI อย่างง่ายใน C ++ / Qt เพื่อปรับแต่งคอนโทรลเลอร์ด้วยตนเอง ในภาพด้านล่างการตอบสนองของคอนโทรลเลอร์สำหรับฟังก์ชั่นขั้นตอน

สกรีนช็อตของ GUI ของแอปพลิเคชั่นปรับแต่งคอนโทรลเลอร์

คำตอบ:


1

การใช้วิธีการวิวัฒนาการ (GA เป็นหนึ่งในนั้น) สำหรับการปรับพารามิเตอร์เป็นวิธีการทั่วไป [1] ในโดเมนควบคุม โดยเฉพาะอย่างยิ่งสำหรับระบบที่ไม่ใช่เชิงเส้นโซลูชันการวิเคราะห์สำหรับพารามิเตอร์ที่เหมาะสมอาจหาได้ยาก วิธีการวิวัฒนาการเป็นวิธีหนึ่งที่จะทำการค้นหาพารามิเตอร์ที่เหมาะสมที่สุดได้อย่างมีประสิทธิภาพ

วิธีการที่ประสบความสำเร็จมากและสากลที่ใช้กันอย่างแพร่หลายเป็นCMA-ES มีการนำไปใช้งานจำนวนมากรวมถึง MATLAB ฉันรู้ว่าการทรงตัวเสาในรูปแบบต่าง ๆ มักใช้เป็นเกณฑ์มาตรฐาน

การใช้อัลกอริทึมนั้นไม่ใช่เรื่องยาก ให้คะแนนประสิทธิภาพของผลลัพธ์ของคุณ - ซึ่งเรียกว่าฟังก์ชั่นการออกกำลังกายใน EA - มักจะเป็นส่วนที่เกี่ยวข้องมากที่สุด

[1] PJ Fleming, RC Purshouse, อัลกอริทึมวิวัฒนาการในวิศวกรรมระบบควบคุม: การสำรวจ, การปฏิบัติด้านวิศวกรรมควบคุม, เล่มที่ 10, ฉบับที่ 11, พฤศจิกายน 2002, หน้า 1223-1241, ISSN 0967-0661, http: //dx.doi org


คุณเจอหนังสือดีๆเล่มไหนที่คุณคิดว่ามันคุ้มค่าที่จะอ่านเกี่ยวกับ GA ไหม
CroCo

8

อัลกอริทึมทางพันธุกรรมเป็นเทคนิคการเรียนรู้ของเครื่องเพื่อกำจัดความต้องการของผู้ใช้ในการ 'ปรับละเอียด' ระบบและอนุญาตให้คอมพิวเตอร์หาวิธีการปรับแต่งระบบ ประโยชน์ของวิธีการนี้คือทำให้เวลาของนักวิจัย / ผู้ใช้ว่างและมักจะนำไปสู่ระบบที่ได้รับการปรับให้ดีกว่าสิ่งที่นักวิจัย / ผู้ใช้จะสามารถทำได้ด้วยตนเอง

แนวคิดทั่วไปของการใช้อัลกอริทึมทางพันธุกรรมจะเป็นไปตามขั้นตอนการควบคุมพื้นฐานดังนี้:

Create_X_Number_Of_Random_Controllers()
while (Not_Yet_Satisfied_With_tuning)
    Score_Each_Controller_Based_On_Performance()
    Remove_Lowest_Performing_Controllers()
    Create_New_Controllers_By_Mixing_Best_Performers()
    Add_Slight_Randomness_For_Evolution()
Display_Top_Performer()

ตัวอย่างที่ดีที่สุดที่ฉันสามารถแสดงให้เห็นได้จากหลักการนี้ในทางปฏิบัติคือ 'เกม' ที่ใช้วิวัฒนาการทางพันธุกรรมในการออกแบบยานพาหนะที่มีความสามารถในการขับขี่ในหลักสูตร แนวคิดเดียวกันนี้ใช้กับระบบใด ๆ ที่คุณต้องการปรับจูนโดยไม่ต้องทำการจูนตัวเอง ตัวอย่าง: http://rednuht.org/genetic_cars_2/


หากนั่นคือสิ่งที่ @CroCo หมายถึงโดยใช้อัลกอริธึมทางพันธุกรรมดังนั้นวิธีการปรับแต่ง Ziegler Nichols จะเป็นตัวเลือกที่ยอดเยี่ยมสำหรับการนำไปใช้เนื่องจากเป็นขั้นตอนอย่างดี
SteveO

ฉันไม่เห็นสิ่งที่ @CroCo จะมีความหมายอีกต่อไป แต่ปัญหาของ Ziegler Nichols คือมันยังต้องการให้คุณปรับแต่งหนึ่งในองค์ประกอบที่มีอัลโลทางพันธุกรรมคุณสามารถเปลี่ยนมุมมองของระบบและมันจะ 'วิวัฒนาการ' เพื่อจับคู่โดยไม่ต้องมีนักพัฒนาซอฟต์แวร์ที่ต้องทำงานที่
ไร้เดียงสา

1
คำตอบนี้ยังคงเป็นกระบวนการทั่วไปเพื่อให้บรรลุ ขั้นตอนวิธีทางพันธุกรรมเป็นพื้นที่ของการศึกษาทั้งหมดและไกลถึงความซับซ้อน แต่จริงๆแล้วจะอธิบายในการตอบสนองสั้น ๆ ผมขอแนะนำให้อ่านบนพวกเขา แต่ถ้าคุณมีความสนใจในการใช้พวกเขาในการปรับรูปแบบของคุณ!
beeedy

2
ฉันนึกภาพอัลกอริธึมทางพันธุกรรมที่มีขอบเขต จำกัด ซึ่งค่อนข้างจะจัดวางสายอย่างมีความสุขเมื่อทำการจูน
Ramrod

1
ตามที่ @ ปลาหมึกกล่าวถึงสิ่งนี้เป็นเรื่องยากที่จะประสบความสำเร็จกับอุปกรณ์ฟิสิกส์จริงเว้นแต่ว่าคุณเต็มใจที่จะให้เวลานานในการปล่อยให้คอมพิวเตอร์ควบคุมอุปกรณ์ที่คุณพยายามปรับแต่งทางกายภาพแม้ว่าคุณจะต้องการโปรแกรม 'ผู้ปกครอง' ที่ติดตาม และให้คะแนนตัวควบคุมแต่ละตัวตามประสิทธิภาพและตรวจสอบว่าจะไม่เกิดความเสียหายกับเครื่อง ทั้งหมดนี้เป็นงานที่ค่อนข้างซับซ้อนซึ่งจะต้องใช้เวลามากในการอ่านอัลกอริธึมทางพันธุกรรมที่จะนำมาใช้นี่ไม่ใช่งานเล็ก ๆ
beeedy

2

ฉันสับสนกับสิ่งที่คุณเรียกว่าอัลกอริทึมทางพันธุกรรม PD, PID ฯลฯตัวควบคุมไม่ใช่วิธีการแก้ปัญหาแบบฮิวริสติกและแบบสุ่มและไม่ได้ใช้อัลกอริธึมวิวัฒนาการ แต่เป็นอัลกอริธึมที่กำหนดขึ้นเพื่อให้การวางเสาและศูนย์ของการตอบสนองของระบบเพื่อให้ได้ประสิทธิภาพตามที่ต้องการ (การลดข้อผิดพลาด, ความเร็วในการตอบสนอง, เวลาการตกตะกอน, ความเสถียรและการปฏิเสธการรบกวน) การอ้างอิงการเรียนรู้ที่ดีในความคิดของฉันคือหนังสือระบบควบคุมอัตโนมัติของ Kuo คุณสามารถค้นหาการรักษาที่เข้มงวดน้อยลงในหนังสือของวิศวกรรมการควบคุมอัตโนมัติของ Raven


ฉันไม่คุ้นเคยกับอัลกอริทึมทางพันธุกรรม (GA) ฉันเพิ่งเห็นบางเอกสารอ้างว่าการปรับแต่งส่วนควบคุมของพวกเขาทำได้โดยใช้ GA ไม่มีรายละเอียดเพิ่มเติมในเอกสารของพวกเขาเกี่ยวกับเรื่องนี้ ฉันไม่รู้ว่านรก GA คืออะไรและฉันจะใช้ประโยชน์ได้อย่างไร
CroCo

การใช้วิธีวิวัฒนาการสำหรับการปรับพารามิเตอร์เป็นเทคนิคทั่วไป ฉันจะพิจารณาว่าเป็นวิธีทางเลือกสำหรับแนวทางวิเคราะห์ที่คุณกำลังอธิบาย
Jakob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.