找回密码
 注册
Simdroid-非首页
楼主: cocoon

[二次开发] 基于SiPESC.OPT 使用Abaqus优化算例

[复制链接]
发表于 2011-4-15 09:24:11 | 显示全部楼层 来自 重庆沙坪坝区
路过,学习啦
回复 不支持

使用道具 举报

发表于 2011-4-15 11:24:56 | 显示全部楼层 来自 陕西西安
Simdroid开发平台
本帖最后由 clear-lucky 于 2011-4-15 14:03 编辑

38# cocoon
要实现在 SiPESC.OPT的脚本调用Abaqus,需要修改的是36行的那个函数eval() 的内容,如何进行修改呢?不好意思,上午显示没有看到图表下面还有的说明和图表,现在才看到,真是谢谢您,我再调试下。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-15 12:09:03 | 显示全部楼层 来自 大连理工大学
本帖最后由 cocoon 于 2011-4-16 09:36 编辑

SiPESC.OPT自动生成的脚本文件cup.js中, eval()函数内容如下:

  1. //
  2. // 计算优化模型中目标函数值和约束函数值。
  3. function eval( )
  4. {
  5.    var R =  theModel.getVariable( "R" );
  6.    var H =  theModel.getVariable( "H" );

  7.    var V = -(Math.PI*R*R*H );
  8.    theModel.setObject( "V" , V );


  9.    var S = Math.PI*R*R + 2* Math.PI*R*H - 100;
  10.    theModel.setConstraint( "S" , S );

  11. }

复制代码
写参数文件,读结果文件的代码,运行Abaqus的脚本代码插入到eval()函数体中,

  1. //
  2. // 计算优化模型中目标函数值和约束函数值。
  3. function eval( )
  4. {
  5.    var R =  theModel.getVariable( "R" );
  6.    var H =  theModel.getVariable( "H" );

  7.   // 在这里要插入写参数文件的脚本代码

  8.   // 在这里要插入运行Abaqus的脚本代码

  9.   // 在这里要插入读结果文件的代码


  10.    // 下面这一行就可以注释掉了
  11.    var V = -(Math.PI*R*R*H );   
  12.    theModel.setObject( "V" , V );

  13.    // 下面这一行就可以注释掉了
  14.    var S = Math.PI*R*R + 2* Math.PI*R*H - 100;
  15.    theModel.setConstraint( "S" , S );

  16. }

