Параметрические исследования на платформе REPEAT VISION#
Добавлено в версии 1.0.0.
Модуль пакета repeat предназначен для подготовки значений глобальных переменных модели REPEAT VISION с целью выполнения параметрических исследований.
Применение модуля parametric_study пакета repeat позволяет выполнять
параметрические исследования, снижая трудоёмкость подготовки Python программ,
поскольку инженеру не потребуется использовать вложенные циклы в случае
перебора значений при любом количестве глобальных переменных.
Данный модуль содержит основные функции подготовки значений переменных:
get_cartesian_product- Функция подготовки набора значений глобальных переменных по методу декартова произведения с целью получения результатов расчёта модели REPEAT VISION на сетке значений глобальных переменных;get_latin_hypercube- Функция подготовки разреженного набора значений глобальных переменных по методу латинского гиперкуба для вычислительно затратных случаев параметрических исследований.
- repeat.parametric_study.get_cartesian_product(model: ExplorationModel, variable_values: dict[str, pandas.Series | ndarray]) pandas.DataFrame#
Функция возвращает декартово произведение для множества значений глобальных переменных с целью выполнения параметрических исследований модели REPEAT VISION.
Например, для случая двух переменных
diameter = np.array([0.05, 0.1])иpressure = np.array([1e4, 2e4])функция вернёт таблицу pandas DataFrame следующего вида.0
0.05
10000.0
1
0.10
10000.0
2
0.05
20000.0
3
0.10
20000.0
Алгоритм формирует набор расчётных случаев с количеством, равным произведению длин векторов значений всех глобальных переменных, указанных аргументу
variable_values. Для примера, приведённого выше, длина вектора значенийdiameter = 2и длина вектораpressure = 2. Соответственно алгоритм подготовит набор, включающий 4 расчётных случая для выполнения 4 параметрических исследований модели REPEAT VISION.- Parameters:
- model
repeat.repeat_model.ExplorationModel. Экземпляр класса
repeat.repeat_model.ExplorationModel.- variable_valuesdict[str, pd.Series | np.ndarray]
Словарь с наборами значений глобальных переменных. Ключами словаря должны быть строковые значения имён глобальных переменных. Каждому ключу словаря должно соответствовать значение типа pd.Series или np.ndarray, содержащее набор исходных данных для соответствующего имени глобальной переменной. Например,
variable_values = {"pressure" : np.linspace(1e4, 1e6, num = 4)}
- model
- Returns:
- design_casespd.DataFrame
Таблица значений глобальных переменных, в которой столбцы соответствуют именам глобальных переменных, а количество строк соответствует количеству параметрических исследований, которое далее необходимо будет выполнить.
Examples
>>> import pandas as pd >>> import numpy as np >>> import repeat as rp >>> import repeat.parametric_study as ps >>> >>> user = rp.User(token = 'уникальный токен из кабинета пользователя REPEAT VISION') >>> app = rp.Application(user) >>> t_interval = rp.TimeInterval(start = 900, end = 1000) >>> project = "21425d1a-70f9-4bke-8140-81bd312bd91b" >>> # Создаётся набор глобальных переменных с множествами значений, >>> # по которым необходимо будет выполнить параметрическое исследование >>> # на декартовом произведении значений параметров >>> variable_values = dict( >>> # Требуется выполнить параметрическое исследование при изменении >>> # параметра hole_area модели REPEAT VISION >>> hole_area = np.linspace(1e-7, 0.031415, num = 2), >>> # В примере параметрического исследования не требуется учитывать >>> # параметр pipe_diameter >>> pipe_diameter = np.array([0.2]), >>> pressure = np.linspace(1e4, 1e6, num = 4), >>> ) >>> model = app.get_exploration_model(project, t_interval) >>> # Создаётся таблица с множеством значений глобальных переменных >>> input_data = ps.get_cartesian_product( >>> model, >>> variable_values >>> ) >>> # Создаётся таблица для сохранения исходных данных >>> # и результатов расчёта >>> design_cases = input_data.copy(deep = True) >>> design_cases['flowrate'] = pd.NA >>> # Цикл расчётов для параметрических исследований >>> for i, variables in input_data.iterrows(): >>> with model as md: >>> md.run(variables) >>> design_cases.loc[i, 'flowrate'] = md.get_results('flowrate').iloc[-1] >>> >>> axis = design_cases.plot(x = 'pressure', y = 'flowrate')
- repeat.parametric_study.get_latin_hypercube(model: ExplorationModel, variable_bounds: dict[str, list | float], sample_size: int, seed: int = None, optimization: str = None, strength: int = 1) pandas.DataFrame#
Функция возвращает разреженный набор значений глобальных переменных по методу латинского гиперкуба с целью выполнения параметрических исследований модели REPEAT VISION.
Метод латинского гиперкуба применяется в следующих случаях:
Модель требует значительного времени на выполнение каждого расчёта при ограниченном общем времени на выполнение исследований;
Высокая размерность задачи параметрических исследований, содержащая большое количество варьируемых переменных, что приводит к значительным затратам времени на выполнение параметрических исследований.
- Parameters:
- model
repeat.repeat_model.ExplorationModel Экземпляр класса
repeat.repeat_model.ExplorationModel.- variable_boundsdict[str, list | float]
Словарь с наборами верхних и нижних границ значений глобальных переменных. Ключами словаря должны быть строковые значения имён глобальных переменных. Каждому ключу словаря должен соответствовать список, содержащий нижнее и верхнее значения границ для соответствующего имени глобальной переменной. Если значение глобальной переменной в рамках параметрических исследований не требуется учитывать (её значение должно быть постоянным), то ключу словаря должно соответствовать одно вещественное значение. Например,
variable_bounds = {"pressure" : [1e4, 1e6], "diameter" : 0.1}- sample_sizeint
Размер набора значений глобальных переменных, равный количеству параметрических исследований, которое далее необходимо будет выполнить.
- seedint, optional
Положительное целочисленное значение для обеспечения повторяемости случайного набора значений глобальных переменных. Значение по умолчанию None.
- optimizationstr, optional
Дополнительная оптимизация значений глобальных переменных для повышения равномерности заполнения пространства значений переменных. Значение по умолчанию None. Аргумент может принимать следующие значения:
"random-cd"Случайное изменение значений переменных при существующих близких значениях других переменных;"lloyd"Изменяет значения переменных по модифицированному алгоритму Lloyd-Max.
- strengthint, optional
Способ заполнения пространства значений глобальных переменных. Целое число, принимающее значение 1 или 2. Значение по умолчанию 1.
В случае
strength = 1функция заполняет пространство значений так, чтобы в наборах расчётных случаев не было повторений значений глобальных переменных.В случае
strength = 2функция обеспечивает равномерность плотности пространства значений переменных. При этом на аргумент sample_size накладываются следующие ограничения приstrength = 2: sample_size должно быть квадратом простого числа,sample_size = p**2, где p - простое число [1, 2, 3, 4]. Тогда sample_size = 1, 4, 9, 16 и т.д., при этом количество варьируемых глобальных переменных (содержащих верхнее и нижнее значения) в variable_bounds должно быть<= p + 1.
- model
- Returns:
- design_casespd.DataFrame
Таблица значений глобальных переменных, в которой столбцы соответствуют именам глобальных переменных, а количество строк, равное sample_size, соответствует количеству параметрических исследований, которое далее необходимо будет выполнить.
Notes
Для подготовки разреженного набора значений глобальных переменных данная функция использует возможности класса LatinHypercube пакета SciPy.
Examples
>>> import pandas as pd >>> import numpy as np >>> import repeat as rp >>> import repeat.parametric_study as ps >>> >>> user = rp.User(token = 'уникальный токен из кабинета пользователя REPEAT VISION') >>> app = rp.Application(user) >>> t_interval = rp.TimeInterval(start = 900, end = 1000) >>> project = "21425d1a-70f9-4bke-8140-81bd312bd91b" >>> # Создаётся набор глобальных переменных с нижними и верхними значениями, >>> # по которым необходимо будет выполнить параметрическое исследование >>> # на пространстве значений переменных, полученного по методу >>> # латинского гиперкуба >>> variable_values = dict( >>> # Требуется выполнить параметрическое исследование при изменении >>> # параметра hole_area модели REPEAT VISION >>> hole_area = [1e-7, 0.031415], >>> # В примере параметрического исследования не требуется учитывать >>> # параметр pipe_diameter >>> pipe_diameter = 0.2, >>> pressure = [1e4, 1e6], >>> ) >>> model = app.get_exploration_model(project, t_interval) >>> # Создаётся пространство значений переменных по методу >>> # латинского гиперкуба >>> input_data = ps.get_latin_hypercube( >>> model, >>> variable_values, >>> seed = 5, # Обеспечивается повторяемость случайного набора значений >>> sample_size = 9, # Требуется 9 расчётных случаев >>> # Обеспечивается равномерность заполнения пространства значений >>> strength = 2, >>> optimization = "random-cd" >>> ) >>> # Создаётся таблица для сохранения исходных данных >>> # и результатов расчёта >>> design_cases = input_data.copy(deep = True) >>> design_cases['flowrate'] = pd.NA >>> # Цикл расчётов для параметрических исследований >>> for i, variables in input_data.iterrows(): >>> with model as md: >>> md.run(variables) >>> design_cases.loc[i, 'flowrate'] = md.get_results('flowrate').iloc[-1] >>> >>> axis = design_cases.plot(x = 'pressure', y = 'flowrate')