คำถามติดแท็ก automatic-differentiation

17
มีตัวแก้ปัญหาการเขียนโปรแกรมแบบไม่เชิงเส้นคุณภาพสูงสำหรับ Python หรือไม่?
ฉันมีปัญหาการเพิ่มประสิทธิภาพทั่วโลกที่ไม่ท้าทายเพื่อแก้ปัญหา ปัจจุบันผมใช้กล่องเครื่องมือเพิ่มประสิทธิภาพของ MATLAB (โดยเฉพาะfmincon()กับอัลกอริทึม = 'sqp') ซึ่งมีประสิทธิภาพมาก อย่างไรก็ตามรหัสของฉันส่วนใหญ่อยู่ใน Python และฉันก็ชอบที่จะเพิ่มประสิทธิภาพใน Python ด้วยเช่นกัน มีตัวแก้ NLP ที่มีการผูก Python ที่สามารถแข่งขันได้fmincon()หรือไม่ มันจะต้อง สามารถรับมือกับความไม่เสมอภาคและความไม่เท่าเทียมกันได้ ไม่ต้องการให้ผู้ใช้จัดหายาโคบ ไม่เป็นไรหากไม่รับประกันว่าจะมีประสิทธิภาพระดับโลก ( fmincon()ไม่) fmincon()ฉันกำลังมองหาบางสิ่งบางอย่างที่ทนทานลู่ไปยังท้องถิ่นที่เหมาะสมแม้สำหรับความท้าทายปัญหาและแม้ว่ามันจะช้ากว่าเล็กน้อย ฉันได้พยายามแก้หลายที่ให้บริการผ่าน OpenOpt และพบว่าพวกเขาจะด้อยกว่าของ fmincon/sqpMATLAB เพียงเพื่อเน้นฉันมีสูตรเวิ้งว้างและแก้ปัญหาที่ดี เป้าหมายของฉันคือการเปลี่ยนภาษาเพื่อให้เวิร์กโฟลว์มีความคล่องตัวมากขึ้น เจฟฟ์ชี้ให้เห็นว่าคุณลักษณะบางอย่างของปัญหาอาจเกี่ยวข้องกัน พวกเขาคือ: 10-400 ตัวแปรการตัดสินใจ 4-100 ข้อ จำกัด ความเท่าเทียมกันของพหุนาม (ดีกรีพหุนามมีช่วงตั้งแต่ 1 ถึงประมาณ 8) จำนวนข้อ จำกัด ของความไม่เท่าเทียมกันที่มีเหตุผลเท่ากับจำนวนตัวแปรการตัดสินใจประมาณสองเท่า ฟังก์ชั่นวัตถุประสงค์เป็นหนึ่งในตัวแปรการตัดสินใจ ชาวจาโคเบียนแห่งข้อ จำกัด ความเท่าเทียมมีความหนาแน่นสูงเช่นเดียวกับชาวจาโคเบียนแห่งข้อ จำกัด …

4
เมื่อใดที่ฉันควรใช้เทมเพลตนิพจน์ C ++ ในวิทยาศาสตร์การคำนวณและเมื่อใดที่ฉัน * ไม่ควรใช้เทมเพลตเหล่านี้
สมมติว่าฉันกำลังทำงานกับรหัสทางวิทยาศาสตร์ใน C ++ ในการสนทนาเมื่อเร็ว ๆ นี้กับเพื่อนร่วมงานเป็นที่ถกเถียงกันอยู่ว่าเทมเพลตนิพจน์อาจเป็นสิ่งที่ไม่ดีจริงๆซึ่งอาจทำให้ซอฟต์แวร์สามารถคอมไพล์ได้ใน gcc บางรุ่นเท่านั้น สมมุติว่าปัญหานี้ส่งผลกระทบต่อรหัสทางวิทยาศาสตร์บางประการตามที่กล่าวถึงในคำบรรยายของเรื่องล้อเลียนเรื่อง Downfallการล้อเลียนของหายนะนี้(นี่เป็นเพียงตัวอย่างเดียวที่ฉันรู้ดังนั้นลิงก์) อย่างไรก็ตามคนอื่น ๆ แย้งว่าเทมเพลตการแสดงออกมีประโยชน์เพราะพวกเขาสามารถเพิ่มประสิทธิภาพการทำงานได้เช่นเดียวกับในบทความนี้ใน SIAM Journal of Scientific Computingโดยหลีกเลี่ยงการเก็บผลลัพธ์กลางในตัวแปรชั่วคราว ฉันไม่รู้อะไรมากมายเกี่ยวกับเทมเพลตการเขียนโปรแกรมใน C ++ แต่ฉันรู้ว่ามันเป็นวิธีการหนึ่งที่ใช้ในการแยกความแตกต่างโดยอัตโนมัติและในการคำนวณช่วงเวลาซึ่งเป็นวิธีที่ฉันได้เข้าร่วมการสนทนาเกี่ยวกับเทมเพลตนิพจน์ เมื่อพิจารณาทั้งข้อดีที่เป็นไปได้ของประสิทธิภาพการทำงานและข้อเสียที่อาจเกิดขึ้นในการบำรุงรักษา (หากเป็นคำที่เหมาะสม) เมื่อใดฉันจึงควรใช้เทมเพลตนิพจน์ C ++ ในวิทยาศาสตร์การคำนวณและฉันควรหลีกเลี่ยงเมื่อใด

