การค้นหาขั้นต่ำทั่วโลกของฟังก์ชั่น 2D ที่ราบรื่นไม่มีขอบเขตและไม่มีค่าใช้จ่ายในการประเมิน


17

ฉันมีฟังก์ชั่น non-convex 2-D แบบ จำกัด ซึ่งฉันต้องการค้นหาขั้นต่ำ ฟังก์ชั่นค่อนข้างเรียบ การประเมินค่าใช้จ่ายสูง ข้อผิดพลาดที่ยอมรับได้คือประมาณ 3% ของโดเมนของฟังก์ชันในแต่ละแกน

ฉันพยายามเรียกใช้การใช้อัลกอริธึม DIRECT ในไลบรารี NLOPT แต่มันก็ไม่ได้ให้การปรับปรุงที่ดีกว่าการค้นหาแรงเดรัจฉานในแง่ของจำนวนการประเมินฟังก์ชันที่จำเป็นสำหรับความแม่นยำที่ต้องการและมีค่าผิดปกติบางอย่าง

ฉันควรพิจารณาตัวแก้ไขการเพิ่มประสิทธิภาพระดับโลกอื่น ๆ แบบใด


คุณสามารถคำนวณการไล่ระดับสีหรือคุณจะต้องประมาณพวกมันด้วยความแตกต่างของผลหาร
Arnold Neumaier

ฉันต้องประมาณพวกเขาด้วยจำนวนที่ต่างกัน
Victor May

ในกรณีนี้วิธีการของนิวตันไม่สามารถแนะนำได้เนื่องจากอนุพันธ์อันดับสองของตัวเลขนั้นมีความไม่แน่นอนเชิงตัวเลขและยากต่อการปรับแต่งให้ทำงานได้อย่างปลอดภัย
Arnold Neumaier

@Victor พฤษภาคมคุณลงเอยด้วยอะไร? (. หากคุณสามารถโพสต์การทำงานคล้ายกับของคุณจริงๆที่จะช่วยให้ผู้คนเพื่อเปรียบเทียบและปรับแต่งขั้นตอนวิธีการที่แตกต่างกัน)
เดนิส

@ Denis ฉันพยายามทำให้อัลกอริทึมเร็วขึ้นสำหรับการติดตามวัตถุในวิดีโอ ผลลัพธ์ของอัลกอริทึมเป็นการประเมินความเป็นไปได้สำหรับแต่ละตำแหน่งภาพที่จะมีวัตถุที่ถูกติดตาม ภาพที่มีการประมาณความน่าจะเป็นเหล่านี้คือฟังก์ชั่นที่ฉันพยายามปรับให้เหมาะสม ฉันลงเอยด้วยการเดรัจฉานบังคับในขั้นตอนความละเอียดหลายขั้นตอน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึมการติดตามที่เป็นปัญหาโปรดอ่านกระดาษ "การติดตามชิ้นส่วนที่แข็งแกร่งโดยใช้ฮิสโตแกรมหนึ่ง"
Victor May

คำตอบ:


12

ฉันอยากจะแนะนำวิธีการที่แตกต่างกันบ้างเมื่อเทียบกับคำตอบอื่น ๆ แม้ว่า @ barron จะพูดถึงสิ่งเดียวกันโดยอ้อม

แทนที่จะปรับฟังก์ชั่นของคุณโดยตรงเช่นโดยการประเมินที่ชุดของจุดจุดที่ (หวังว่า) มาบรรจบกันเป็น (ท้องถิ่น) ที่ดีที่สุดคุณสามารถใช้แนวคิดของการสร้างแบบจำลองตัวแทนซึ่งเป็น เหมาะมากสำหรับปัญหาประเภทที่คุณอธิบาย (ค่าใช้จ่ายสูงเรียบขอบเขต จำกัด มิติต่ำเช่นไม่ทราบน้อยกว่า 20 รายการ)x1,x2,...,xkแบบจำลองตัวแทน

