实验设计

(类来自 pyomo.contrib.doe.doe)

class pyomo.contrib.doe.doe.DesignOfExperiments(experiment=None, fd_formula='central', step=0.001, objective_option='determinant', scale_constant_value=1.0, scale_nominal_param_value=False, prior_FIM=None, jac_initial=None, fim_initial=None, L_diagonal_lower_bound=1e-07, solver=None, tee=False, get_labeled_model_args=None, logger_level=30, _Cholesky_option=True, _only_compute_fim_lower=True)[source]

基础类:object

__init__(experiment=None, fd_formula='central', step=0.001, objective_option='determinant', scale_constant_value=1.0, scale_nominal_param_value=False, prior_FIM=None, jac_initial=None, fim_initial=None, L_diagonal_lower_bound=1e-07, solver=None, tee=False, get_labeled_model_args=None, logger_level=30, _Cholesky_option=True, _only_compute_fim_lower=True)[源代码]

该软件包支持使用Pyomo进行基于模型的实验分析设计。 支持直接优化和枚举模式。

该包自8月24日起已从其原始形式进行了重构。有关更多信息,请参阅文档。

Parameters:
  • experiment – 实验对象,用于保存模型并标记所有组件。该对象应具有一个get_labeled_model方法,该方法返回一个带有以下标记集的模型:unknown_parametersexperimental_inputsexperimental_outputs

  • fd_formula – 用于计算灵敏度矩阵的有限差分公式。必须是以下之一 [central, forward, backward], 默认: central

  • step – 有限差分公式的相对步长。 默认值:1e-3

  • objective_option – 目标选项的字符串表示。当前可用的选项有: determinant(用于行列式,或D-最优性)和 trace(用于迹或 A-最优性)

  • scale_constant_value – 敏感性矩阵的常数缩放。每个元素都将乘以这个缩放因子。 默认值:1

  • scale_nominal_param_value – 布尔值,用于确定是否通过标称参数值缩放灵敏度矩阵。灵敏度矩阵的每一列将分别除以相应的标称参数值。 默认值:False

  • prior_FIM – 表示先前实验信息的2D numpy数组。如果未提供值,则假定先验为零矩阵。将假定此矩阵已按用户指定的方式缩放(即,如果scale_nominal_param_value为true,我们将假定此处提供的FIM已按参数值缩放)

  • jac_initial – 作为敏感性矩阵初始值的2D numpy数组。

  • fim_initial – 作为FIM初始值的2D numpy数组。

  • L_diagonal_lower_bound – 下三角Cholesky分解矩阵值的下界。 默认值:1e-7

  • solver – 用户指定的solver对象,默认值为None。 如果未指定,默认求解器设置为使用MA57的IPOPT。

  • tee – 传递给求解器的选项,用于详细输出。

  • get_labeled_model_args – 用于Experiment对象上get_labeled_model函数的额外参数。

  • _Cholesky_option – 布尔值,表示是否使用Cholesky分解来计算D-最优性准则的行列式。除非用户有意降低性能(即,将使用完整FIM的现有工具与此算法进行比较),否则不应更改此参数。

  • _only_compute_fim_lower – 如果为True,则只计算FIM的下三角部分。除非用户有意降低性能(即,将使用完整FIM的现有工具与此算法进行比较),否则不应更改此参数。

  • logger_level – 指定日志记录器的级别。更改为 logging.DEBUG 以获取所有消息。

方法

__init__([实验, 有限差分公式, 步长, ...])

这个包支持使用Pyomo进行基于模型的实验分析设计。

check_model_FIM([model, FIM])

检查指定的矩阵FIM是否与模型预期的形状匹配。

check_model_jac([jac])

check_model_labels([model])

检查模型是否包含自动构建DoE模型所需的后缀。

compute_FIM([model, method])

计算从实验的get_labeled_model()函数初始化的实验设计的FIM。

compute_FIM_full_factorial([model, ...])

将运行基于模拟的全因子探索实验输入空间(即grid searchparameter sweep),以了解FIM指标如何随实验设计空间的变化而变化。

create_doe_model([model])

添加方程以计算敏感性、FIM和目标。

create_objective_function([model])

生成目标函数作为表达式和Pyomo目标对象

draw_factorial_figure([results, ...])

compute_FIM_full_factorial函数提供的结果字典中提取绘制图表所需的结果。

get_FIM([model])

从指定的模型中获取FIM值

get_experiment_input_values([model])

从指定的模型中获取实验输入值(实验设计)。

get_experiment_output_values([model])

从指定的模型中获取实验输出值(y hat)。

get_measurement_error_values([model])

从指定的模型中获取实验输出值(sigma)。

get_sensitivity_matrix([model])

从指定的模型中获取灵敏度矩阵(Q)值。

get_unknown_parameter_values([model])

从指定的模型中获取未知参数值(theta)。

run_doe([model, results_file])

运行实验估计的单一实验设计。

run_multi_doe_sequential([N_exp])

run_multi_doe_simultaneous([N_exp])

update_FIM_prior([model, FIM])

更新模型对象上的先验FIM。

update_unknown_parameter_values([model, ...])

成员文档

check_model_FIM(model=None, FIM=None)[source]

检查指定的矩阵FIM是否与模型预期的形状匹配。此方法应仅在模型已探测未知参数的长度、实验输入、实验输出和测量误差已存储到对象后调用。

Parameters:
  • model (用于后缀检查的模型, 默认值: 无, (self.model))

  • FIM (要在模型上检查的FIM值)

check_model_labels(model=None)[source]

