Di salah satu makalah saya, saya mencantumkan beberapa hasil numerik di samping beberapa angka. Yang ingin saya lakukan adalah memastikan bahwa hasil numerik dalam makalah saya selalu setuju dengan kode. Saat ini, saya hanya langsung menyalin hasil numerik dari hasil simulasi saya ke dalam kertas, yang sangat sederhana dan berteknologi rendah, tetapi rawan kesalahan, karena saya bisa salah menyalin hasil, atau lupa untuk menyinkronkan hasil kertas dengan output kode.
Apakah ada cara yang baik untuk menjaga hasil numerik yang saya kutip di koran saya sinkron dengan hasil yang dihasilkan oleh kode saya? (Di sini, saya berasumsi bahwa mengeksekusi kode itu mudah dan praktis dilakukan setiap kali saya ingin memperbarui makalah saya.) Hasil numerik ini tidak selalu cocok untuk bentuk tabel. Kadang-kadang, saya memiliki tabel dalam naskah, tetapi lebih umum, saya memiliki parameter simulasi terdaftar sebagai angka dalam persamaan . Contohnya akan seperti:
di mana saya ingin mengganti elemen kondisi awal dengan parameter aktual yang saya gunakan dalam simulasi yang secara numerik mengintegrasikan sistem persamaan diferensial biasa. Menggunakan tabel untuk data satu kali saja seperti contoh ini sepertinya terlalu banyak menghabiskan waktu dan lebih banyak tinta daripada yang diperlukan.
Saya berasumsi bahwa angka-angka adalah kasus yang lebih mudah: setiap kali dokumen "dibangun" (dari sumber LaTeX, Markdown, RST, dll.), Mulailah proses pembuatan dengan mengeksekusi kode. Namun, jika orang memiliki saran yang lebih baik untuk menjaga angka yang dihasilkan oleh simulasi saya sinkron dengan kertas saya, saya akan senang mendengarnya.
sumber
spin()
fungsi baru . Secara pribadi saya pikir keluhan Greg Wilson tentang pemrograman melek cukup lumayan. Saya memiliki pengalaman mengerikan yang sama dengan yang ia gambarkan dengan noweb, tetapi debugging yang berbelit-belit tidak ada dalam alat modern. Untuk CI yang melek huruf, gunakan doxygen. Knitr adalah sesuatu yang lebih mudah di-debug daripada R berkat caching dan penanganan lingkungan.Apa yang Anda minta adalah tantangan besar Elsivier dari "Kertas Eksekusi" . Sementara banyak pendekatan telah dicoba, tidak ada yang semenarik yang disarankan penulis. Berikut adalah beberapa contoh teknik yang digunakan.
Proyek Madagaskar mengambil pendekatan Anda, di dalam skrip make memiliki simulasi menjalankan yang menghasilkan angka dan kertas secara bersamaan.
IPython Notebook menyediakan dokumen yang dapat dieksekusi saat Anda membaca dan menghasilkan gambar dengan isi hati Anda. (Saya pernah melihat plugin kata, Mathematica, dan banyak solusi lain yang digunakan dengan cara yang sama)
VisTrails menggunakan pendekatan arsitektur berorientasi layanan dan menyediakan manajer "takdir" atau "alur kerja". Pada dasarnya Anda mendaftarkan kait ke kode kemudian merancang alur kerja atau percobaan yang mereproduksi pekerjaan Anda. Ini telah digunakan pada banyak jenis kode, bahkan cluster HPC. Dengan pendekatan ini, Anda akan memiliki cara untuk memutar ulang percobaan.
Ada banyak solusi jenis ini di luar sana, tetapi mereka adalah tiga yang saya terkesan. Ini masalah yang sulit dan saya percaya kita benar-benar bahkan tidak dekat untuk mengatasi. Kami bahkan tidak bisa membuat orang merilis kode mereka dengan makalah mereka, bagaimana kami bisa mengharapkan mereka mereproduksi hasil = P
sumber
Saya belum banyak berhasil menggunakan solusi orang lain untuk masalah ini. Saya biasanya hanya menginginkan sesuatu yang sederhana yang bekerja untuk saya dan menyelesaikan pekerjaan. Untuk tujuan ini, saya biasanya mencoba menulis satu skrip python yang bertugas menjalankan semua hasil, parsing output, serta membangun angka / tabel.
Saya menulis kode saya untuk menghasilkan file data yang berisi hasil dalam beberapa format teks. Anda dapat menghindari menjalankan kembali hasil ini dalam skrip Anda dengan terlebih dahulu menguji keberadaan file output (misalnya dengan python menggunakan os.path.isfile ()). Jika Anda ingin menjalankan kembali hasil Anda, cukup hapus file data. Jika file data ada, maka saya menjalankan parser dari file-file ini. Untuk ini, modul python untuk ekspresi reguler sangat berguna (kembali).
Kemudian dari hasil parsing saya membuat angka atau tabel. Untuk tabel dalam lateks Anda dapat menulis kode untuk menghasilkan tabel menjadi file terpisah (saya menggunakan ekstensi .tbl) dan kemudian memasukkan ini ke dalam file lateks Anda. Kuncinya bagi saya adalah dengan menggunakan 1 skrip python. Jika saya memiliki banyak, maka saya kemudian bertanya-tanya mana yang mana dan apa yang mereka lakukan. Jika deskripsi ini terlalu kabur, saya dapat mengirimkan beberapa contoh kepada Anda.
sumber
\input{|"path-to-script.py"}
. Saya pikir Anda sebaiknya meletakkan semua parameter dalam file python tunggal (atau bahasa apa pun yang menjadi favorit Anda) dan gunakan parameter baris perintah untuk mengaksesnya\input{|"path-to-script.py param-name"}
. Dalam hal ini Anda dapat memasukkan file param ke skrip lain untuk menjalankan simulasi. Namun, itu membuat kompilasi lebih lambat dan memiliki beberapa poin negatif lainnya.Bahkan yang lebih penting, menurut saya, adalah memastikan bahwa Anda dapat mengetahui cara untuk menghasilkan kembali semua hasil Anda dari awal dalam sebulan atau satu tahun (misalnya, ketika wasit meminta Anda untuk menambah atau memodifikasi sesuatu). Untuk tujuan itu, apa yang saya lakukan adalah memasukkan file teks dengan arah yang sangat rinci tentang cara mereproduksi semua hasil. Lebih baik jika Anda menguji ini dengan meminta orang lain (seperti penulis pendamping) mencobanya. Saya sarankan Anda juga memberikan instruksi ini (dan semua kode Anda) kepada wasit dan pembaca.
Berikut ini sebuah contoh (sebenarnya disiapkan oleh rekan penulis saya, Aron Ahmadia).
sumber
Orgmode Emacs dalam kombinasi dengan Babel mencapai itu. Babel dapat mengeksekusi cuplikan kode dari berbagai bahasa pemrograman dan skrip, misalnya, ia dapat membuka file yang berisi data simulasi dan memasukkannya ke dalam tabel dalam orgmode, yang dapat diekspor ke LaTeX (dan banyak format lainnya). Dibutuhkan waktu yang cukup lama untuk terbiasa dengan semua kombo kunci dalam orgmode, tetapi begitu itu berjalan semuanya otomatis.
sumber
Jika menjalankan semua kode Anda murah maka Anda bisa melakukan sesuatu yang berteknologi rendah seperti berikut:
Anda bisa templat dokumen Anda dengan string yang diformat sehingga terlihat seperti ini
Memiliki skrip python yang terlihat seperti ini
Dan kemudian lakukan sesuatu seperti ini
Anda kemudian dapat membungkusnya dalam Makefile.
sumber
Jika Anda menggunakan LaTeX, solusi yang relatif berteknologi rendah adalah membuat kode Anda meludahkan file (atau menggunakan skrip untuk memfilter dari output kode Anda) yang berisi sejumlah baris seperti ini:
\newcommand{\myresults1}{<value>}
Kemudian Anda bisa menggunakan
\input
perintah untuk menambahkan file itu ke dalam dokumen Anda, dan menggunakan perintah yang ditentukan untuk menempatkan nilai-nilai.sumber
Saya bekerja untuk Elsevier. Perusahaan saya telah mulai menggunakan kerangka kerja Collage (dikembangkan sebagai tanggapan terhadap Tantangan Besar Kertas yang Dapat Dieksekusi) dalam masalah jurnal untuk memungkinkan penulis untuk mempublikasikan potongan kode yang dapat dieksekusi dengan artikel mereka. Fitur ini memudahkan pembaca untuk mereproduksi hasil yang dilaporkan dalam artikel dan menggunakan kembali materi yang dipublikasikan untuk penelitian mereka sendiri. Collage mendukung berbagai macam perangkat lunak open-source dan proprietary; informasi lebih lanjut dapat ditemukan di video informasi di sini dan di Situs Web Collage Authoring Environment .
sumber