1
มีเครื่องมือที่สามารถสร้างส่วนขยายช่วงเวลาของฟังก์ชัน Fortran (หรือ C) โดยการแยกรหัส Fortran (หรือ C) หรือไม่
กรณีศึกษาในวิทยานิพนธ์ระดับปริญญาเอกของฉันกำหนดว่าฉันต้องมีการขยายรูทีนย่อยของ Fortran ในCHEMKIN-II (ขอโทษสำหรับการเชื่อมโยงมันเป็นสิ่งที่ดีที่สุดที่ฉันสามารถหาได้สำหรับแพ็คเกจที่ไม่ได้จัดจำหน่ายโดย Sandia National Laboratory) CHEMKIN-II เป็นแพ็คเกจทางเคมีที่ใช้ในเคมีการเผาไหม้ เนื่องจากเป็นแพ็คเกจมาตรฐานที่ใช้ในการเผาไหม้ฉันจึงไม่สามารถ (หรือมากกว่านั้นไม่ต้องการ) ใช้แพ็คเกจอื่นที่นั่น เพื่อให้ได้ส่วนขยายช่วงเวลาที่ต้องการฉันใช้เครื่องมือที่พัฒนาขึ้นภายในชื่อDAEPACK. ไบนารีเก่าที่ฉันเคยใช้เพื่อสร้างส่วนขยายช่วงเวลาที่ต้องการของรูทีนย่อย CHEMKIN-II ที่ฉันต้องการในระบบปฏิบัติการ 32- บิต (ด้วยเวอร์ชันของ libstdc ที่สอดคล้องกับ gcc 2.95) เมื่อสองสามปีที่แล้ว ล้าสมัยและจะเป็นอุปสรรคอย่างมากในการใช้งาน (เพราะฉันต้องค้นหาซอฟต์แวร์เวอร์ชั่นอื่น ๆ ที่ใช้มา 32 บิต) ซอร์สโค้ดสำหรับแพ็คเกจนี้ก็เป็นกรรมสิทธิ์ แต่เนื่องจากเดิมพัฒนาขึ้นที่ MIT และฉันทำงานที่ MIT ฉันจึงสามารถ (หลังจากใช้ความพยายามอย่างมาก) ในการรับซอร์สโค้ดสำหรับ DAEPACK เมื่อใช้ซอร์สโค้ดที่ฉันมีฉันสามารถรวบรวม DAEPACK รุ่นที่เข้ากันได้กับ Linux เวอร์ชัน 64 บิตและ libstdc รุ่นที่สอดคล้องกับ gcc 4.xx …

2
เกี่ยวกับการสร้างความแตกต่างโดยอัตโนมัติซอร์สโค้ด - การแปลง (STC) มีประสิทธิภาพมากกว่าตัวดำเนินการโอเวอร์โหลด (OO) หรือไม่
เรากำลังทำงานกับแบบจำลอง Bayesian สำหรับกระบวนการ space-time และกำลังใช้ตัวเก็บตัวอย่าง No-U-Turn (NUTS) ที่ต้องใช้แบบจำลองสำหรับความน่าจะเป็นในการบันทึกและการไล่ระดับสีตามพารามิเตอร์ของแบบจำลอง ยิ่งไปกว่านั้นเรามีฟังก์ชั่นความน่าจะเป็นบันทึกที่ค่อนข้างซับซ้อน , ที่เกี่ยวข้องกับการแจกแจงเชิงสถิติ, ผลิตภัณฑ์ kronecker, เลขชี้กำลัง, อัตราส่วน, คำแถลง if-else เป็นต้นและจำเป็นต้องจัดให้มัน แพ็คเกจจำนวนมาก ( MCMC ของสแตนเลย์และ จูเลีย ) ใช้ตัวดำเนินการมากเกินไป (เพื่อความรู้ที่ดีที่สุดของฉัน) เพื่อรับการไล่ระดับสีโดยอัตโนมัติf:Rn→Rf:Rn→Rf : \mathbb{R}^n \rightarrow \mathbb{R} หากเราสามารถสร้างฟังก์ชั่นการไล่ระดับสีของเราเองได้บางทีอาจใช้เครื่องมือกระจายรหัสอัตโนมัติการแปลงซอร์สโค้ดเราจะได้ประสิทธิภาพที่ดีขึ้นหรือ OO ดีหรือดีกว่าหรือไม่

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