คำถามติดแท็ก reproducibility

8
ฉันจะแน่ใจได้อย่างไรว่าผลลัพธ์ของการจำลองและผลลัพธ์ในเอกสารของฉันตรงกันเสมอ?
ในหนึ่งในเอกสารของฉันฉันแสดงรายการผลลัพธ์ตัวเลขนอกเหนือจากตัวเลขบางอย่าง สิ่งที่ฉันต้องการจะทำคือตรวจสอบให้แน่ใจว่าผลลัพธ์ตัวเลขในเอกสารของฉันเห็นด้วยเสมอกับรหัส ตอนนี้ฉันเพิ่งคัดลอกผลลัพธ์เชิงตัวเลขจากผลลัพธ์การจำลองของฉันลงในกระดาษซึ่งง่ายมากและใช้เทคโนโลยีต่ำ แต่มีข้อผิดพลาดง่ายเพราะฉันสามารถคัดลอกผลลัพธ์ผิดพลาดหรือลืมซิงค์ผลลัพธ์กระดาษด้วย รหัสออก มีวิธีที่ดีในการเก็บผลลัพธ์ตัวเลขที่ฉันอ้างอิงในเอกสารของฉันให้สอดคล้องกับผลลัพธ์ที่สร้างโดยรหัสของฉันหรือไม่ (ที่นี่ฉันคิดว่าการใช้งานโค้ดนั้นทำได้ง่ายและใช้งานได้จริงทุกครั้งที่ฉันต้องการอัพเดทรายงาน) ผลลัพธ์เชิงตัวเลขเหล่านี้ไม่จำเป็นที่จะต้องยืมตัวไปเป็นแบบตาราง บางครั้งฉันมีตารางในต้นฉบับ แต่มากกว่าปกติผมได้พารามิเตอร์จำลองระบุว่าเป็นตัวเลขในสมการ ตัวอย่างจะเป็นสิ่งที่ชอบ: Y* * * *= ( y* * * *1, … , y* * * *n)y∗=(y1∗,…,yn∗)\begin{align} \mathbf{y}^{*} = (y_{1}^{*}, \ldots, y_{n}^{*}) \end{align} โดยที่ฉันต้องการแทนที่องค์ประกอบของเงื่อนไขเริ่มต้นด้วยพารามิเตอร์จริงที่ฉันใช้ในการจำลองที่ผสานระบบตัวเลขของสมการเชิงอนุพันธ์สามัญ การใช้ตารางสำหรับข้อมูลที่ใช้ครั้งเดียวเช่นตัวอย่างนี้ดูเหมือนว่ามากเกินไปและหมึกมากกว่าที่จำเป็นY* * * *y∗\mathbf{y}^{*} ฉันคิดว่าตัวเลขเป็นกรณีที่ง่ายกว่า: เมื่อใดก็ตามที่เอกสาร "สร้าง" (จากแหล่ง LaTeX, Markdown, RST ฯลฯ ) ให้เริ่มกระบวนการสร้างโดยการเรียกใช้รหัส อย่างไรก็ตามหากผู้คนมีข้อเสนอแนะที่ดีกว่าสำหรับการรักษาตัวเลขที่สร้างขึ้นโดยแบบจำลองของฉันในการซิงค์กับกระดาษของฉันฉันชอบที่จะได้ยินพวกเขา

5
ฉันควรมีเนื้อหาใดในบทความวารสาร (หรือโพสต์ออนไลน์) เพื่อให้การวิจัยการคำนวณของฉันทำซ้ำได้
ความสามารถในการทำซ้ำมีความสำคัญมากขึ้นเรื่อย ๆ ในการวิจัยทางวิทยาศาสตร์คอมพิวเตอร์ (ตัวอย่างเช่นดูบทความนี้โดย Roger Peng in Science ; ฉันทราบถึงบทความและเว็บไซต์อื่น ๆ ด้วยเช่นกัน) อย่างไรก็ตามไม่ชัดเจนว่าฉันควรรวมข้อมูลจำนวนเท่าใดในบทความวารสาร (หรือออนไลน์) การวิจัยการคำนวณของฉันทำซ้ำได้ (สมมติว่าไม่มีอุปสรรคอื่น ๆ เช่นข้อตกลงด้านทรัพย์สินทางปัญญา) มีแนวทางใดบ้างหรือไม่หากผู้คนสามารถแนะนำขั้นตอนที่นักวิจัยควรทำเพื่อให้การวิจัยทางวิทยาศาสตร์การคำนวณของพวกเขาสามารถทำซ้ำได้? การใช้คำตอบโดยเฉพาะจะเป็นวิธีที่เป็นไปได้ในการใช้คำแนะนำเหล่านั้น - เวิร์กโฟลว์ เวิร์กโฟลว์ที่ไม่เชื่อเรื่องระบบหรือใช้ Linux เป็นที่ต้องการ นอกจากนี้การพูดคุยเกี่ยวกับประสบการณ์ส่วนตัวที่เกี่ยวข้องที่คุณมีก็จะเป็นประโยชน์เช่นกัน ในกรณีเฉพาะของฉันฉันกำลังเขียนบทความเชิงทฤษฎีพร้อมตัวอย่างการคำนวณสองอย่างที่ง่ายพอที่จะทำได้ใน MATLAB ฉันคิดว่าในกรณีนี้รวมถึงสคริปต์ MATLAB รวมถึงการสังเกตรุ่นเฉพาะของ MATLAB บนเครื่องของฉันก็น่าจะเพียงพอที่จะรับรองการทำซ้ำ อย่างไรก็ตามฉันมั่นใจว่ามีสถานการณ์ที่ซับซ้อนกว่านั้นและคำแนะนำเกี่ยวกับวิธีการทำวิจัยที่ทำซ้ำได้จะเป็นประโยชน์อย่างมากสำหรับโครงการในอนาคต