โดยเฉพาะการสร้างแบบจำลองตัวแทนทำงานโดยการตั้งค่าฟังก์ชั่นแบบของฟังก์ชั่นของคุณเป็นจริงR d R กุญแจสำคัญคือแม้ว่าแน่นอนว่าcไม่ได้เป็นตัวแทนของfอย่างสมบูรณ์แต่ก็ถูกกว่าการประเมินRdRRdR

ดังนั้นกระบวนการปรับให้เหมาะสมแบบทั่วไปจะเป็นดังนี้:

  1. ประเมินที่ชุดของเจจุดเริ่มต้นx 1 , x 2 , ... , xเจ โปรดทราบว่าไม่จำเป็นต้องใช้อนุพันธ์ โปรดทราบว่าจุดเหล่านี้ควรกระจายอย่างสม่ำเสมอทั่วทั้งพื้นที่การค้นหาเช่นโดย Latin Hypercube Sampling หรือการออกแบบการเติมพื้นที่ที่คล้ายกันJx1,x2,...,xJ
  2. ขึ้นอยู่กับชุดเดิมนี้สร้างฟังก์ชั่นรุ่นCคุณสามารถใช้การตรวจสอบข้ามการตรวจสอบรูปแบบของคุณ (เช่นใช้เฉพาะชุดย่อยของเดิมเจจุดที่จะสร้างและจากนั้นใช้ที่เหลือของชุดข้อมูลเพื่อตรวจสอบวิธีการที่ดีคาดการณ์ค่าเหล่านั้น)J
  3. ใช้เกณฑ์เช่นที่คาดว่าจะปรับปรุง (EI) เกณฑ์ที่จะหาสถานที่ที่จะ '' เติมใน '' ตัวอย่างมากขึ้นเพื่อให้ถูกต้องมากขึ้นโดยการสุ่มตัวอย่างฉ นี่เป็นการศึกษาที่ดีกว่าในทางทฤษฎีมากกว่าที่คิดและเกณฑ์ EI นั้นได้รับการวิจัยเป็นอย่างดี เกณฑ์ของ EI นั้นไม่ใช่เกณฑ์โลภดังนั้นคุณทั้งสองจึงได้รับการปรับปรุงโดยรวมที่ดีของความแม่นยำของแบบจำลองในขณะที่จัดลำดับความถูกต้องใกล้กับ Optima
  4. หากโมเดลของคุณไม่แม่นยำเพียงพอให้ทำซ้ำขั้นตอนที่ 3 หรือใช้ขั้นตอนการเพิ่มประสิทธิภาพที่คุณชื่นชอบเพื่อหาค่าที่เหมาะสมที่สุดซึ่งจะถูกประเมินได้อย่างถูกต้องมาก (เพื่อให้คุณสามารถใช้รูทีนที่คุณต้องการแม้แต่คนที่ต้องการอนุพันธ์ ประเมินฟังก์ชั่นในรูปแบบตาข่าย)

แน่นอนว่านี่เป็นงานเขียนโค้ดเพียงเล็กน้อย แต่คนอื่น ๆ จำนวนมากได้ทำการปรับใช้ที่ดีมาก ใน Matlab ฉันรู้เพียงว่ากล่องเครื่องมือซอฟต์แวร์ DACE DACE นั้นฟรี TOMLAB อาจเสนอแพ็คเกจ Matlab แต่ก็คุ้มค่ากับเงินที่เสียไป - อย่างไรก็ตามฉันเชื่อว่ามันใช้งานได้ใน C ++ และมีความสามารถมากกว่าที่ DACE เคยมี (หมายเหตุ: ฉันเป็นหนึ่งในนักพัฒนาของ DACE เวอร์ชันใหม่ซึ่งจะเปิดตัวเร็ว ๆ นี้ซึ่งจะให้การสนับสนุนเพิ่มเติมสำหรับ EGO)

หวังว่าภาพรวมคร่าวๆนี้ช่วยคุณได้โปรดถามคำถามว่ามีจุดที่สามารถทำให้ชัดเจนขึ้นหรือสิ่งที่ฉันพลาดไปหรือถ้าคุณต้องการเนื้อหาเพิ่มเติมเกี่ยวกับเรื่องนี้


