เก็กโก้ (ซอฟต์แวร์เพิ่มประสิทธิภาพ)
| เก็กโก้ | |
|---|---|
| นักพัฒนา | โลแกน บีล และจอห์น ดี. เฮเดนเกรน |
| เวอร์ชันเสถียร | 1.3.1 / 30 ธันวาคม 2025 |
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| พิมพ์ | การคำนวณทางเทคนิค |
| ใบอนุญาต | เอ็มไอที |
| เว็บไซต์ | gekko |
| ที่เก็บข้อมูล |
|
แพ็คเกจGEKKO Python [ 1 ]แก้สมการพีชคณิตเชิงอนุพันธ์และจำนวนเต็มผสมขนาดใหญ่ด้วยตัวแก้ปัญหาการเขียนโปรแกรมแบบไม่เชิงเส้น ( IPOPT , APOPT , BPOPT, SNOPT , MINOS ) โหมดการทำงานประกอบด้วยการเรียนรู้ของเครื่อง การกระทบยอดข้อมูล การเพิ่มประสิทธิภาพแบบเรียลไทม์ การจำลองแบบไดนามิก และการควบคุมการทำนายแบบ จำลองไม่เชิงเส้น นอกจากนี้ แพ็คเกจยังแก้ปัญหาการเขียนโปรแกรมเชิงเส้น (LP) การเขียนโปรแกรมกำลังสอง (QP) การเขียนโปรแกรม กำลังสองที่มีข้อจำกัดกำลังสอง (QCQP) การเขียนโปรแกรม ไม่เชิงเส้น (NLP) การ เขียนโปรแกรมจำนวนเต็มผสม (MIP) และการเขียนโปรแกรมเชิงเส้นจำนวนเต็มผสม (MILP) GEKKO มีให้ใช้งานใน Python และติดตั้งด้วย pip จาก PyPI ของ Python Software Foundation
pip install gekkoGEKKO ทำงานได้บนทุกแพลตฟอร์มและกับ Python 2.7 และ 3 ขึ้นไป โดยค่าเริ่มต้น ปัญหาจะถูกส่งไปยังเซิร์ฟเวอร์สาธารณะซึ่งจะคำนวณหาคำตอบและส่งกลับมายัง Python มีตัวเลือกสำหรับ Windows, MacOS, Linux และโปรเซสเซอร์ ARM (Raspberry Pi) เพื่อแก้ปัญหาโดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต GEKKO เป็นส่วนขยายของAPMonitor Optimization Suiteแต่ได้รวมการสร้างแบบจำลองและการแสดงภาพคำตอบไว้ใน Python โดยตรง แบบจำลองทางคณิตศาสตร์จะแสดงในรูปของตัวแปรและสมการ เช่น ปัญหามาตรฐาน Hock & Schittkowski #71 [ 2 ]ที่ใช้ทดสอบประสิทธิภาพของตัว แก้ปัญหาการเขียน โปรแกรมแบบไม่เชิงเส้นปัญหาการเพิ่มประสิทธิภาพเฉพาะนี้มีฟังก์ชันวัตถุประสงค์และอยู่ภายใต้ข้อจำกัดความไม่เท่ากันและข้อจำกัดความเท่ากันตัวแปรทั้งสี่ต้องอยู่ระหว่างขอบล่าง 1 และขอบบน 5 ค่าเดาเริ่มต้นคือปัญหาการเพิ่มประสิทธิภาพนี้ได้รับการแก้ไขด้วย GEKKO ดังแสดงด้านล่าง
จากGekko Import GEKKOm = GEKKO ( ) # เริ่มต้นgekko # เริ่มต้นตัวแปรx1 = m.Var ( value = 1 , lb = 1 , ub = 5 ) x2 = m.Var ( value = 5 , lb = 1 , ub = 5 ) x3 = m.Var ( value = 5 , lb = 1 , ub = 5 ) x4 = m.Var ( value = 1 , lb = 1 , ub = 5 ) # สมการm.Equation ( x1 * x2 * x3 * x4 > = 25 ) m.Equation ( x1 ** 2 + x2 ** 2 + x3 ** 2 + x4 ** 2 == 40 ) m.Minimize ( x1 * x4 * ( x1 + x2 + x3 ) + x3 ) m . solve ( disp = False ) # แก้สมการprint ( "x1: " + str ( x1 . value )) print ( "x2: " + str ( x2 . value )) print ( "x3: " + str ( x3 . value )) print ( "x4: " + str ( x4 . value )) print ( "Objective: " + str ( m . options . objfcnval ))การประยุกต์ใช้ GEKKO
แอปพลิเคชันต่างๆ ได้แก่การผลิตพลังงานร่วม (พลังงานและความร้อน) [ 3 ] การ ทำงานอัตโนมัติในการเจาะ [ 4 ] การควบคุมการเกิดตะกรันอย่างรุนแรง[ 5 ]การผลิตพลังงานความร้อนจากแสงอาทิตย์[ 6 ]เซลล์เชื้อเพลิงออกไซด์แข็ง[ 7 ] [ 8 ]การรับประกันการไหล[ 9 ]การเพิ่มประสิทธิภาพการกู้คืนน้ำมัน[ 10 ]การสกัดน้ำมันหอมระเหย[ 11 ]และยานไร้คนขับ (UAV) [ 12 ] มีการอ้างอิงถึง APMonitor และ GEKKO อื่นๆ อีกมากมายที่เป็นตัวอย่างของประเภทแอปพลิเคชันที่สามารถแก้ไขได้ GEKKO ได้รับการพัฒนาจากทุนวิจัยของมูลนิธิวิทยาศาสตร์แห่งชาติ (NSF) หมายเลข #1547110 [ 13 ] [ 14 ] [ 15 ] [ 16 ] และมีรายละเอียดอยู่ในชุดบทความพิเศษเกี่ยวกับการจัดตารางเวลาและการควบคุมแบบผสมผสาน[ 17 ]การกล่าวถึง GEKKO ที่น่าสนใจอื่นๆ ได้แก่ การแสดงรายการใน Decision Tree สำหรับซอฟต์แวร์การเพิ่มประสิทธิภาพ[ 18 ]การเพิ่มการสนับสนุนสำหรับ ตัวแก้ปัญหา APOPTและ BPOPT [ 19 ]รายงานโครงการของหลักสูตร Dynamic Optimization ออนไลน์จากผู้เข้าร่วมจากต่างประเทศ[ 20 ] GEKKO เป็นหัวข้อในฟอรัมออนไลน์ที่ผู้ใช้กำลังแก้ปัญหาการเพิ่มประสิทธิภาพและการควบคุมที่เหมาะสมที่สุด[ 21 ] [ 22 ] GEKKO ถูกใช้สำหรับการควบคุมขั้นสูงในห้องปฏิบัติการควบคุมอุณหภูมิ (TCLab) [ 23 ]สำหรับการศึกษาการควบคุมกระบวนการในมหาวิทยาลัย 20 แห่ง[ 24 ] [ 25 ] [ 26 ] [ 27 ]
การเรียนรู้ของเครื่อง