6
อะไรคือวิธีที่ดีที่สุดในการทำวิจัยที่ทำซ้ำได้หากคุณต้องการห้องสมุดที่เป็นกรรมสิทธิ์
การทำซ้ำการวิจัยในการคำนวณมีจุดมุ่งหมายที่จะทำให้รหัสที่จำเป็นในการสร้างผลลัพธ์ในกระดาษคำนวณที่มีให้กับนักวิจัยคนอื่น ๆ เพื่อให้พวกเขาสามารถเรียกใช้รหัสนี้เพื่อทำซ้ำผลลัพธ์ในกระดาษนั้น ฉันต้องการให้การวิจัยทั้งหมดของฉันทำซ้ำได้ แต่ฉันพบอุปสรรคเล็กน้อย: มีเอกสารสองฉบับที่ฉันใช้งานโดยใช้แพ็คเกจสร้างความแตกต่างโดยอัตโนมัติ (เรียกว่า DAEPACK ) ในห้องสมุดที่เป็นกรรมสิทธิ์ ( CHEMKIN- II ; ข้อกำหนดสิทธิการใช้งานไม่ชัดเจน) มันจะใช้เวลานานเกินไปในการแทนที่ส่วนประกอบซอฟต์แวร์เหล่านี้ด้วยเวอร์ชันโอเพ่นซอร์ส การแทนที่โอเพนซอร์สสำหรับ CHEMKIN-II เรียกว่าCanteraแต่ Cantera อยู่ใน C ++ ในขณะที่ CHEMKIN-II อยู่ใน Fortran 77 มันต้องใช้ความพยายามอย่างมากในการปรับเปลี่ยนรหัส Cantera ให้เพียงพอเพื่อให้สามารถประมวลผลได้โดยอัตโนมัติ เครื่องมือสร้างความแตกต่างสำหรับ C ++ เนื่องจากฉันต้องการแพ็คเกจที่เป็นกรรมสิทธิ์เหล่านี้วิธีที่ดีที่สุดในการทำวิจัยของฉันให้ทำซ้ำได้มากที่สุดคือสมมติว่านักวิจัยอาจไม่สามารถเข้าถึง CHEMKIN-II ได้ เนื่องจาก DAEPACK เป็นนักแปลที่มาจากแหล่งที่มาฉันไม่จำเป็นต้องแจกจ่าย DAEPACK ฉันอาจรวมเอาท์พุทของมันซึ่งจะเป็นไฟล์ต้นฉบับของ Fortran ที่คำนวณอนุพันธ์ โดยทั่วไปหากคุณต้องการซอฟต์แวร์ที่เป็นกรรมสิทธิ์ในการทำงานของคุณและซอฟต์แวร์ที่เป็นกรรมสิทธิ์นั้นไม่สามารถใช้ได้อย่างกว้างขวาง (เช่นไม่ใช่ MATLAB, Mathematica และอื่น ๆ …

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

1
วิธีการทำซ้ำผลลัพธ์ที่เผยแพร่ในบทความของฉันได้อย่างง่ายดายโดยใช้รหัสของฉันเอง
ฉันเขียนโปรแกรม / ไลบรารีที่ฉันเคยได้ผลลัพธ์ในบทความ (นี่คือแต่คำถามของฉันคือทั่วไป) ฉันมีการทดสอบที่ฉันใช้เป็นประจำctest(ใช้เวลาไม่กี่นาทีในการทำงาน) ในการทำซ้ำบางตารางหรือตัวเลขในบทความฉันต้องสร้างสคริปต์หรือโปรแกรมควบคุมอย่างง่ายซึ่งอาจใช้เวลาประมาณ 10 นาทีบางครั้งก็มากขึ้นดังนั้นฉันจึงไม่ต้องการมีส่วนหนึ่งของชุดทดสอบปกตินี้ ในเวลาเดียวกันฉันต้องการตรวจสอบให้แน่ใจว่าผลลัพธ์จากบทความสามารถ: ทำซ้ำในภายหลัง ตรวจสอบให้แน่ใจว่าพวกเขายังคงให้ผลลัพธ์เดียวกัน / ถูกต้องหลังจากที่ฉันพัฒนาห้องสมุดต่อไป ขณะนี้ฉันพยายามที่จะมีโปรแกรมควบคุมขนาดเล็กที่ฉันเรียกใช้เป็นส่วนหนึ่งของชุดทดสอบปกติและถ้าฉันต้องการที่จะทำซ้ำผลลัพธ์จากบทความฉันไม่แสดงข้อคิดเห็นบางบรรทัดในนั้น แน่นอนฉันไม่เคยรู้ว่าเส้นที่แน่นอนและถ้าฉันต้องปรับแต่งพารามิเตอร์อื่น ๆ เพื่อให้ได้ผลลัพธ์ที่เหมือนกันในบทความ ฉันยังพยายามมีสคริปต์ Python ที่คำนวณตัวเลข / ตารางที่แน่นอนจากบทความ โดยทั่วไปแล้วสคริปต์ดังกล่าวจะหยุดทำงานหลังจากมีการอัปเดตไลบรารีเนื่องจากไม่ได้ทำงานเป็นประจำ (ใช้เวลานานเกินไป) วิธีที่ดีที่สุดที่เกิดขึ้นกับฉันคือมีตัวอย่าง Fortran (หรือ C / C ++) ที่จะรวบรวมเป็นประจำ (เป็นส่วนหนึ่งของไลบรารี) แต่ไม่ได้ทำงานในชุดทดสอบปกติ ด้วยวิธีนี้อย่างน้อยฉันก็รู้ว่ามันรวบรวมได้ดี และฉันจะทดสอบตัวอย่างง่ายๆ (เล็กกว่า) เป็นส่วนหนึ่งของชุดทดสอบปกติ วิธีที่เหมาะสมที่สุดในการจัดการปัญหานี้คืออะไร

4
อะไรจะเป็นวิธีที่ดีที่สุดในการเขียนโค้ดสำหรับกระดาษเพื่อให้ผู้อ่านสามารถจับคู่ผลลัพธ์กับโค้ดที่สร้างได้อย่างชัดเจน?
ฉันกำลังเขียนกระดาษที่ทำซ้ำได้และกระดาษนั้นมีผลการคำนวณที่สร้างโดยสคริปต์ Python (สคริปต์ MATLAB ที่คล้ายกันสร้างผลลัพธ์ที่เหมือนกันเกือบทั้งหมด) ฉันรู้สึกว่ากระดาษจะง่ายต่อการเข้าใจสำหรับผู้อ่านหากพวกเขาสามารถจับคู่การคำนวณในกระดาษกับการคำนวณในรหัส งานนำเสนอแบบแผนเชิงนามธรรมและตัวอย่างในกระดาษควรทำให้พิธีการนี้เป็นรูปธรรมมากขึ้นสำหรับผู้อ่าน (หลายคนจะเป็นวิศวกร) รหัสอาจเป็นบันทึกที่มีรายละเอียดมากที่สุดเกี่ยวกับวิธีการคำนวณและการทำให้ชัดเจนสามารถช่วยเราได้ในระหว่างกระบวนการตรวจสอบ ไม่มีใครมีข้อเสนอแนะเกี่ยวกับวิธีการทำให้การติดต่อระหว่างรหัสและผลลัพธ์การคำนวณ (ตัวเลข, สมการ) ชัดเจนมากขึ้น? ตัวอย่างเช่นฉันคิดว่าเมื่อมันมาถึงบรรทัดของโค้ดที่ใช้ขั้นตอนต่าง ๆ ในกระดาษฉันสามารถอ้างอิงหมายเลขสมการ (มันน่าอัศจรรย์ถ้าฉันสามารถอ้างอิงข้ามระหว่างรหัสและ LaTeX แต่การติดฉลากด้วยมือนั้นดี) และฉันสามารถเขียนฟังก์ชั่นที่สอดคล้องกับตัวอย่างและตัวเลขต่าง ๆ เช่น def example_1(): # Insert code corresponding to first example pass def figure_1(): # Insert code that generates Figure 1 pass หากรหัสมีขนาดใหญ่และฉันไม่ได้พยายามอธิบายว่าวิธีการทางคณิตศาสตร์ที่แตกต่างกันจำนวนมากที่ใช้ในงานวิศวกรรมนั้นเหมือนกันจริง ๆ ฉันอาจจะไม่รำคาญมากนักกับการทำให้รหัสชัดเจน แต่ให้ลักษณะนามธรรมของ กระดาษและฐานรหัสขนาดเล็กดูเหมือนว่าอาจมีค่าในแบบฝึกหัดนี้

1
แนวทางในการดำเนินการทดลองทางคอมพิวเตอร์มีอะไรบ้าง
ฟิสิกส์ชีววิทยาเคมี ฯลฯ มีชุดของกฎที่แตกต่างกันสำหรับการทดลอง: เหตุการณ์ใดที่เกี่ยวข้องกับการพิจารณาวิธีหลีกเลี่ยงการปนเปื้อนของตัวอย่างวิธีการสร้างและแก้ไขกระบวนการทำซ้ำและอื่น ๆ มาตรฐานโปรโตคอลและแนวทางปฏิบัติที่ดีที่สุดในการรับรองความถูกต้องและการทำซ้ำในการทดลองเชิงตัวเลขคืออะไร

4
คำแนะนำใด ๆ สำหรับกรอบการทดสอบหน่วยเข้ากันได้กับรหัส / ไลบรารีที่ใช้ MPI
โดยปกติฉันเขียนรหัสซีเรียลและเมื่อฉันฉันเขียนการทดสอบหน่วยด้วยกรอบการทดสอบแบบ xUnit (MATLAB xUnit, PyUnit / nose หรือกรอบการทดสอบ C ++ ของ Google) จากการค้นหาโดยคร่าวๆของ Google ฉันไม่เห็นว่าโค้ดทดสอบหน่วยผู้ปฏิบัติงานที่ใช้ MPI มากน้อยเพียงใด มีวิธีปฏิบัติที่ดีที่สุดสำหรับสิ่งนั้นหรือไม่? เปรียบเทียบกับกลยุทธ์สำหรับการทดสอบหน่วยและการพัฒนาที่ขับเคลื่อนด้วยการทดสอบฉันกำลังมองหาคำตอบที่เกี่ยวข้องกับซอฟต์แวร์ที่ฉันควรใช้สำหรับกรอบการทดสอบ (ถ้ามี) คำตอบอาจเป็น "ม้วนรหัสของคุณเอง" ซึ่ง ตัวอย่างกรณีของรหัสการทดสอบที่กำหนดเองจะเป็นประโยชน์) สิ่งที่ฉันกำลังมองหาเพื่อทดสอบส่วนใหญ่คือการประเมินฟังก์ชั่นทางด้านขวาและกิจวัตรประจำวันของ Jacobian matrix สำหรับเวลาที่จะรวม PDEs แบบกึ่งแยกส่วน ฉันจะใช้ PETSc ดังนั้นถ้ามีอะไรเฉพาะ PETSc ที่จะเป็นประโยชน์นอกเหนือไปจากกรอบการทดสอบทั่วไปมากขึ้น ชี้แจงการแก้ไข: ตัวอย่างจะอยู่ใน${PETSC_DIR}/src/ts/examples/tutorials/ex2.cที่ที่ฉันต้องการทดสอบบางสิ่งเช่นRHSFunction(การประเมินฟังก์ชั่นด้านขวา) และRHSJacobian(การประเมินเมทริกซ์จาโคเบียน) ฉันจะทดสอบกับค่าที่ทราบสำหรับด้านขวาที่ประกอบและเมทริกซ์ Jacobian ที่ประกอบขึ้น ฉันสามารถรับค่าเหล่านี้ในเชิงวิเคราะห์สำหรับอินสแตนซ์ปัญหาง่ายๆ ฟังก์ชั่นเหล่านี้เป็นฟังก์ชั่นเฉพาะแอปพลิเคชันที่จะไม่ใช้งานฟังก์ชั่นระดับแอปพลิเคชันอื่น ๆ แต่พวกเขาสามารถเรียก MPI ถ้าการประกอบเวกเตอร์หรือเมทริกซ์จะทำภายในฟังก์ชัน (เช่นในตัวอย่าง PETSc ที่เชื่อมโยงด้านบน) …

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