пропозиція щодо управління запуском моделювання?


9

Ці питання можуть бути трохи поза темою в науці. якщо вона потрібна, будь ласка, підкажіть, де вона підходить.

Питання стосується того, як ефективно керувати всіма моделями роботи.

скажімо, наприклад, для моделювання потрібна фіксація 2 параметрів, які мають бути визначені у певному запропонованому діапазоні значень.

Щоб знайти кращий результат, отриманий парою двох параметрів (наприклад, порівнявши результат моделювання з експериментальними даними), можна зробити аналіз чутливості, визначивши три значення для кожного параметра, а потім сформулювати 9 прогонів.

раніше я використовував sed, щоб змінити вхідні дані для кожного запуску і позначити кожний запуск, записавши значення і ім’я параметра в папку, в якій зберігаються входи та результати цього запуску. але я виявив, що це дуже неефективно, коли кількість параметрів зростає (наприклад, доступ до імені папок у сценаріях для побудови графіків).

тоді я вирішив використовувати прості числа як імена папок і зберігати деталі в деяких інших електронних таблицях. поки що це нормально, але вимагає певної трудомісткої роботи. також із ростом пробіжок стає звичним робити помилки, наприклад, провести ще один пробіг, який вже було зроблено пару днів тому.

Чи є у вас хороша ідея щодо управління цими прогонами? Я думаю, було б надзвичайно важливо, щоб хтось робив аналіз Монте-Карло?

Спасибі заздалегідь!


2
Зазвичай я використовую прості Python-скрипти для таких завдань. Вони генерують дані, виконують моделювання та керують отриманими результатами. Використовуючи такі інструменти, як numpy / scipy / matplotlib, ви також можете безпосередньо аналізувати та планувати певну міру. Іноді я йду ще далі і автоматично генерую вхід, необхідний для перевірки проти виготовлених рішень безпосередньо, використовуючи функцію simpi і використовую результати як вхідні дані в коді симуляції. Я можу порекомендувати книгу Лангтагена "Сценарій пітона на обчислювальну науку" як вихідну точку. Ось кілька типових завдань, що зустрічаються в комп. науку демонструють за допомогою Python.
Крістіан Валуга

Це питання видається надзвичайно тематичним. Це хлібо-вершкове масло з обчислювальної техніки. Я думаю, що кожен початковий вчений-обчислювач переживав те, що переживає Ченмін у той чи інший момент. Мені одне дуже цікаво подивитися, як інші люди підходили до цього всюдисущого болю в попі.
тел

Відповіді:


5

TLDR
Використовуйте Python для управління / зміни вашого вводу та коралів вашого виводу, а також використовуйте HDF5 для організації / зберігання даних. Наскільки складний, як може здатися спочатку, він все ще буде простішим, ніж SQL.

Більш довга відповідь + Приклад
Я особисто використовую комбінацію сценаріїв Python та формату файлів HDF5 для вирішення подібних ситуацій. Сценарії Python можуть обробляти підстановки тексту, необхідні для зміни ваших файлів (а також перевірити наявність дублікатів запуску), а за допомогою додаткових сценаріїв ви можете взяти вихідні дані з вашої програми та помістити їх у файл HDF5.

Найпростіше думати про HDF5 як більш-менш точно як звичайну файлову систему (тобто набір каталогів і підкаталогів на вашому комп’ютері), але таку, яка легко масштабує великі набори даних. Кожен каталог / підкаталог можна позначати метаданими (у вашому випадку або лише параметрами, які ви змінюєте, або всього набору параметрів). Коли настає час аналізувати ваші дані, ви можете шукати їх на основі метаданих.

Ось короткий приклад того, як це буде працювати на основі моїх даних симуляції (вже у форматі HDF5), що виглядає приблизно так:

mydata.hdf5
|___Run01(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run02(metadata: {size:10, maxSteps:1e6, maxTime:inf})
|___Run03(metadata: {size:13, maxSteps:1e7, maxTime:inf})
|___Run04(metadata: {size:9, maxSteps:1e7, maxTime:inf})

mydata.hdf5- це файл HDF5, і кожен з Runxx є підкаталогом, який містить вихідні дані з заданого моделювання, і який позначений відповідними метаданими. Сценарій python, який здійснює пошук через прогони і повертає список тих, хто має потрібні метадані, виглядатиме так:

import sys
import h5py    #the python module that interfaces with HDF5

def GetRuns(hdfRoot, attributeValuePairs):
    return [subdir for subdir in hdfRoot.values() if not(attributeValuePairs.viewitems() - dict(subdir.attrs).viewitems())]

if __name__=="__main__":
    attributeValuePairs = dict(zip(sys.argv[2::2], sys.argv[3::2]))
    with h5py.File(sys.argv[1]) as hdfRoot:
        runs = GetRuns(hdfRoot, attributeValuePairs)

        #do something here with runs...

        print runs

Отже, якби я був у командному рядку в каталозі, що містить, mydata.hdf5я міг би запустити описаний вище сценарій так:

python myscript.py mydata.hdf5 maxSteps 1e7 size 13

що скаже сценарію знайти будь-які запуски з метаданими частково або повністю збігаються {'maxSteps':'1e7', 'size':'13'}. Потім сценарій може маніпулювати цими даними, як би вам не сподобалось (у розділі "зробіть щось тут"), і тоді він надрукував би список, який виглядатиме приблизно так:

["Run01", "Run03"]

Одне зауваження полягає в тому, що HDF5 представляє цілком природне відображення для ваших даних, лише якщо можливо представити ваші дані у вигляді набору n-мірних масивів. Досить звичайно, щоб вихід симуляцій знаходився в якомусь масиві, тому це, мабуть, не буде проблемою.

Хороші вихідні точки
Python: http://www.openbookproject.net/thinkcs/python/english2e/
HDF5: http://www.h5py.org/docs/


2

Думаю, нам потрібно буде дізнатися трохи більше про ваш робочий процес, щоб зробити серйозні рекомендації.

Я б запропонував поводитися з твоїми пробіжками як із магазином, що має ключові значення. Створіть просту базу даних для всіх ваших метаданих для кожного запуску, а потім хеш будь-яку відповідну інформацію з вашого запуску в ключ, який ви призначаєте кожному виводу.

У найпростішій ситуації ви використовуєте текстовий файл для зберігання метаданих та безпечно додаєте рядки метаданих про кожен запуск до свого текстового файлу. Потім ви можете зберігати свої вихідні запуски, як вам завгодно (одна директорія, резервні копії з переліком вмісту тощо).

Ви можете реалізувати цю стратегію будь-якою мовою, яка вам подобається, але це було б тривіально в Python. Ви також можете скористатися деякими приємними функціями, як здатність Python читати та записувати дані JSON або взаємодіяти з базами даних SQL.

Цей підхід реалізує дуже просту базу даних про легку вагу. Існують більш важкі стратегії, які надають більше гарантій безпеки, новою, яка може вас зацікавити, є SciDB . Бази даних надають більш високі гарантії ваших даних та допомагають розширити свій підхід для збільшення набору даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.