หนึ่งในแอปพลิเคชันของแมชชีนเลิร์นนิงคือการทำการถดถอยจากข้อมูลฝึกฝนเพื่อสร้างความสัมพันธ์ ในตัวอย่างนี้การเรียนรู้เชิงลึกสร้างแบบจำลองจากข้อมูลฝึกฝนที่สร้างขึ้นด้วยฟังก์ชัน โดย ใช้โครง ข่ายประสาทเทียมสามชั้น ชั้นแรกเป็นแบบเชิงเส้น ชั้นที่สองมีฟังก์ชันการกระตุ้นแบบไฮเปอร์โบลิกแทนเจนต์ และชั้นที่สามเป็นแบบเชิงเส้น โปรแกรมจะสร้างค่าน้ำหนักพารามิเตอร์ที่ลดผลรวมของกำลังสองของข้อผิดพลาดระหว่างจุดข้อมูลที่วัดได้และการคาดการณ์ของโครงข่ายประสาทเทียม ณ จุดเหล่านั้น GEKKO ใช้ตัวเพิ่มประสิทธิภาพแบบอิงตามเกรเดียนต์เพื่อกำหนดค่าน้ำหนักที่เหมาะสมที่สุด แทนที่จะใช้วิธีมาตรฐาน เช่นการแพร่กระจายย้อนกลับ เกรเดี ยนต์ถูกกำหนดโดยการหาอนุพันธ์อัตโนมัติ คล้ายกับแพ็กเกจยอดนิยมอื่นๆ ปัญหาได้รับการแก้ไขเป็นปัญหาการเพิ่มประสิทธิภาพแบบมีข้อจำกัด และจะลู่เข้าเมื่อตัวแก้ปัญหาตรงตามเงื่อนไข Karush–Kuhn–Tuckerการใช้ตัวเพิ่มประสิทธิภาพแบบอิงตามเกรเดียนต์ช่วยให้สามารถกำหนดข้อจำกัดเพิ่มเติมได้โดยใช้ความรู้เฉพาะด้านของข้อมูลหรือระบบ
จากgekko นำเข้าbrain นำเข้าnumpy เป็นnpb = brain.Brain ( ) b.input_layer ( 1 ) b.layer ( linear = 3 ) b.layer ( tanh = 3 ) b.layer ( linear = 3 ) b.output_layer ( 1 ) x = np.linspace ( -np.pi , 3 * np.pi , 20 ) y = 1 - np.cos ( x ) b.learn ( x , y )แบบจำลองเครือข่ายประสาทเทียมได้รับการทดสอบกับข้อมูลฝึกฝนหลากหลายช่วง รวมถึงการคาดการณ์นอกช่วงข้อมูลฝึกฝน เพื่อแสดงให้เห็นถึงการทำนายที่ไม่แม่นยำ การทำนายนอกชุดข้อมูลฝึกฝนได้รับการปรับปรุงด้วยการเรียนรู้ของเครื่องแบบไฮบริด ซึ่งใช้หลักการพื้นฐาน (ถ้ามี) เพื่อกำหนดโครงสร้างที่ถูกต้องในเงื่อนไขที่กว้างขึ้น ในตัวอย่างข้างต้น ฟังก์ชันการกระตุ้นแบบไฮเปอร์โบลิกแทนเจนต์ (เลเยอร์ซ่อนเร้นที่ 2) สามารถแทนที่ด้วยฟังก์ชันไซน์หรือโคไซน์เพื่อปรับปรุงการคาดการณ์นอกช่วงข้อมูลฝึกฝนได้ ส่วนสุดท้ายของสคริปต์แสดงแบบจำลองเครือข่ายประสาทเทียม ฟังก์ชันดั้งเดิม และจุดข้อมูลที่สุ่มมาเพื่อใช้ในการปรับให้เหมาะสม
import matplotlib.pyplot as pltxp = np.linspace ( -2 * np.pi , 4 * np.pi , 100 ) yp = b.think ( xp )plt.figure ( ) plt.plot ( x , y , " bo " ) plt.plot ( xp , yp [ 0 ] , " r- " ) plt.show ( )การควบคุมที่เหมาะสมที่สุด

