TL; DR: Как следует управлять пользовательскими прогонами симуляции в Matlab?Подробные вопросы в конце.
Я работаю с Matlab, где я создал некоторый код для проверки влияния различных параметров на моделируемую систему.Он имеет много входов и выходов, но MWE будет:
function [number2x,next_letter] = test(number, letter)
number2x = number * 2;
next_letter = letter + 1;
disp(['next letter is ' next_letter])
disp(['number times 2 is ' num2str(number2x)])
end
Это работает, если это все, что нужно проверить.Однако со временем необходимо было добавить несколько новых входов и выходов.Кроме того, из-за растущего числа тестируемых параметров необходимо было создать какой-то журнал:
xlswrite('testfile.xlsx',[num2str(number), letter,num2str(number2x),next_letter],'append');
Кроме того, поскольку расчет занимает несколько часов и должен выполняться в течение ночи, нужно было запустить несколько наборов параметров.в одной точке.Это легко сделать с помощью [x1,y1] = test(1,'a');[x2,y2] = test(2,'b');
в одной строке или добавлением новых задач, пока старые еще выполняются.Однако, таким образом, вы не можете отслеживать, сколько еще открыто.
Итак, в общем, мне нужен какой-то каркас тестирования, который может не отставать от изменения ввода и вывода, отслеживает уже выполненные вычисления ив идеале также обрабатывает открытые трассы.
Я чувствую, что не могу быть единственным, кто сталкивается с этой проблемой, на самом деле я думаю, что так много людей сталкиваются с этой проблемой, что Mathworks уже нашел решение.
Для Simulink это было сделано в виде Simluationmanager , но для функций Matlab самое близкое, что я нашел, это Среда тестирования (пример ниже), который, кажется,скорее для разработки и отладки программного обеспечения, а не для того, что я пытаюсь.И в какой-то момент кажется, что есть сторонние решения , но они больше не поддерживают эту платформу тестирования.
function solutions = sampleTest
solutions = functiontests({@paramtertest});
end
function paramtertest(vargin)
test(1,'a');
test(2,'b');
end
function [number2x,next_letter] = test(number, letter)
number2x = number * 2;
next_letter = letter + 1;
disp(['next letter is ' next_letter])
disp(['number times 2 is ' num2str(number2x)])
xlswrite('testfile.xlsx',[num2str(number), letter,num2str(number2x),next_letter],'append');
end
В качестве альтернативы я мог бы создать свой тест как класс, создать интерфейс, похожий на Simulationmanager, создать многочисленные функции для управления входами и выходами и визуализировать прогресс, а затем создать несколько экземпляров, если я хочу установитьсоздать новый набор параметров во время симуляции.Возможно, но много работы, которая не связана с симуляцией напрямую.
В итоге возникают следующие вопросы:
- Есть ли встроенная функция Matlab для управления симуляциями, которую я полностью пропустилдо сих пор?
- Можно ли использовать для этой цели инфраструктуру тестирования?
- Есть ли уже какая-то платформа (не из Mathworks), которая может справиться с этим?
- Если я создаюмой собственный класс, могут ли несколько экземпляров работать по отдельности и отслеживать свой прогресс?И будут ли они обрабатываться одновременно или Matlab в конечном итоге выполнит команду в том порядке, в котором они начали?
Я знаю, что этот вопрос несколько не в тему : порекомендуйте или найдите инструмент, библиотекуили любимый сторонний ресурс область.Если вы чувствуете, что это слишком много, пожалуйста, обратите внимание на последний вопрос.
Спасибо!