En iyi yeniden üretilebilirlik aracı, eylemlerinizin bir günlüğünü, bunun gibi bir şey yapmaktır:
experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported
Bu, bir kağıda yazılabilir, ancak denemeleriniz hesaplama çerçevesine uyuyorsa, hesaplama araçlarını bu kayıt sürecini kısmen veya tamamen otomatikleştirmek için kullanabilirsiniz (özellikle çok büyük olan girdi veri setlerini ve çıktıyı izlemenize yardımcı olarak) rakamlar).
Düşük öğrenme eğrisine sahip Python için harika bir tekrarlanabilirlik aracı elbette IPython / Jupyter Notebook'tur ( % logon ve% logstart magics'i unutmayın ). İpucu: dizüstü bilgisayarınızın çoğaltılabilir olduğundan emin olmak için çekirdeği yeniden başlatın ve tüm hücreleri yukarıdan aşağıya doğru çalıştırmayı deneyin (düğme Tüm Hücreleri Çalıştır): çalışıyorsa, daha sonra her şeyi bir arşiv dosyasına ("dondurma") kaydedin; Hataları önlemek için hücreleri doğrusal olmayan ve sıralı olmayan ve belirgin olmayan bir şekilde çalıştırmanız gerekirse , biraz yeniden çalışmanız gerekir.
Çok yakın zamanda ortaya çıkan bir başka harika araç (2015), özellikle Sumatra'ya benzeyen (aşağıya bakınız) bir tarif, ancak Python için özel olarak yapılmış. Jupyter Notebook'larla çalışıp çalışmadığını bilmiyorum, ancak yazarın bunları sık kullandığını biliyorum, bu nedenle şu anda desteklenmiyorsa gelecekte de olacağını tahmin ediyorum.
Git de harika ve Python'a bağlı değil. Yalnızca tüm deneylerinizin, kodunuzun, veri kümelerinin, rakamların vb. Geçmişini tutmamanıza yardımcı olmakla kalmayacak, aynı zamanda bir bilimsel kullanarak ( git kazma ), işbirliği yapma ( suçlama ) ve hata ayıklama ( git - bisect ) uygulamalarını da sağlayacak. hata ayıklama yöntemi ( delta hata ayıklama olarak adlandırılır ). İşte kendi deneylerini yapmaya çalışan kurgusal bir araştırmacının hikayesini , Git'in bir faktörü haline gelene kadar kayıt sistemi.
Herhangi bir dilde ( pypi'de bir Python API'siyle ) çalışan diğer bir genel araç da, özellikle kopyalanabilir araştırmalar yapmanıza yardımcı olmak için tasarlanmış ( yinelenebilir aynı kod ve yazılımları verilen aynı sonuçları elde etmeyi amaçlarken , çoğaltılabilirlik de üretmeyi amaçlar) tasarlanan Sumatra'dır . Çok zor ve zaman alıcı olan ve otomatikleştirilemeyen, herhangi bir ortama verilen aynı sonuçlar).
Sumatra nasıl işliyor: Sumatra üzerinden yaptığınız her deney için, bu yazılım video oyunlarında sıkça bulunan bir "oyun durumunu kaydet" gibi davranacaktır. Daha doğrusu, kurtaracak:
- verdiğiniz tüm parametreler;
- tüm deneysel uygulamanızın ve config dosyalarınızın tam kaynak kod durumu;
- çıktı / grafikler / sonuçlar ve ayrıca deneysel uygulamanız tarafından üretilen herhangi bir dosyayı.
Daha sonra, deneylerinizin her biri için zaman damgasına ve diğer meta verilere sahip bir veritabanı oluşturacaktır, daha sonra webGUI'yi kullanarak tarama yapabilirsiniz. Sumatra, başvurunuzun tam durumunu belirli bir zamanda belirli bir noktada belirli bir deneme için kaydettiğinden, istediğiniz anda belirli bir sonuç üreten kodu geri yükleyebilirsiniz, böylece düşük maliyetle tekrarlanabilir bir araştırma yapabilirsiniz (depolama için büyük veri kümeleri üzerinde çalışıyorsunuz, ancak her zaman her şeyi kaydetmek istemiyorsanız istisnaları yapılandırabilirsiniz).
Bir başka harika araç, GNOME’un Zeitgeist’idir (daha önce Python’da kodlanmış ancak şimdi Vala’ya taşınmış), her şeyi pekiştiren bir eylem günlüğü sistemi olan ve yaptığınız her şeyi kaydeden ve makine temelli öğrenmeyi kullanarak, öğeleri temel alan arasındaki ilişkiyi istediğiniz bir süre boyunca özetlemek için kullanabilirsiniz. benzerlik ve kullanım şekilleri üzerine, örneğin "Geçen yıl bir ay boyunca X projesi üzerinde çalışırken benimle en alakalı olan ne oldu?" . İlginçtir, Evernote'a benzer bir not alma uygulaması olan Zim Desktop Wiki'nin Zeitgeist ile çalışacak bir eklentisi vardır.
Sonunda Git veya Sumatra ya da istediğiniz herhangi bir yazılımı kullanabilirsiniz, bunlar size yaklaşık olarak aynı kopyalanabilirlik gücü sağlarlar, ancak Sumatra, araştırmak için bir web GUI gibi birkaç fantezi araç sağlar. sonuçlarınız Git, kod bakımına göre daha uyarlanmış olsa da (ancak git-bisect gibi hata ayıklama araçları vardır, bu nedenle deneyleriniz kod içeriyorsa, aslında daha iyi olabilir). Ya da elbette ikisini de kullanabilirsiniz!
/ EDIT: dsign burada çok önemli bir noktaya değindi: kurulumunuzun tekrarlanabilirliği uygulamanızın tekrar edilebilirliği kadar önemlidir. Başka bir deyişle, en azından tam sürümleri ve platformunuzun detayları ile birlikte kullandığınız kitaplıkların ve derleyicilerin tam bir listesini vermelisiniz .
Şahsen, Python ile yapılan bilimsel hesaplamada, bir uygulamayı kitaplıklar ile birlikte paketlemenin çok acı verici olduğunu buldum, bu yüzden şimdi sadece Anaconda gibi bir all-in-one bilimsel python paketi kullanıyorum (büyük paket yöneticisi conda ile ), ve sadece kullanıcılara aynı paketi kullanmalarını tavsiye edin. Başka bir çözüm, otomatik olarak bir sanalenv oluşturmak için bir komut dosyası sağlamak veya dsign veya açık kaynak kodlu Vagrant tarafından belirtilen ticari Docker uygulamasını kullanarak her şeyi paketlemek olabilir (örneğin , kolayca yeniden dağıtılabilen bir ürün üretmek için Vagrant kullanan bir kutu içi p22 ile). sanal ortam paketi).
Son olarak, ihtiyaç duyduğunuz her zaman tam olarak çalışan bir ortama sahip olduğunuzdan emin olmak için, sanal bir makine (VirtualBox'a bakın) yapabilir ve hatta makinenizin durumunu (anlık görüntü) denemeniz için çalışmaya hazır bir şekilde kaydedebilirsiniz. Daha sonra bu sanal makineyi dahil olan her şeyle paylaşabilirsiniz, böylece denemenizi tam kurulumunuzla yineleyebilirsiniz. Yazılım tabanlı bir deneyi kopyalamanın en iyi yolu muhtemelen budur. Konteynırlar daha hafif bir alternatif olabilir, ancak bütün ortamı içermezler, böylece çoğaltma doğruluğu daha az sağlam olacaktır.
/ EDIT2: İşte size özetleyebileceğiniz harika bir video (hata ayıklamak için ama bu araştırma için de geçerli olabilir) tekrarlanabilir araştırma yapmak için neyin temel olduğunu: deneylerinizi ve bilimsel yöntemin diğer adımlarını bir tür "açık deney" olarak günlüğe kaydetme .