เครื่องมือทำซ้ำที่ดีที่สุดคือสร้างบันทึกการกระทำของคุณดังนี้:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
สิ่งนี้สามารถเขียนลงบนกระดาษได้ แต่ถ้าการทดลองของคุณเหมาะกับกรอบการคำนวณคุณสามารถใช้เครื่องมือการคำนวณเพื่อทำให้กระบวนการบันทึกเป็นส่วนหนึ่งหรือทั้งหมดโดยอัตโนมัติ (โดยเฉพาะอย่างยิ่งโดยช่วยให้คุณติดตามชุดข้อมูลอินพุตที่มีขนาดใหญ่และผลผลิต ตัวเลข)
เครื่องมือการทำซ้ำที่ยอดเยี่ยมสำหรับ Python ที่มีเส้นโค้งการเรียนรู้ต่ำแน่นอนว่าโน๊ตบุ๊ค IPython / Jupyter (อย่าลืม% logon และ% logstart magics ) เคล็ดลับ: เพื่อให้แน่ใจว่าโน้ตบุ๊คของคุณสามารถทำซ้ำได้ให้รีสตาร์ทเคอร์เนลและพยายามเรียกใช้เซลล์ทั้งหมดจากบนลงล่าง (ปุ่มเรียกใช้เซลล์ทั้งหมด): ถ้าใช้งานได้ให้บันทึกทุกอย่างในไฟล์เก็บถาวร ("แช่แข็ง") หากคุณต้องการเรียกใช้เซลล์ในลักษณะที่ไม่เป็นเชิงเส้นและไม่ต่อเนื่องและไม่ชัดเจนเพื่อหลีกเลี่ยงข้อผิดพลาดคุณจะต้องทำใหม่อีกครั้ง
เครื่องมือที่ยอดเยี่ยมอีกอย่างที่เพิ่งเกิดขึ้นในปี 2015 คือผู้รับซึ่งคล้ายกับสุมาตรา (ดูด้านล่าง) แต่สร้างขึ้นเป็นพิเศษสำหรับ Python ฉันไม่รู้ว่ามันใช้งานได้กับโน๊ตบุ๊ค Jupyter หรือไม่ แต่ฉันรู้ว่าผู้เขียนใช้มันบ่อยๆดังนั้นฉันเดาว่าถ้ามันยังไม่รองรับในปัจจุบันมันจะเป็นในอนาคต
Gitนั้นยอดเยี่ยมมากและไม่ผูกติดกับ Python มันจะช่วยให้คุณไม่เพียง แต่เก็บประวัติการทดลองรหัสชุดข้อมูลตัวเลขและอื่น ๆ ทั้งหมดของคุณเท่านั้น แต่ยังช่วยให้คุณมีเครื่องมือในการดูแลรักษา ( git pickaxe ) ร่วมมือ ( ตำหนิ ) และ debug ( git - bisect ) โดยใช้วิทยาศาสตร์ วิธีการแก้จุดบกพร่อง (เรียกว่าการแก้จุดบกพร่องเดลต้า ) นี่คือเรื่องราวของนักวิจัยที่สวมบทบาทพยายามสร้างระบบบันทึกการทดลองของเขาเองจนกระทั่งมันกลายเป็นโทรสารของ Git
อีกเครื่องมือทั่วไปทำงานกับภาษาใด ๆ (ที่มี API หลามบนpypi ) เป็นเกาะสุมาตราซึ่งถูกออกแบบมาเพื่อช่วยให้คุณทำจำลองแบบการวิจัย ( จำลองแบบมีจุดมุ่งหมายที่จะให้ผลลัพธ์ที่เหมือนกันได้รับรหัสเดียวกันที่แน่นอนและโปรแกรมในขณะที่การทำสำเนามีจุดมุ่งหมายในการผลิต ผลลัพธ์เดียวกันนี้ให้สื่อใด ๆ ก็ตามซึ่งเป็นเรื่องยากและเสียเวลามากและไม่สามารถทำได้โดยอัตโนมัติ)
นี่คือวิธีที่สุมาตราทำงาน: สำหรับการทดสอบแต่ละครั้งที่คุณดำเนินการผ่านสุมาตราซอฟต์แวร์นี้จะทำหน้าที่เหมือน "บันทึกสถานะเกม" ซึ่งมักพบในวิดีโอเกม แม่นยำยิ่งขึ้นมันจะประหยัด:
- พารามิเตอร์ทั้งหมดที่คุณให้ไว้;
- สถานะซอร์สโค้ดที่แน่นอนของแอปพลิเคชันทดสอบและไฟล์กำหนดค่าทั้งหมดของคุณ
- ผลลัพธ์ / แปลง / ผลลัพธ์และไฟล์ใด ๆ ที่สร้างโดยแอปพลิเคชันทดสอบของคุณ
จากนั้นจะสร้างฐานข้อมูลด้วยการประทับเวลาและข้อมูลเมตาอื่น ๆ สำหรับการทดสอบแต่ละครั้งของคุณซึ่งคุณสามารถรวบรวมข้อมูลได้ในภายหลังโดยใช้ webGUI เนื่องจากสุมาตราบันทึกสถานะทั้งหมดของแอปพลิเคชันของคุณสำหรับการทดสอบที่เฉพาะเจาะจง ณ เวลาใดเวลาหนึ่งคุณสามารถกู้คืนรหัสที่สร้างผลลัพธ์เฉพาะเมื่อใดก็ได้ที่คุณต้องการดังนั้นคุณจึงสามารถทำการวิจัยซ้ำได้ในราคาต่ำ คุณทำงานกับชุดข้อมูลขนาดใหญ่ แต่คุณสามารถกำหนดค่าข้อยกเว้นหากคุณไม่ต้องการบันทึกทุกอย่างทุกครั้ง)
เครื่องมือที่ยอดเยี่ยมอีกอย่างหนึ่งคือZeitgeist ของ GNOME (ก่อนหน้านี้เขียนใน Python แต่ตอนนี้เปลี่ยนเป็น Vala) ซึ่งเป็นระบบบันทึกการกระทำที่มีรูปแบบการทำเข็มทิศซึ่งบันทึกทุกสิ่งที่คุณทำและสามารถใช้การเรียนรู้ของเครื่องเพื่อสรุปช่วงเวลาที่คุณต้องการ เกี่ยวกับความคล้ายคลึงกันและรูปแบบการใช้งานเช่นตอบคำถามเช่น"สิ่งใดที่เกี่ยวข้องกับฉันมากที่สุดขณะที่ฉันทำงานโครงการ X เป็นเวลาหนึ่งเดือนเมื่อปีที่แล้ว" . ที่น่าสนใจZim Desktop Wikiซึ่งเป็นแอพจดบันทึกที่คล้ายกับ Evernote มีปลั๊กอินสำหรับทำงานกับ Zeitgeist
ในท้ายที่สุดคุณสามารถใช้ Git หรือ Sumatra หรือซอฟต์แวร์อื่น ๆ ที่คุณต้องการพวกเขาจะให้พลังการทำซ้ำที่เท่ากัน แต่สุมาตราได้รับการปรับแต่งเป็นพิเศษสำหรับการวิจัยทางวิทยาศาสตร์ดังนั้นจึงมีเครื่องมือแฟนซีบางอย่างเช่นเว็บ GUI เพื่อรวบรวมข้อมูล ผลลัพธ์ของคุณในขณะที่ Git ปรับให้เหมาะกับการบำรุงรักษาโค้ดมากขึ้น (แต่มีเครื่องมือในการแก้ไขข้อบกพร่องเช่น git-bisect ดังนั้นหากการทดสอบของคุณเกี่ยวข้องกับรหัสมันอาจจะดีกว่า) หรือแน่นอนคุณสามารถใช้ทั้งสองอย่าง!
/ แก้ไข: dsignสัมผัสจุดสำคัญมากที่นี่: การจำลองแบบของการตั้งค่าของคุณมีความสำคัญเท่ากับความสามารถในการทำซ้ำของแอปพลิเคชันของคุณ ในคำอื่น ๆ อย่างน้อยคุณควรให้รายการเต็มรูปแบบของห้องสมุดและคอมไพเลอร์ที่คุณใช้พร้อมกับพวกเขาแน่นอนรุ่นและรายละเอียดของคุณแพลตฟอร์ม
ส่วนตัวในการคำนวณทางวิทยาศาสตร์กับงูหลาม, ฉันได้พบว่าบรรจุภัณฑ์ใบสมัครพร้อมกับห้องสมุดเป็นเพียงเจ็บปวดเกินไปดังนั้นตอนนี้ผมเพียงแค่ใช้แพคเกจทั้งหมดในหนึ่งเดียวหลามวิทยาศาสตร์เช่นงู (กับผู้จัดการแพคเกจที่ดีCONDA ) และเพียงแค่แนะนำผู้ใช้ให้ใช้แพ็คเกจเดียวกัน อีกวิธีหนึ่งคือการจัดทำสคริปต์เพื่อสร้างvirtualenvโดยอัตโนมัติหรือจัดทำทุกอย่างโดยใช้แอปพลิเคชัน Dockerเชิงพาณิชย์ตามที่อ้างโดย dsignหรือ opensource Vagrant (ตัวอย่างเช่นpylearn2-in-a-boxซึ่งใช้ Vagrant เพื่อแจกจ่ายซ้ำได้อย่างง่ายดาย แพ็คเกจสภาพแวดล้อมเสมือน)
ในที่สุดเพื่อให้แน่ใจว่าคุณมีสภาพแวดล้อมการทำงานเต็มรูปแบบทุกครั้งที่คุณต้องการคุณสามารถสร้างเครื่องเสมือน (ดู VirtualBox) และคุณสามารถบันทึกสถานะของเครื่อง (ภาพรวม) ด้วยการทดสอบของคุณพร้อมที่จะทำงานภายใน จากนั้นคุณสามารถแชร์เครื่องเสมือนนี้กับทุกสิ่งที่รวมไว้เพื่อให้ทุกคนสามารถจำลองการทดสอบของคุณด้วยการตั้งค่าที่แน่นอน นี่อาจเป็นวิธีที่ดีที่สุดในการทำซ้ำการทดสอบโดยใช้ซอฟต์แวร์ ภาชนะบรรจุอาจเป็นทางเลือกที่มีน้ำหนักเบากว่า แต่ไม่รวมถึงสภาพแวดล้อมทั้งหมดดังนั้นความแม่นยำในการจำลองแบบจะน้อยลง
/ EDIT2: นี่เป็นวิดีโอที่ดีสรุป (สำหรับการแก้จุดบกพร่อง แต่นี้ยังสามารถนำมาใช้เพื่อการวิจัย) สิ่งที่เป็นพื้นฐานในการทำวิจัยทำซ้ำ: เข้าสู่ระบบการทดลองและแต่ละขั้นตอนอื่น ๆ ของวิธีการทางวิทยาศาสตร์ของการเรียงลำดับของ"การทดลองอย่างชัดเจน"