อันดับแรกเราจำเป็นต้องกำหนดที่ดีที่สุด เนื่องจากคุณไม่ได้พูดในสิ่งที่คุณคิดว่าดีที่สุดคนส่วนใหญ่จึงเลือกนิพจน์กำลังสอง ตัวอย่างเช่นสมมติว่าคุณมีมุมร่วมในปัจจุบันโดยเวกเตอร์α⃗ . เราสามารถพิจารณาการเคลื่อนไหวที่ต้องการน้อยที่สุด - ด้วยข้อผิดพลาดx⃗ =α⃗ -α⃗ s T R Tคุณสามารถกำหนดฟังก์ชันต้นทุน J=x⃗ TQx⃗ สำหรับเมทริกซ์บางตัว Q. โดยปกติเราใช้เมทริกซ์แนวทแยง แต่เมทริกซ์บวกแน่นอนใด ๆ จะทำ
ในตัวอย่างง่าย ๆ ที่มีสองมุมร่วมถ้าร่วมกัน a มีมอเตอร์ราคาถูกกว่า (อาจใกล้เคียงกับเอฟเฟกต์ท้าย) เราอาจมีฟังก์ชั่นค่าใช้จ่าย
J= [xaxข] [1002] [xaxข]เช่น การเคลื่อนไหวของข้อต่อข มีราคาแพงกว่าสองเท่า a.
ตอนนี้สมการจลนศาสตร์เป็นสูตรเมทริกซ์และในเครื่องหมาย Denavit-Hartenberg อาจเป็น:
ΠTผม=⎡⎣⎢⎢⎢100001000010xYZ1⎤⎦⎥⎥⎥ซึ่งด้านขวาแสดงถึงตำแหน่ง ( x , y, z) และการวางแนว (ตั้งค่าปัจจุบันเป็นศูนย์การหมุน) ได้รับมุมร่วมกัน
เนื่องจากเราไม่สนใจเกี่ยวกับทิศทางและเฉพาะตำแหน่งเราสามารถตัดทอนคอลัมน์ 3 คอลัมน์แรกของเมทริกซ์การแปลงล่าสุดและแถวสุดท้ายของเมทริกซ์การแปลงแรก เราสามารถแสดงสูตรนี้อย่างเท่าเทียมกันดังนี้:
⎡⎣⎢100010001000⎤⎦⎥ΠTผม⎡⎣⎢⎢⎢0001⎤⎦⎥⎥⎥=⎡⎣⎢xYZ⎤⎦⎥
การคูณทางซ้ายมือเราจะได้สามสมการ ถ้าพารามิเตอร์เป็นแบบเชิงเส้นมันจะง่ายต่อการแก้ ในกรณีนี้หากแอคชูเอเตอร์ทั้งหมดเป็นแอคชูเอเตอร์เชิงเส้น ในกรณีนี้ปัญหาที่เกิดขึ้นเป็นจริงโปรแกรมกำลังสอง เราสามารถจัดเรียงทางซ้ายมือเพื่อรับสมการ:
Kx⃗ =⎡⎣⎢xYZ⎤⎦⎥สำหรับเมทริกซ์บางตัว K.
โปรแกรมกำลังสองเป็นปัญหาที่สามารถแสดงในรูปแบบ:
ลด J=12x⃗ TQx⃗ +ค⃗ Tx⃗
ขึ้นอยู่กับ Ax⃗ ≤ข⃗ , Ex⃗ =d⃗
ในการแก้ปัญหานี้มีอัลกอริทึมจำนวนหนึ่งที่คุณสามารถใช้ได้เช่นจุดตกแต่งภายในชุดที่ใช้งานอยู่ ... แค่หาห้องสมุดที่เหมาะสมแล้วมันก็จะแก้ให้คุณ
ระบบสมการไม่เชิงเส้นนั้นยากต่อการแก้ สิ่งนี้เรียกว่าการเขียนโปรแกรมแบบไม่ใช่เชิงเส้นแต่เป็นสิ่งที่คุณมีหากคุณมีข้อต่อหมุน
โดยพื้นฐานแล้วในสถานที่ของสมการเมทริกซ์คุณมีฟังก์ชั่นที่ไม่ใช่เชิงเส้น
ลด ฉ( x ) ภายใต้ ชั่วโมง⃗ ( x ) = 0, ก.⃗ ( x ) ≤ 0 (จัดใหม่หากจำเป็นเพื่อทำให้ RHS ของข้อ จำกัด เป็นศูนย์)
อัลกอริธึมที่ใช้ในการแก้ปัญหานี้มีความซับซ้อนมากขึ้น แต่รวมถึง Interior-point, Sequential quadratic programming (SQP), Active-set, อัลกอริธึมไตร่ตรอง Trust-region เห็นได้ชัดว่าคำอธิบายวิธีการทำงานของอัลกอริทึมเหล่านี้มีความยาวมากและฉันจะปล่อยให้มันอยู่นอกขอบเขตของคำตอบนี้ พอพูดได้ว่าปริมาณของเนื้อหาในอัลกอริธึมที่ใช้สำหรับการเขียนโปรแกรมกำลังสองเพียงอย่างเดียวอาจเป็นหลักสูตรทั้งหมดด้วยตัวเอง
คุณควรหาไลบรารีเพื่อแก้ปัญหามันใช้เวลานานในการเขียนโค้ดการใช้งานที่มีประสิทธิภาพและการใช้งานที่มีประสิทธิภาพสามารถจัดการตัวแปร 100 ตัว (หรือมากกว่า) ในแต่ละครั้ง ตัวอย่างเช่นถ้าคุณใช้ MATLAB จะมีเอกสารเกี่ยวกับวิธีการใช้ฟังก์ชั่นfminconจาก Optimization Toolbox
หากต้องการแก้ปัญหาแบบออนไลน์คุณอาจต้องการ C ++ หรือการใช้งานเนทีฟอื่น ๆ เช่น NLopt โปรดทราบว่านี่อาจไม่ใช่สิ่งที่ไมโครคอนโทรลเลอร์สามารถแก้ไขได้อย่างรวดเร็วและห้องสมุดหลายแห่งอาจมีการพึ่งพาอื่น ๆ ซึ่งไม่สะดวกในการใช้งานบนไมโครคอนโทรลเลอร์ (เนื่องจากมีไว้สำหรับคอมพิวเตอร์)
หากคุณไม่กังวลเกี่ยวกับประสิทธิภาพและเพียงต้องการบางสิ่งบางอย่างที่คุณสามารถเขียนโค้ดด้วยตัวเองแล้วสมมติว่ามีฟังก์ชั่นที่คุณสามารถโทรหาเพื่อแก้ปัญหาการเคลื่อนไหวแบบผกผันคุณสามารถทำได้โดยวิธีการไล่ระดับสี ตัวอย่างเช่นการเลือกการวางแนวเริ่มต้นแบบสุ่มแก้ปัญหาผกผันจากนั้นตรวจสอบฟังก์ชันต้นทุน จากนั้นคุณสามารถใช้การวิเคราะห์การก่อกวนเพื่อตรวจสอบว่าคุณควรปรับทิศทางให้แตกต่างกันอย่างไร ตัวอย่างเช่นหากคุณตรวจสอบทิศทางที่คล้ายกันรอบทิศทางปัจจุบันของคุณ (เช่น 8 คะแนนในตารางลูกบาศก์) คุณจะได้รับการประมาณคำสั่งที่สองว่าฟังก์ชันต้นทุนแตกต่างกันไปในแต่ละทิศทางอย่างไร
ใช้การประมาณลำดับที่สอง (รู้จักกันในชื่อ Hessian matrix เนื่องจากเป็นตัวแปรหลายมิติ - 3 มิติสำหรับการวางแนว) คุณสามารถค้นหาการข้ามศูนย์ของการไล่ระดับสีของฟังก์ชันต้นทุน (เช่นการคำนวณท้องถิ่นขั้นต่ำ)
ด้วยการวางแนวที่คาดการณ์ใหม่เพียงใส่ผ่านตัวแก้ปัญหาผกผันอีกครั้งและทำซ้ำจนกว่าความแม่นยำจะเพียงพอ
โปรดทราบว่าสิ่งนี้อาจไม่ได้มีประสิทธิภาพเพราะปัญหาจลน์แบบผกผันต้องได้รับการแก้ไขซ้ำ ๆ (ดังนั้นคุณจึงต้องใช้ฟังก์ชั่นที่ต้องใช้เวลานานในการแก้ปัญหา) นอกจากนี้รหัสที่เกี่ยวข้องอาจน้อยกว่าอัลกอริธึมการปรับให้เหมาะสมเต็มที่ แต่ก็ยังค่อนข้างสำคัญและไม่ใช่การลงทุนที่ไม่มีนัยสำคัญของเวลา
ใช้วิธีใดวิธีหนึ่ง (การแก้ปัญหาอย่างเป็นทางการเป็นโปรแกรมแบบไม่เชิงเส้นหรือการใช้ฟังก์ชั่นซ้ำ ๆ เพื่อแก้ปัญหาผกผัน) วิธีการแก้ปัญหาอาจไม่เหมาะสมหากมีหลายท้องถิ่นน้อยที่สุด ในกรณีนี้คุณสามารถลองค้นหา minima ทั่วโลกโดยใช้วิธีการต่างๆ แม้ว่าจะมีตัวแก้การเขียนโปรแกรมที่ไม่ใช่เชิงเส้นคุณก็คาดหวังว่าจะได้รับค่าเริ่มต้น (เช่นมุมร่วม) คุณสามารถเรียกใช้เมธอดอย่างใดอย่างหนึ่งซ้ำ ๆ ได้โดยใช้เมล็ดพันธุ์ที่สร้างขึ้นในรูปแบบต่างๆ:
- รีสตาร์ทแบบสุ่ม (มันถูกสร้างขึ้นแบบสุ่ม)
- ตามตาราง
หรือวิธีการที่กำหนดเองอื่น ๆ
อย่างไรก็ตามโปรดทราบว่าหากมีจำนวนน้อยมากไม่มีวิธีที่ดีที่จะรับประกันได้ว่าคุณจะพบกับระดับต่ำสุดในโลก คุณสามารถปรับปรุงโอกาสของคุณเท่านั้น