- 积分
- 0
- 注册时间
- 2007-10-28
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2011-4-14 18:27:20
|
显示全部楼层
来自 大连理工大学
本帖最后由 cocoon 于 2011-4-15 07:26 编辑
- //
- //
- // This file is generated by SiPESC.Opt
- // COPYRIGHT (C) , 2009
- //
- //
- // ALL RIGHTS RESERVED
- //
- //
- // 2011 . 04. 12
- /////////////////////////////////////////////////
-
- //
- // 创建一个优化模型对象,供后续程序使用。
- var theModel = new OptModel;
- //
- // 设置优化模型的名称。
- theModel.setModelName("cup");
- //
- // 设置优化模型中优化变量的初始值以及上、下限。
- theModel.setVariable( "R" , 1 ) ;
- theModel.setVariableLowerLimit( "R" , 0 ) ;
- theModel.setVariableUpperLimit( "R" , 10 ) ;
- theModel.setVariable( "H" , 1 ) ;
- theModel.setVariableLowerLimit( "H" , 0 ) ;
- theModel.setVariableUpperLimit( "H" , 100 ) ;
- //
- // 计算优化模型中目标函数值和约束函数值。
- function eval( )
- {
- var R = theModel.getVariable( "R" );
- var H = theModel.getVariable( "H" );
- var V = -(Math.PI*R*R*H );
- theModel.setObject( "V" , V );
- var S = Math.PI*R*R + 2* Math.PI*R*H - 100;
- theModel.setConstraint( "S" , S );
- }
- //
- // 使用优化变量的初始值对优化模型初始化。
- eval( );
-
- //
- // 设置优化算法参数。
- SQP.setMINMAX( -1 );
- SQP.setMaxIterationNumber( 100 );
-
- var Solver = SQP ;
- //
- // 使用优化模型初始化优化算法。
- Solver.initialize( theModel );
- //
- // 初始化数据库,以备存储优化迭代过程中优化模型数据。
- ModelSaver.executeSQLCommand( "DROP TABLE IF EXISTS cup" );
- ModelSaver.initializeModel( theModel );
- //
- // 开始优化迭代计算。
- do{
- eval();
- ModelSaver.save( theModel );
- Solver.renewModel( theModel );
- } while( ! Solver.isComplete() )
-
复制代码 上面是SiPESC.OPT生成的优化脚本文件。
0--11行 是文件版权信息,
大部分脚本代码都有注释,
要实现在 SiPESC.OPT的脚本调用Abaqus
需要修改的是36行的那个函数eval() 的内容
eval() 从36行开始到48行结束,它的主要功能如注释所言,是根据优化模型的设计变量值,计算目标函数值和约束函数值,并把新的目标函数值和约束函数值赋值给优化模型对象,
36行是函数声明,
37行的{ 是函数体的起始标识符,
48行的 }是函数体的结束标识符,
这一点与python语言不同,在python中函数体没有起始标识符和结束标识符,python中函数体是靠字符缩进来标识函数体。
首先,需要了解函数eval() 是如何被调用的,先看75--79行的迭代循环结构,就是在这里实现了寻找优化解的迭代历程。
75--79行的脚本代码是一个do...while() ... 循环,
79行中while语句中()内是是个判断语句
do 后{}内的76--78行语句组成是循环体,
运行时,首先执行一遍循环体,然后执行判断语句,如果执行判断语句得到的是 true,则继续执行循环体,如果执行判断语句得到的是 false,则终止循环。
76行 是调用eval函数,
77行 是保存优化模型的数据到数据库中,也就是保存优化迭代历史信息,供以后查看
78行 是让优化算法求解器(Solver)更新优化模型数据,主要是根据优化模型的目标函数值和约束函数值,更新优化模型的设计变量值,如果优化模型满足优化条件,优化算法求解器(Solver)会将自身的迭代终止的标识符,这样 在执行 79行的判断语句Solver.isComplete()时候,就会返回 true ,那个感叹号 !是表示改变bool的状态 ,也就是说它将true改变成false(感叹号 !也会将false改变成true ),因此,do...while() ... 循环就终止执行,优化迭代循环也就完成了, |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|