การเพิ่มวัตถุประสงค์ระดับโลกให้มีค่าใช้จ่ายสูง


12

ฉันสนใจที่จะเพิ่มฟังก์ชั่นของพารามิเตอร์จริงจำนวนมาก ( ) ทั่วโลก(ผลจากการจำลองที่ซับซ้อน) อย่างไรก็ตามฟังก์ชันที่เป็นปัญหานั้นค่อนข้างแพงในการประเมินซึ่งต้องใช้เวลาประมาณ 2 วันสำหรับชุดพารามิเตอร์แต่ละชุด ฉันกำลังเปรียบเทียบตัวเลือกต่าง ๆ และสงสัยว่าใครมีคำแนะนำบ้าง30

ฉันรู้ว่ามีชุดวิธีการสำหรับกระบวนการประเภทนี้ที่เกี่ยวข้องกับการพัฒนาฟังก์ชั่นโดยประมาณและจากนั้นก็เพิ่มประสิทธิภาพให้สูงสุด (เช่นJones et al. "การเพิ่มประสิทธิภาพระดับโลกอย่างมีประสิทธิภาพของฟังก์ชั่นกล่องดำแพง" ) อย่างไรก็ตามดูเหมือนว่าจะเกี่ยวข้องกับรหัส

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

นี่คือคำถามของฉัน: 1) ไม่มีใครมีประสบการณ์กับการใช้งานที่เป็นอิสระของตัวแก้ / คำแนะนำทั่วโลกประเภทนี้หรือไม่? 2) มีเหตุผลที่จะชอบหรือหลีกเลี่ยงอัลกอริทึมทางพันธุกรรมที่นี่หรือไม่?

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

UPDATE:

ขอขอบคุณสำหรับความช่วยเหลือ! รายละเอียดเพิ่มเติมเล็กน้อย: ฉันไม่ต้องการข้อมูลใด ๆ นอกเหนือจากตำแหน่งสูงสุด การจำลองเป็นการกำหนดขึ้นไม่ใช่ Monte Carlo ดังนั้นความซับซ้อนนั้นไม่ใช่เรื่องใหญ่ ไม่มีขอบเขตหรือข้อ จำกัด ที่ชัดเจนเกี่ยวกับพารามิเตอร์ ข้อมูลอีกชิ้นหนึ่งที่ฉันมี (และไม่ได้พูดถึงมาก่อน) คือความรู้สึกถึงขนาดของขนาดสูงสุดที่ต้องการ ในขณะที่ฉันกำลังมองหาระดับสูงสุดของโลกฉันก็จะมีความสุขกับสิ่งใดในระดับนี้หรือใหญ่กว่า - ฉันไม่รู้ว่าสิ่งนี้จะช่วยได้หรือไม่ หวังว่าถ้าฉันทำการคัดกรองอย่างเป็นระบบมากขึ้น (hypercubes ละตินตามที่แนะนำโดย Brian Borchers) สิ่งนี้จะปรากฏขึ้น


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

(หนึ่งปีต่อมา) คุณทำอะไรลงไปบ้าง - เปลี่ยนแปลงพารามิเตอร์ 30 ตัวแบบ ...
ปฏิเสธ

เดนิส: ฉันสามารถใช้สัญชาตญาณทางกายภาพ (และโชค) เพื่อคาดเดาพารามิเตอร์ที่สำคัญที่สุดจากนั้นปรับให้พวกเขาได้ผลลัพธ์ที่ "ดีพอ" (ในกรณีนี้การค้นหาความแม่นยำที่เหมาะสมนั้นไม่สำคัญเท่ากับการหาคำตอบที่มีขนาดใหญ่พอ) ฉันไม่ได้ต้องการพลังเต็มรูปแบบของเทคนิคเหล่านี้ แต่มันก็ดีที่จะมีประโยชน์
AJK

ได้รับสิ่งนี้เมื่อ 2 1/2 ปีก่อน แต่คุณมีทางเลือกของระดับความถูกต้องในการประเมินผลการทำงานตามวัตถุประสงค์ของคุณ (การจำลองแบบกำหนดค่า) และสามารถแลกเปลี่ยนความแม่นยำกับเวลาทำงานหรือไม่
Mark L. Stone