Fwiw, google surrogate-model นำเสนอSurrogate Modeling Labที่ Ghent University และหนังสือวิศวกรรมการออกแบบผ่าน Surrogate Modeling , 2008 228p 0470770791 ปัญหาเกี่ยวกับวิธีการทั่วไปอย่างมากก็คือคุณจะมีอ่างล้างจานเต็มไปด้วยวิธีการแปรปรวนเพิ่มเติม กว่าฟังก์ชั่นการทดสอบจริง
เดนิส

8

3

สำหรับฟังก์ชั่นที่ราบรื่นวิธี Efficient Global Optimization ควรทำได้ค่อนข้างดีและมีประสิทธิภาพมากกว่า DIRECT อย่างมาก มีการใช้งานในTOMLAB (ไม่ได้ใช้ด้วยตนเอง) และDAKOTA (ซึ่งฉันเคยประสบความสำเร็จมาบ้าง)


1

เนื่องจากฟังก์ชั่นนั้นราบรื่นวิธีการของนิวตันจึงเป็นวิธีที่มีประสิทธิภาพที่สุดในการค้นหาขั้นต่ำ เนื่องจากฟังก์ชั่นไม่ได้นูนคุณจะต้องใช้เทคนิคปกติเพื่อให้วิธีการของนิวตันมาบรรจบกัน (การปรับเปลี่ยน Levenberg-Marquardt, การค้นหาสายหรือภูมิภาคที่เชื่อถือได้เพื่อโลกาภิวัตน์) หากคุณไม่สามารถหาอนุพันธ์ของฟังก์ชั่นของคุณให้ลองคำนวณด้วยความแตกต่างที่ จำกัด หรือใช้การอัพเดท BFGS หากคุณสงสัยว่าปัญหานั้นมีมากกว่าหนึ่งขั้นต่ำในท้องถิ่นหนึ่งจะเริ่มวิธีของนิวตันจากจุดสุ่มหรือสุ่มเลือกที่ค่อนข้างสุ่มและดูว่าพวกเขามาบรรจบกันที่ไหน


ปัญหาของฉันมีท้องถิ่นน้อยที่สุดแน่นอน มีวิธีใดบ้างในการเลือกจุดเริ่มต้น
Victor May

1
หากคุณไม่ทราบอะไรเกี่ยวกับปัญหาการสุ่มตัวอย่างเชิงสถิติเป็นตัวเลือกเดียวของคุณ
Wolfgang Bangerth

@ Wolfgang: ความคิดใดวิธีการ "สุ่มตัวอย่างทางสถิติ"? แค่ลอง 10, 100, ... เดาเริ่มต้นแบบสุ่ม? มีวิธี "ที่เข้มงวดกว่านี้" ไหม? ฉันถามเพราะฉันมีปัญหาที่คล้ายกันมากขึ้นหรือน้อยลง (ดูscicomp.stackexchange.com/q/4708/1789 )
André

ทุกอย่างขึ้นอยู่กับสิ่งที่คุณรู้เกี่ยวกับฟังก์ชั่น หากคุณรู้อะไรบางอย่างเช่น "สเกลความยาวปกติ" สำหรับฟังก์ชั่นของคุณซึ่งจะบ่งบอกว่าจะแยกออกจากกันมากแค่ไหน สิ่งนี้จะทำให้คุณมีข้อบ่งชี้ว่าคุณต้องเริ่มต้นด้วยจุดกี่จุดและเลือกว่าจะห่างกันแค่ไหน
Wolfgang Bangerth

0

เนื่องจากการประเมินของคุณมีราคาแพงคุณจึงต้องใช้ประโยชน์จากการประเมินฟังก์ชั่น sevaral ควบคู่กัน

ฉันอยากจะแนะนำให้คุณดูที่รหัสนี้ ที่อยู่เบื้องหลังการทางคณิตศาสตร์ที่อธิบายไว้ที่นี่


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