คำถามพื้นฐานเกี่ยวกับการปรับสูตรด้วยการไล่ระดับสีหรืออัลกอริทึมทางพันธุกรรม

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

ฉันควรทำอย่างไรหากต้องการหาพารามิเตอร์ที่ถูกต้อง สิ่งเดียวที่ฉันมีคือสูตร f (x1, x2,..) เส้นโค้งการทดลองที่ฉันกำลังเปรียบเทียบผลลัพธ์ และความคิดว่าพารามิเตอร์ควรมีลักษณะอย่างไร (x1 +- dx1, x2 +- dx2,.. ).

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

คุณจะแนะนำให้ฉันใช้อะไรในกรณีที่ง่ายกว่านี้ หากมีอัลกอริทึมอื่นๆ ที่จะนำไปใช้ที่นี่ นอกเหนือจากที่ใช้โมดูล GA มีคำอธิบายที่ชัดเจนเกี่ยวกับอัลกอริทึมเหล่านั้นหรือไม่ ฉันถามคำถามนี้ถูกที่แล้วใช่ไหม? ขอบคุณล่วงหน้า.


person user55702    schedule 25.04.2020    source แหล่งที่มา


คำตอบ (2)


ฉันไม่คุ้นเคยกับ GA หรือใช้ SGD ในสิ่งอื่นนอกเหนือจากโครงข่ายประสาทเทียม แต่ดูเหมือนว่าเมื่อค่า reflected energy บนแกน y ต่ำกว่า 10^-4 ข้อต่อจะเกิดความยากลำบากในการทำงาน เพียงไม่กี่แนวคิด:

  1. ดูสิ่งที่เกิดขึ้นที่การไล่ระดับสีที่ค่าสำหรับ y < 10^-4 มันหายไปเมื่อฟังก์ชั่นพังหรือไม่? มันส่งคืนค่าแปลก ๆ หรือไม่?
  2. กำลังตรวจสอบ lmfit และ scipy เครื่องมือเพิ่มประสิทธิภาพและเครื่องมือปรับแต่ง หากคุณยังไม่ได้ดำเนินการ
  3. ตรวจสอบว่าฟังก์ชันของคุณส่งคืนค่า NaN หรือไม่เมื่อฟังก์ชันลดลงหรือลดลงเหลือค่า y เล็กน้อย
person sbjartmar    schedule 02.05.2020

ฉันเห็นด้วยกับประเด็นที่ทำโดย sbjartmar แต่ฉันสงสัยว่ามีคำอธิบายที่ง่ายกว่าเกี่ยวกับความแตกต่างและเส้นทางในการแก้ไขความพอดีที่คุณได้รับ ฉันควรจะบอกว่าฉันไม่คุ้นเคยกับซอฟต์แวร์ Multifitting แต่ฉันสงสัยว่าซอฟต์แวร์กำลังทำบางอย่างที่คุณไม่ได้ทำ และควรลองด้วย:

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

วิธีหนึ่งที่ดีในการแก้ไขปัญหานี้คือพอดีกับพื้นที่บันทึก นั่นคือ ให้แบบจำลองของคุณคำนวณ log(Intensity) และส่งข้อมูลเป็น log(Intensity)

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

person M Newville    schedule 02.05.2020