คำตอบ:


11

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

คุณไม่ได้กล่าวถึงปัญหานี้มาจากไหน คุณวิเคราะห์พื้นผิวของความเป็นไปได้ทางสถิติ (ในกรณีที่คุณต้องการมากกว่าแค่พารามิเตอร์ที่ดีที่สุดและค่าวัตถุประสงค์) หรือแค่ปรับฟังก์ชั่นวัตถุประสงค์ให้เหมาะสม

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

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

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

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

ในขั้นตอนสุดท้ายคุณสามารถเริ่มต้นด้วยพารามิเตอร์จากการปรับพื้นผิวการตอบสนองของคุณและพยายามปรับปรุงค่าของพารามิเตอร์ที่คัดกรองแล้วโดยปรับค่าทีละตัว (ประสานงานโคตร)

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


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

  2. สมมติว่าพารามิเตอร์ของคุณมีความต่อเนื่องหากร่างของบุญเปลี่ยนแปลงได้อย่างราบรื่นเมื่อพารามิเตอร์เปลี่ยนแปลงดังนั้นโมเดลตัวแทนจึงควรทำหน้าที่ที่เหมาะสมในการปรับรูปร่างของบุญและข้อมูลอนุพันธ์ตัวแทนควรเป็นประโยชน์สำหรับการกลั่นบรรจบกัน สำหรับพารามิเตอร์ 30 ตัววิธีการปรับให้เหมาะสมแบบปลอดอนุพันธ์ที่กำหนดขึ้นควรมีประโยชน์เช่นกัน ความเรียบเนียนควรช่วย ในทางตรงกันข้ามอัลกอริทึมทางพันธุกรรมจะไม่ใช้ข้อมูลที่เป็นอนุพันธ์เลยและมักจะต้องมีการปรับพารามิเตอร์เช่นอัตราการกลายพันธุ์อัตราการรวมตัวใหม่และพารามิเตอร์การเลือกเพื่อให้ได้ประสิทธิภาพที่ดี ในฐานะที่เป็นตัวเลือกอัลกอริทึมฉันจะใช้อัลกอริธึมทางพันธุกรรมเป็นทางเลือกเพราะฉันคาดหวังว่าการเพิ่มประสิทธิภาพตัวแทนที่ได้รับการออกแบบมาเป็นอย่างดี


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

คุณถูกต้องเกี่ยวกับวิธีการค้นหาในท้องถิ่น มีวิธีการค้นหาทั่วโลก (DIRECT, การค้นหาแบบหลายสาขาและประสานงานแบบหลายระดับ) ที่ไม่ได้สร้างแบบจำลองตัวแทนและควรทำงานได้ดีกว่าวิธีการค้นหาในท้องถิ่น ฉันไม่สามารถพูดถึงประสิทธิภาพของการขนานวิธีการเหล่านี้
Geoff Oxberry

1

ดูที่ TOMLAB, DAKOTA และ OpenMDAO สำหรับการปรับแต่งกล่องดำ


แก้ไข # 3: การเพิ่มประสิทธิภาพแบบเบย์คล้ายกับ EGO:

https://github.com/mwhoffman/pybo

https://github.com/hyperopt/hyperopt

ใบอนุญาต จำกัด :

https://github.com/rmcantin/bayesopt

https://github.com/HIPS/Spearmint


แก้ไข # 2:

วิธีแรกคือการสร้าง metamodel / surrogate (ใช้ kriging / GP) รอบฟังก์ชั่นที่มีราคาแพงและใช้ข้อมูลเพิ่มเติมนี้เพื่อค้นหาจุดที่เหมาะสมที่สุดของโลกได้เร็วขึ้นและมีการประเมินน้อยลง (EGO)

แนวทางที่สองเช่นเดียวกับ MDAS คือทำการค้นหาโดยตรงด้วยการดัดแปลงที่ชาญฉลาดในหลายระดับ

วิธีการแก้ปัญหาด้วยวิธีฮิวริสติกเป็นวิธีทางพันธุกรรม / สุ่มในธรรมชาติและไม่มีการรับรองใด ๆ


แก้ไข # 1:

TOMLAB เป็นเครื่องมือที่ใช้ MATLAB ซึ่งมีความเร็ว / คุณภาพที่ดีที่สุดในการปรับแต่งตามรายงานของ Sahinidis แต่นี่เป็นเครื่องมือเชิงพาณิชย์ที่มีการใช้งานอย่างมีนัยสำคัญขององค์กร ฉันไม่ได้ใช้สิ่งนี้

DAKOTA ได้รับการปรับให้เหมาะสมกับปริมาณที่ไม่แน่นอนยิ่งกว่าการเพิ่มประสิทธิภาพทั่วไป อ้างอิงจาก c ++ และรหัส Fortran ดั้งเดิม แม้ว่าภายใต้ลิขสิทธิ์ LGPL และไบนารีที่มีให้ดาวน์โหลดก็ยากมากที่จะคอมไพล์ใหม่อย่างน้อยจากประสบการณ์ของฉันใน Win7 ด้วย GCC หรือ MSVS / ifort มีการพึ่งพาการเพิ่ม lapack, cmake สำหรับการสร้าง โดยทั่วไปนี่คือเสื้อคลุมสำหรับนักแก้ปัญหาโอเพนซอร์ซจำนวนมากและนักธุรกิจจำนวนน้อย นี่คือผลิตภัณฑ์ SNL และผสานรวมกับโครงการอื่น ๆ จาก Sandia NL อย่างแน่นหนา ฉันสามารถรวมเข้าด้วยกันได้สำเร็จแทนที่จะใช้งานประจำของ IMSL กระดาษของซาฮินินิสพลาดความขนานใหญ่ที่เป็นไปได้ด้วยดาโคต้า

OpenMDAO เป็นซอฟต์แวร์ออกแบบตามความเหมาะสมที่พัฒนาขึ้นใน Python โดย NASA ภายใต้ APACHE License ฉันลองสิ่งนี้แล้ว


ยินดีต้อนรับสู่ SciComp! ตามที่เขียนไว้ในปัจจุบันโพสต์ของคุณไม่ได้อธิบายว่าทำไมการดู TOMLAB หรือ OpenMDAO จะเป็นความคิดที่ดี (คำตอบอื่น ๆ พูดถึง DAKOTA แล้ว) เรากำลังมองหาคำตอบที่ไม่เพียง แต่ให้คำแนะนำ แต่ให้อภิปรายว่าทำไมคำแนะนำเหล่านั้นจึงมีประโยชน์มีข้อผิดพลาดที่อาจเกิดขึ้น
Geoff Oxberry

ฉันรีบตอบคำถามก่อนและตอนนี้ฉันก็อธิบายเพิ่มเติม
denfromufa

0

หากคุณไม่สามารถจ่ายได้ 30 ครั้งแต่ละพารามิเตอร์ที่แตกต่างกันจะแตกต่างกันเป็นกลุ่ม
ตัวอย่างเช่น 8 รันพารามิเตอร์ที่แตกต่างกัน 4 ตัวด้วยกันจากนั้นปรับพารามิเตอร์ที่ดีที่สุด 2 ตัว / 8 พารามิเตอร์ ...
(ฉันไม่รู้ว่าจะแลกเปลี่ยนอย่างไร การได้รับข้อมูลกับรันไทม์ทั้งหมด; โจรติดอาวุธหลายตัว ?)


-3

นี่คือรหัสที่อนุญาตให้เพิ่มประสิทธิภาพฟังก์ชั่นกล่องดำราคาแพงอย่างมีประสิทธิภาพโดยใช้ CPU แบบมัลติคอร์

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


1
นี่เป็นคำตอบเดียวกับที่คุณให้ไว้ในโพสต์นี้ นอกจากนี้ดูเหมือนว่านี่เป็นงานของคุณเอง หากเป็นจริงโปรดระบุว่าชัดเจนในคำตอบของคุณ
nicoguaro

คุณสามารถให้รายละเอียดเกี่ยวกับวิธีการที่อธิบายในเอกสารและนำไปใช้ในซอฟต์แวร์ได้หรือไม่? วิธีการที่ใช้คืออะไร? ทำไมถึงดี มีวิธีใดบ้างที่คำตอบอื่น ๆ ไม่ครอบคลุม?
nicoguaro

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