检查模型是否包含自动构建DoE模型所需的必要后缀。

Parameters:

model (用于后缀检查的模型)

compute_FIM(model=None, method='sequential')[source]

计算从实验的get_labeled_model()函数初始化的实验设计的FIM。

Parameters:
  • model (用于计算FIM的模型, 默认: None, (self.compute_FIM_model))

  • 方法 (用于指定应使用哪种方法的字符串) – 选项有 kaugsequential

Returns:

计算FIM

Return type:

FIM的2D numpy数组

compute_FIM_full_factorial(model=None, design_ranges=None, method='sequential')[source]

将运行基于模拟的全因子探索实验输入空间(即grid searchparameter sweep),以了解FIM指标如何随实验设计空间的变化而变化。

Parameters:
  • model (用于执行全因子探索的模型)

  • design_ranges (dict列表,形式为 {: [start, stop, numsteps]})

  • 方法 (用于指定应使用哪种方法的字符串) – 选项是 kaugsequential

create_doe_model(model=None)[source]

添加方程以计算灵敏度、FIM和目标。 构建DoE模型。将场景、灵敏度矩阵 Q、FIM以及目标函数添加到模型中。

该函数会改变model输入。

在单一实验的情况下,model 将是 self.model。在多实验的情况下,model 将是要枚举的一个实验。

Parameters:

model (用于添加有限差分场景的模型)

create_objective_function(model=None)[source]

生成目标函数作为表达式和作为Pyomo目标对象

该函数会改变model输入。

在单一实验的情况下,model 将是 self.model。在多实验的情况下,model 将是要枚举的一个实验。

Parameters:

model (用于添加有限差分场景的模型)

draw_factorial_figure(results=None, sensitivity_design_variables=None, fixed_design_variables=None, full_design_variable_names=None, title_text='', xlabel_text='', ylabel_text='', figure_file_name=None, font_axes=16, font_tick=14, log_scale=True)[源代码]

compute_FIM_full_factorial函数提供的结果字典中提取绘制图形所需的结果。

绘制一维灵敏度曲线或二维热图。

Parameters:
  • 结果 (字典, 来自 compute_FIM_full_factorial 的结果字典, 默认: None (self.fim_factorial_results))

  • sensitivity_design_variables (一个列表, 用于绘制敏感性的设计变量名称)

  • fixed_design_variables (一个字典, 键是要固定的设计变量名称, 值是要固定的值)

  • full_design_variable_names (一个列表, 问题中的所有设计变量。)

  • title_text (一个字符串, 图的名称)

  • xlabel_text (一个字符串, 用于图表的x轴标签 (默认值:最后一个设计变量名称)) – 在一维灵敏度曲线中,它应该是绘制曲线的设计变量。 在二维热图中,它应该是design_ranges中的第二个设计变量

  • ylabel_text (一个字符串, 用于图表的y轴标签 (默认: None (1D); 第一个设计变量名称 (2D))) – 1D 灵敏度曲线不需要它。在 2D 热图中,它应该是 dv_ranges 中的第一个设计变量

  • figure_file_name (字符串Path, 保存图形的路径)

  • font_axes (坐标轴标签字体大小)

  • font_tick (刻度标签字体大小)

  • log_scale (如果为True, 结果矩阵将通过log10进行缩放)

get_FIM(model=None)[source]

从指定的模型中获取FIM值

Parameters:

model (从中获取FIM的模型, 默认值: 无, (self.model))

Returns:

FIM

Return type:

FIM的二维列表表示(可以转换为numpy)

get_experiment_input_values(model=None)[source]

从指定的模型中获取实验输入值(实验设计)。

Parameters:

model (从中获取实验设计的模型,) – 默认值: None, (self.model)

Returns:

d

Return type:

实验输入值的一维列表(最优或指定设计)

get_experiment_output_values(model=None)[source]

从指定的模型中获取实验输出值(y hat)。

Parameters:

model (从中获取 y hat 的模型,) – 默认: None, (self.model)

Returns:

y_hat

Return type:

设计实验输出的1D列表值

get_measurement_error_values(model=None)[source]

从指定的模型中获取实验输出值(sigma)。

Parameters:

model (从中获取sigma值的模型,) – 默认值: None, (self.model)

Returns:

sigma_diag

Return type:

用于设计实验的测量误差的一维列表

get_sensitivity_matrix(model=None)[源代码]

从指定的模型中获取灵敏度矩阵(Q)值。

Parameters:

model (从中获取Q的模型, 默认值: 无, (self.model))

Returns:

问题

Return type:

敏感性矩阵的二维列表表示(可以转换为numpy)

get_unknown_parameter_values(model=None)[source]

从指定的模型中获取未知参数值(theta)。

Parameters:

model (从中获取theta的模型,) – 默认值: None, (self.model)

Returns:

theta

Return type:

设计此实验时未知参数值的1D列表

run_doe(model=None, results_file=None)[source]

运行单次实验估计的DoE。可以根据标志将结果保存在文件中。

Parameters:
  • model (用于运行实验设计的模型, 默认值: None (self.model))

  • results_file (字符串名称用于保存结果的文件路径) – 以.json文件的形式保存 默认值: None –> 不保存

update_FIM_prior(model=None, FIM=None)[source]

更新模型对象上的先验FIM。这在运行循环时可能很有用,因为用户不希望重建模型,因为构建/初始化成本很高。

Parameters:
  • model (需要更新FIM先验的模型, 默认值: 无, (self.model))

  • FIM (2D np数组作为新的FIM先验, 默认值: 无)