การควบคุมที่เหมาะสมที่สุดคือการใช้การหาค่าเหมาะสมที่สุดทางคณิตศาสตร์เพื่อสร้างนโยบายที่ถูกจำกัดด้วยสม การเชิงอนุพันธ์ สม การเชิงเท่าเทียมหรือสมการเชิงอสมการและลดฟังก์ชันเป้าหมาย/รางวัลให้เหลือน้อยที่สุดการควบคุมที่เหมาะสมที่สุดขั้นพื้นฐานจะได้รับการแก้ไขด้วย GEKKO โดยการอินทิเกรตฟังก์ชันเป้าหมายและแปลงสมการเชิงอนุพันธ์ให้อยู่ในรูปแบบพีชคณิตด้วยการจัดเรียงเชิงตั้งฉากบนองค์ประกอบจำกัด
จากgekko นำเข้าGEKKO นำเข้าnumpy เป็นnp นำเข้าmatplotlib.pyplot เป็นpltm = GEKKO ( ) # เริ่มต้นgekko nt = 101 m.time = np.linspace ( 0 , 2 , nt ) # ตัวแปรx1 = m.Var ( value = 1 ) x2 = m.Var ( value = 0 ) u = m.Var ( value = 0 , lb = -1 , ub = 1 ) p = np.zeros ( nt ) # ทำเครื่องหมายจุดเวลาสุดท้ายp [ -1 ] = 1.0 final = m.Param ( value = p ) # สมการm.Equation ( x1.dt ( ) == u ) m.Equation ( x2.dt ( ) == 0.5 * x1 ** 2 ) m.Minimize ( x2 * final ) m.options.IMODE = 6 # โหมดควบคุมที่เหมาะสมที่สุดm .solve () # แก้ปัญหาplt.figure ( 1 ) # พล็อตผลลัพธ์plt.plot ( m.time , x1.value , " k- " , label = r " $ x_1 $ " ) plt.plot ( m.time , x2.value , " b- " , label = r " $ x_2 $ " ) plt.plot ( m.time , u.value , " r-- "plt.legend ( loc = " best " ) plt.xlabel ( " Time " ) plt.ylabel ( " Value " ) plt.show ( )ดูเพิ่มเติม
ลิงก์ภายนอก
- ภาพรวม GEKKO พร้อมการเรียนรู้ของเครื่องและการเพิ่มประสิทธิภาพ
- เอกสารประกอบการใช้งาน GEKKO
- ซอร์สโค้ด GEKKO
- GEKKO บน PyPIสำหรับ Python ติดตั้งด้วย pip
- GEKKO เป็นผลิตภัณฑ์โอเพนซอร์สที่ได้รับการสนับสนุนทุนวิจัยหมายเลข 1547110 จากมูลนิธิวิทยาศาสตร์แห่งชาติ (NSF)
- การอ้างอิงถึง APMonitor และ GEKKOในเอกสารทางวิชาการ
- 18 ตัวอย่างของ GEKKO : การเรียนรู้ของเครื่องจักร, การควบคุมที่เหมาะสมที่สุด, การถดถอยของข้อมูล
- สถิติการดาวน์โหลด Gekko