W jednym z moich artykułów wymieniam niektóre wyniki liczbowe oprócz niektórych liczb. Chciałbym się upewnić, że wyniki liczbowe w mojej pracy zawsze zgadzają się z kodem. W tej chwili po prostu kopiuję bezpośrednio wyniki liczbowe z wyników symulacji na papier, co jest niezwykle proste i mało zaawansowane technicznie, ale podatne na błędy, ponieważ mogłem źle skopiować wyniki lub zapomnieć o zsynchronizowaniu wyników papierowych z kod wyjściowy.
Czy istnieje dobry sposób na zsynchronizowanie wyników liczbowych, które cytuję w swoich artykułach, z wynikami wygenerowanymi przez mój kod? (Tutaj zakładam, że wykonanie kodu jest łatwe i praktyczne, gdy chcę zaktualizować swój artykuł). Te wyniki liczbowe niekoniecznie nadają się do postaci tabelarycznej. Czasami mam tabele w manuskryptach, ale częściej mam parametry symulacji wymienione jako liczby w równaniach . Przykładem może być coś takiego:
gdzie chciałbym zastąpić elementy warunku początkowego rzeczywistymi parametrami, których używam w symulacji, która numerycznie integruje układ równań różniczkowych zwyczajnych. Używanie tabeli do jednorazowych danych, takich jak ten przykład, wydaje się przesadzeniem i większą ilością atramentu niż to konieczne.
Zakładam, że liczby są łatwiejszym przypadkiem: ilekroć dokument jest „budowany” (ze źródła LaTeX, Markdown, RST itp.), Rozpocznij proces kompilacji, wykonując kod. Jeśli jednak ludzie mają lepsze sugestie dotyczące synchronizacji liczb generowanych przez moje symulacje z moją pracą, chciałbym je usłyszeć.
źródło
spin()
funkcji. Osobiście uważam, że skargi Grega Wilsona na umiejętności pisania i czytania są dość przestarzałe. Miałem to samo straszne doświadczenie, które opisuje w przypadku nowegob, ale to skomplikowane debugowanie po prostu nie istnieje w nowoczesnych narzędziach. Dla piśmiennictwa CI użyj doxygen. Knitr jest łatwiejszy do debugowania niż R dzięki buforowaniu i obsłudze środowiska.To, o co prosisz, to wielkie wyzwanie Elsivier z „Executable Paper” . Chociaż wypróbowano wiele podejść, żadne nie jest tak przekonujące, jak sugerują autorzy. Oto kilka przykładów zastosowanych technik.
Projekt Madagaskar przyjmuje twoje podejście, w skrypcie make uruchomiono symulacje, w których jednocześnie powstają figury i papier.
IPython Notebook zapewnia dokument, który można wykonać, czytając i generując liczby zgodnie z własnym sercem. (Widziałem wtyczki słowne, Mathematica i wiele innych rozwiązań używanych w ten sam sposób)
VisTrails wykorzystuje podejście oparte na architekturze zorientowanej na usługi i zapewnia menedżera „opatrzności” lub „przepływu pracy”. Zasadniczo rejestrujesz haki do kodu, a następnie projektujesz przepływ pracy lub eksperyment, który odtwarza twoją pracę. Został on zastosowany w wielu typach kodów, nawet klastrach HPC. Dzięki takiemu podejściu będziesz mógł odtworzyć eksperymenty.
Istnieje mnóstwo tego typu rozwiązań, ale te trzy były pod wrażeniem. To trudny problem i uważam, że tak naprawdę nie jesteśmy nawet blisko rozwiązania tego problemu. Nie możemy nawet zmusić ludzi do wydania kodu wraz z dokumentami, jak możemy oczekiwać, że powiela wyniki = P
źródło
Nie odniosłem dużego sukcesu w stosowaniu rozwiązań tego problemu przez innych ludzi. Zwykle chcę po prostu czegoś prostego, co działa dla mnie i wykonuje pracę. W tym celu zazwyczaj próbuję napisać jeden skrypt w języku Python, który jest odpowiedzialny za uruchamianie wszystkich wyników, analizowanie danych wyjściowych, a także tworzenie rysunków / tabel.
Piszę moje kody, aby generować pliki danych, które zawierają wyniki w jakimś formacie tekstowym. Możesz uniknąć ponownego uruchamiania tych wyników w skrypcie, najpierw testując obecność pliku wyjściowego (na przykład w pythonie, używając os.path.isfile ()). Jeśli chcesz ponownie uruchomić wyniki, po prostu usuń pliki danych. Jeśli pliki danych istnieją, uruchamiam analizator składni tych plików. W tym celu bardzo przydatny (re) jest moduł pythonowy dla wyrażeń regularnych.
Następnie z przeanalizowanego wyjścia tworzę liczby lub tabele. W przypadku tabel w lateksie możesz napisać kod, aby wygenerować tabelę w osobnym pliku (używam rozszerzenia .tbl), a następnie dołączyć to do pliku lateksu. Kluczem jest dla mnie użycie 1 skryptu Python. Jeśli mam ich wiele, to zastanawiam się później, który z nich jest i co robią. Jeśli ten opis jest zbyt niejasny, mogę wysłać kilka przykładów.
źródło
\input{|"path-to-script.py"}
. Myślę, że lepiej umieścić wszystkie parametry w jednym pliku python (lub jakimkolwiek języku jest twoim ulubionym) i użyć parametru wiersza poleceń, aby uzyskać do niego dostęp\input{|"path-to-script.py param-name"}
. W takim przypadku możesz dołączyć plik param do innych skryptów, aby uruchomić symulacje. Powoduje to jednak spowolnienie kompilacji i ma inne negatywne punkty.Jeszcze ważniejsze, moim zdaniem, jest upewnienie się, że możesz dowiedzieć się, jak ponownie wygenerować wszystkie wyniki od zera w ciągu miesiąca lub roku (na przykład, gdy sędziowie proszą cię o dodanie lub modyfikację). W tym celu włączam plik tekstowy z bardzo szczegółowymi wskazówkami, jak odtworzyć wszystkie wyniki. Najlepiej, jeśli je przetestujesz, gdy ktoś inny (np. Współautor) je wypróbuje. Zalecam także przekazanie tych instrukcji (i całego kodu) recenzentom i czytelnikom.
Oto przykład (faktycznie przygotowany przez mojego współautora, Arona Ahmadię).
źródło
Udało się to osiągnąć dzięki trybowi Emacsa w połączeniu z Babel. Babel może wykonywać fragmenty kodu z różnych języków programowania i skryptów, np. Może otworzyć plik zawierający dane symulacji i umieścić go w tabeli w trybie orgmode, którą można wyeksportować do LaTeX (i wielu innych formatów). Przyzwyczajenie się do wszystkich kluczowych kombinacji w trybie orgm zajmuje trochę czasu, ale po uruchomieniu wszystko odbywa się automatycznie.
źródło
Jeśli uruchomienie całego kodu jest tanie, możesz zrobić coś mniej zaawansowanego technologicznie, jak na przykład:
Możesz utworzyć szablon dokumentów ze sformatowanymi ciągami, aby wyglądały tak
Mają skrypty python, które wyglądają tak
A potem zrób coś takiego
Następnie możesz zawinąć to w plik Makefile.
źródło
Jeśli używasz LaTeX, stosunkowo mało zaawansowanym technologicznie rozwiązaniem jest wyplucie kodu z pliku (lub użycie skryptu do odfiltrowania danych wyjściowych kodu) zawierającego całą masę wierszy takich jak to:
\newcommand{\myresults1}{<value>}
Następnie możesz użyć
\input
polecenia, aby dodać ten plik do dokumentu i użyć zdefiniowanych poleceń, aby umieścić wartości.źródło
Pracuję dla Elseviera. Moja firma zaczęła używać frameworku Collage (opracowanego w odpowiedzi na Wielkie Wyzwanie Papieru Wykonawczego) w wydaniach czasopism, aby umożliwić autorom publikowanie fragmentów kodu wykonywalnego wraz z ich artykułem. Ta funkcja ułatwia czytelnikom odtwarzanie wyników zgłoszonych w artykule i ponowne wykorzystanie opublikowanych materiałów do własnych badań. Collage obsługuje szeroką gamę oprogramowania typu open source i zastrzeżonego; więcej informacji można znaleźć w wideo informacyjnym tutaj oraz na stronie internetowej środowiska tworzenia kolaży .
źródło