复制代码
修改后的eval()函数体代码如下:

  1. //
  2. // 计算优化模型中目标函数值和约束函数值。
  3. function eval( )
  4. {
  5.    // 从优化模型对象theModel中提取R和 H
  6.    var R =  theModel.getVariable( "R" );
  7.    var H =  theModel.getVariable( "H" );

  8.    // 生成一个名为parameterFile的FILE对象  
  9.    parameterFile = new FILE;

  10.    //  设置文件名为 D:/SIMULIA/workspace/parameter.txt
  11.    parameterFile.setFileName( "D:/SIMULIA/workspace/parameter.txt" );

  12.    //以模式2打开文件,
  13.    state = parameterFile.open(2);
  14.    // 如果返回值为false,则输出警告信息。
  15.    if( !state )
  16.    {
  17.         print("open result file failed.");
  18.    }
  19.    // 下面这两行就可以注释掉了
  20.    // var R = 1;
  21.    // var H = 1;

  22.    //  向文件中写入变量R 以及一个换行符\n
  23.    parameterFile.write( R + "\n" );

  24.    //  向文件中写入变量H 以及一个换行符\n
  25.    parameterFile.write( H + "\n" );

  26.    //将缓冲池中的数据写入文件中。
  27.    parameterFile.flush();

  28.    //关闭文件result
  29.    parameterFile.close();



  30.    //运行计算软件来得到新的目标函数值

  31.     var abaqusExeFileName = "D:/SIMULIA/abaqus/6.9-1/exec/abq691.exe"

  32.     var arguments = new Array( "cae","noGUI=D:\\SIMULIA\\workspace\\cup.py" );

  33.     process = new Process;

  34.     process.execute( abaqusExeFileName , arguments );

  35.     print("===========finished.==========")


  36.    // 文件名
  37.    var parameterFilePath = "D:/SIMULIA/workspace/result.txt";

  38.    // 生成一个名为fooParser的FileParser对象
  39.    var fooParser = new FileParser;

  40.    //  指定文件名,并尝试打开文件。
  41.    fooParser.open( parameterFilePath );


  42.    //   第一行
  43.    var line = fooParser.readLine();
  44.    var V = parseFloat(line);

  45.    //   第二行
  46.    line = fooParser.readLine();
  47.    var V = parseFloat(line);

  48.    //  关闭文件
  49.    fooParser.close();

  50.    // 下面这一行就可以注释掉了
  51.    //var V = -(Math.PI*R*R*H );
  52.    theModel.setObject( "V" , V );

  53.    // 下面这一行就可以注释掉了
  54.    //var S = Math.PI*R*R + 2* Math.PI*R*H - 100;
  55.    theModel.setConstraint( "S" , S );


复制代码
上边的代码没有来得及测试,不能保证运行正确。
回复 不支持

使用道具 举报

发表于 2011-4-15 13:55:48 | 显示全部楼层 来自 陕西西安
39# cocoon
首先设定结果文件为
D:/SIMULIA/workspace/result.txt2 |' Q& g5 P6 [1 _$ F) W! @
设定参数文件为
D:/SIMULIA/workspace/parameter.txt: {. d8 C6 t$ {' L: r1 O2 R
其内容为R和H的值7 @" \% E9 H4 b9 |; z
   1.0
   2.0( E7 Q" H" Q( M0 Q3 ?
这里为啥把H设置成2,而不是1呢?
回复 不支持

使用道具 举报

发表于 2011-4-15 17:06:46 | 显示全部楼层 来自 陕西西安
本帖最后由 clear-lucky 于 2011-4-15 17:26 编辑

43# cocoon

这个水杯的读结果文件的代码跟那个吊耳的读结果文件不一样喔,没有统一模式么?

  • // 文件名
  •    var parameterFilePath = "D:/SIMULIA/workspace/result.txt";
  •    // 生成一个名为fooParser的FileParser对象
  •    var fooParser = new FileParser;
  •    //  指定文件名,并尝试打开文件。
  •    fooParser.open( parameterFilePath );
  •    //   第一行
  •    var line = fooParser.readLine();
  •    var V = parseFloat(line);
  •    //   第二行
  •    line = fooParser.readLine();
  •    var V = parseFloat(line);
  •    //  关闭文件
  •    fooParser.close();
为啥要分第一行,第二行输出?12行和16行有啥区别呢?是不是有一行得输出S呢?

运行之后,出错的地方仍然在cae:

4/15/11 17:31:49 Debug: Load database "E:/SIPESCOpt/SIPESC.Opt/bin/.././temp/OptimizationDB" succeed

Abaqus Error: cae exited with an error.

4/15/11 17:32:13 Debug: ===========finished.==========

4/15/11 17:32:14 Debug: MOptModelSaver::initializeModel: Create table "cup" succeed.

Abaqus Error: cae exited with an error.

4/15/11 17:32:38 Debug: ===========finished.==========
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-15 18:07:39 | 显示全部楼层 来自 大连理工大学
本帖最后由 cocoon 于 2011-4-15 18:17 编辑

45# clear-lucky

这里为啥把H设置成2,而不是1呢?
这个2 是随手写的,呵呵
设置1也行,设置成3 也可以,只要在设计变量的取值范围之内就行。

你可以直接使用Abaqus运行cup.py,在Abaqus中,点击File菜单中的Run Script选项,会出现打开文件对话框,找到并打开cup.py,就可以运行cup.py,这样可以检查cup.py是否有错误,
可以看看结果文件的内容,以坚持运行是否正确


第12行代码 是创建一个新变量 line,把从文件读的一行文本赋值给 line
这是读取文件result.txt的第一行

第16行代码 是把从文件再读取一行文本赋值给 line,也就是读取文件result.txt的第二行
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-15 18:45:23 | 显示全部楼层 来自 大连理工大学
本帖最后由 cocoon 于 2011-4-15 18:49 编辑

这个水杯的读结果文件的代码跟那个吊耳的读结果文件不一样,两种方式都可以,要根据具体情况选择使用,这个结果文件中,V 和 S 这两个结果分两行写在了结果文件中,所以使用现在这种 逐行读取的方法,


如果要按照吊耳的读结果文件的方法,以读取parameter.txt文件为例,可以如下操作:
打开文件解析器,
点击工具->文件解析按钮


会弹出打开文件对话框,选择并打开parameter.txt,
然后将鼠标移动到计算结果V的开始位置,也就是第一行的起始位置,按住鼠标左键,将鼠标滑动到这一行的末尾,松开鼠标左键,你所划过地方的颜色会加深显示,文本解析器窗口右侧的指示光标位置数字也会随着你鼠标的移动而变化,


在文本解析器右侧的Variant Name 下的文本输入栏中输入变量名 R,
这个文本输入框右边的 那个 + 号 会高亮显示, 鼠标点击那个 + 号,这样 变量R,以及它在文件中的起始,终止位置都会记录下来。

对变量H 也如法炮制




然后点击文件解析器右下的确定按钮,会弹出一个保存文件对话框,

姑且命名为foo.js,会把从文件中提取变量的脚本自动生成 并保存到这个文件中

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-16 15:06:06 | 显示全部楼层 来自 大连理工大学
本帖最后由 cocoon 于 2011-5-30 20:25 编辑

各个文件之间的关系如图所示


SiPESC.OPT运行cup.js,
Abaqus运行cup.py


SiPESC.OPT执行cup.js,进行优化循环,在每一个迭代步中,SiPESC.OPT更新参数文件,然后启动Abaqus,执行脚本cup.jy,计算目标函数和约束函数,将计算结果保存到结果文件中,SiPESC.OPT读取结果文件,更新优化模型,进行下一个迭代步。

这个模式不只是能适用于Abaqus的python脚本
也可以适用于Ansys的APDL脚本,
也可以适用于 MSC/Patran的PCL脚本,...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-24 13:07:54 | 显示全部楼层 来自 大连理工大学
修改了solver.exe的一个bug,更新后,可以实现遗传算法与SQP、SLP、BFGS算法杂交优化(hybrid optimization)
更新了帮助文档。
回复 不支持

使用道具 举报

发表于 2011-5-4 13:07:49 | 显示全部楼层 来自 江苏南京
楼主能发给我一份吗?邮箱是:qin_xg@163.com
非常感谢!
回复 不支持

使用道具 举报

发表于 2011-5-5 07:50:30 | 显示全部楼层 来自 北京
您好,SiPESC.OPT 软件可以发给我一份么?前几年用过optimus和isight这类的优化软件,不过都不是开源的。想试用一下SiPESC.OPT软件。
谢谢。
我的邮箱是:dayonghu1978@gmail.com
回复 不支持

使用道具 举报

发表于 2011-5-5 08:02:53 | 显示全部楼层 来自 北京
您好,SiPESC.OPT 软件可以发给我一份么?前几年用过optimus和isight这类的优化软件,不过都不是开源的。想试用一下SiPESC.OPT软件。
谢谢。
我的邮箱是:dayonghu1978@gmail.com
回复 不支持

使用道具 举报

发表于 2011-5-5 08:03:51 | 显示全部楼层 来自 北京
您好,SiPESC.OPT 软件可以发给我一份么?前几年用过optimus和isight这类的优化软件,不过都不是开源的。想试用一下SiPESC.OPT软件。
谢谢。
我的邮箱是:dayonghu1978@gmail.com
回复 不支持

使用道具 举报

发表于 2011-5-24 17:19:03 | 显示全部楼层 来自 江苏南京
fy5462008@163.com
谢谢楼主分析,学习学习~
回复 不支持

使用道具 举报

发表于 2011-5-24 18:44:21 | 显示全部楼层 来自 浙江杭州
谢谢楼主,看了您关于SiPESC.OPT的介绍很感兴趣,请您也给我发一份,谢谢您!
我的邮箱是von928@163.com
回复 不支持

使用道具 举报

发表于 2011-6-13 15:31:24 | 显示全部楼层 来自 浙江杭州
楼主您好!

  我在做论文过程也要用到优化和ABAQUS相结合分析,您能给我也发一份吗?

tjyouyi@163.com

谢谢!
回复 不支持

使用道具 举报

发表于 2011-6-26 10:27:54 | 显示全部楼层 来自 浙江杭州
谢谢楼主,看了您关于SiPESC.OPT的介绍很感兴趣,也希望研究研究,能否发我一份,谢谢您!我的邮箱是304950944@qq.com
回复 不支持

使用道具 举报

发表于 2011-7-7 15:50:14 | 显示全部楼层 来自 黑龙江哈尔滨
本帖最后由 michael_chn 于 2011-7-7 15:54 编辑

cocoon大侠,我对您的abaqus优化程序SiPESC.OPT很感兴趣,能给我发一份么?
81802860@qq.com.
谢谢!:)
回复 不支持

使用道具 举报

发表于 2011-7-10 10:28:42 | 显示全部楼层 来自 北京
楼主,发给我一份吧,很想学习下。非常感激! tongjunwh@163.com
回复 不支持

使用道具 举报

发表于 2011-7-17 13:33:38 | 显示全部楼层 来自 印度
thank you good post
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 22:16 , Processed in 0.051392 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表