了解如何使用Preference文件(.mvw) 在HyperStudy中注册Compose/OML或python functions,然后使用已注册的函数在研究中进行输出响应评估。
Rosenbrock functions被定义为python或OML脚本,并在HyperStudy中注册。
该示例定义了两个分别标记为x和y的输入变量。优化的目标是最小化f(x,y)= 100(y-x^2)^2 +(1-x)^2*。x和y的范围设置为[-2 ; -2] ,起点为[-1 ; -1]。
在此步骤中,您将使用Compose或Python定义Rosenbrock functions。
使用Compose定义Rosenbrock functions。
1.启动Compose。
2.在菜单栏中,单击File>New>OML FILE。
3.在编辑器中,输入以下OML命令:
function f = ros_eval(x,y)
f = 100.0*(y-x^2)^2 + (1-x)^2
4.在菜单栏中,单击File>Save As。
5.在Save As对话框中,导航到您的工作目录并将文件另存为rosenbrock_function.oml。
6.通过单击菜单栏中的File>Exit退出编写。
Tip:在Compose中使用OML functions的Register functions ...功能时,请避免后续的Preferences File.步骤。突出显示函数名称,然后右键单击以在上下文菜单上 访问此功能。
使用Python定义Rosenbrock functions。
7.在您最喜欢的文本编辑器中,输入以下python命令:
def ros_eval(x, y):
return 100*(y-x*x)*(y-x*x) + (1-x)*(1-x) 8.在菜单栏中,单击File>Save As。
9.在Save As对话框中,导航到您的工作目录并将文件另存为rosenbrock_function.py。
在此步骤中,您将把OML/python functions添加到Preference文件中。
将OML functions添加到Preference文件中。
1.在文本编辑器中,输入以下OML注册函数:
*Id(HyperGraph v11.0)
*BeginDefaults()
*BeginPlotDefaults()
*SetOMLRootDir(C:/Program Files/Altair/2019/Compose2019)
*RegisterOMLFunction(ros_eval,/rosenbrock_function.oml,2)
*EndPlotDefaults()
*EndDefaults()
2.将 替换为文件的实际位置。
3.修改*SetOMLRootDir语句以指向适当的位置。
4.将文件另存为名称为rosenbrock_prefs.mvw file的Preferences File.。
5.关闭文本编辑器。
将python functions添加到Preference文件中。
6.在文本编辑器中,输入以下python注册函数:
*Id(HyperStudy v14.0)
*BeginDefaults()
*BeginPlotDefaults()
*RegisterPythonFunction(ros_eval,/rosenbrock_function.py,2)
*EndPlotDefaults()
*EndDefaults()
7.将 替换为.py文件的实际位置。
8.将文件另存为名称为rosenbrock_prefs.mvw file的Preferences File.。
9.关闭文本编辑器。
1.启动HyperStudy。
2.设置Preference文件。
a)在菜单栏中,单击File>UsePreferences File.。
b)在HyperStudy - setting - Preferences File.对话框中,打开rosenbrock_prefs.mvw文件。
3.通过以下方式开始新研究:
o在菜单栏中,单击File>New。
o在功能区上,单击。
4.在Add Study对话框中,输入研究名称,选择研究的位置,然后单击OK。
5.转到Define Models步骤。
6.添加Internal Math模型。
a)单击Add Model。
b)在Add对话框中,选择Internal Math,然后单击OK。
7.转到Define Input Variables步骤。
8.添加输入变量。
a)单击Add input variable两次。
b)在工作区中,标记输入变量x和y。
c)将输入变量的下限、初始和上限更改为图1中指示的值。
1.转到Test Models步骤。
2.单击Run Define。在study Directory中创建approaches/setup_1-def/ 目录。approaches/setup_1-def/run__00001/m_1目录包含输入文件,该文件是试运行的结果。
1.转到Define Output Responses步骤。
2.单击Add Output Response。
3.在Response 1的Expression列中,单击。
4.在Expression Builder中,单击Functions选项卡。
5.从可用函数列表中,选择ros_eval。
6.单击Insert varname。函数ros_eval() 将显示在Evaluate Expression字段中。
7.单击Input Variables选项卡。
8.在工作区中,选择输入变量x和y。
9.单击Insert varname。
输入变量在表达式中显示为ros_eval(var_1, var_2)。
10.单击OK。
11.单击Evaluate。表达式ros_eval(var_1, var_2) 更改为404。
1.添加优化。
a)在Explorer中,右键单击并从上下文菜单中选择Add。
b)在Add对话框中,选择Optimization。
c)对于Definition from,选择一种方法,然后单击OK。
2.转到Optimization>Definition>Define Output Responses步骤。
3.单击Objectives/Constraints - Goals选项卡。
4.将目标添加到响应1。
a)单击Add Goal。
b)在Type列中,选择Minimize。
5.转到Optimization>Specifications步骤。
6.在工作区中,将Mode设置为Adaptive Response Surface Method(ARSM)。
Note:只启用对问题表述有效的方法。
7.单击Apply。
8.转到Evaluate步骤。
9.单击Evaluate Tasks。
10.Optional:点击Iteration Plot选项卡以监控优化进度。
迭代历程记录显示objective值显著减少。Rosenbrock functions有一个全局最小值,任何优化器都很难找到,因为它在真正最优区域是平坦的,并且ARSM没有找到(x,y)=(1,1) 的理论解。