找回密码
 注册
Simdroid-非首页
查看: 3029|回复: 82

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

[复制链接]
发表于 2011-3-31 14:42:16 | 显示全部楼层 |阅读模式 来自 大连理工大学
本帖最后由 cocoon 于 2014-4-20 16:41 编辑

吊耳内孔半径尺寸优化
吊耳模型 如图所示,原设计方案中内孔半径为0.015m,现将其作为设计变量,使得吊耳受载后最大Mises应力最小。

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

这个模式不只是能适用于Abaqus的python脚本
也可以适用于Ansys的APDL脚本, MSC/Patran的PCL脚本,EnergyPlus,(别的还没有试过)...

通用优化软件SiPESC.OPT是有版权软件,目前仅限于科研,教学非商业用途。
如有需要此软件并自愿遵守上述要求,请留邮箱(软件压缩后有60多M),也可与 我 (QQ 65681607)联系。


软件使用可以参考  http://forum.simwe.com/thread-972046-1-1.html

关于优化软件SiPESC.OPT, 请参见:
"通用集成优化软件SiPESC.OPT的设计与实现" 《计算机辅助工程》 2011年04期
某地铁车大变形碰撞分析和结构优化研究, 大连交通大学, 2011年
机械压力机六连杆机构优化设计,  大连理工大学学报 ( Journal of Dalian University of Technology), 2013年 01期  Yang, Chunfeng, Haijiang Li, Yacine Rezgui, Ioan Petri, Baris Yuce, Biaosong Chen, and Bejay Jayan. "High throughput computing based distributed genetic algorithm for building energy consumption optimization." Energy and Buildings76 (2014): 92-101.

本帖子中包含更多资源

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

×

评分

1

查看全部评分

 楼主| 发表于 2011-3-31 15:26:14 | 显示全部楼层 来自 大连理工大学
Simdroid开发平台
本帖最后由 cocoon 于 2011-3-31 18:05 编辑

假设:
SiPESC.OPT已经安装,路径为:
D:/sipopt

Abaqus安装在 D:/SIMULIA/ 中,其主程序abq691.exe的路径为:
D:/SIMULIA/abaqus/6.9-1/exec/abq691.exe

吊耳有限元分析的脚本文件路径为:
D:/SIMULIA/workspace/python_Lug02.py

SiPESC.OPT 与 Abaqus 交互信息使用的数据文件为parameterValues.txt,它保存设计变量值
D:/SIMULIA/workspace/parameterValues.txt

SiPESC.OPT 与 Abaqus 交互信息使用的数据文件为maxMises.txt,它保存最大Mises应力
D:/SIMULIA/workspace/maxMises.txt


使用方法:
启动SiPESC.OPT
1) 鼠标左键双击SiPESC.OPT的主程序SIPOpt.exe,
2) SiPESC.OPT启动,弹出主窗口。

运行脚本

3) 点击SiPESC.OPT主窗口中的 文件->运行脚本文件按钮.
4) SiPESC.OPT弹出打开文件对话框。
5) 选取Lug_opt.js,点击打开按钮。
6) SiPESC.OPT开始优化计算流程,并在SiPESC.OPT主窗口的Result文本框中显示优化计算信息。

查看优化结果

7) 点击SiPESC.OPT主窗口中的后处理按钮,
8)  SiPESC.OPT弹出后处理对话框。
9) 点击后处理对话框中File->open按钮,
10)SiPESC.OPT弹出打开文件对话框。
11)选择打开D:/sipopt/temp/OptimizationDB。SiPESC.OPT将优化中的迭代历史数据以Table形式保存在这个文件中。
12)SiPESC.OPT在后处理对话框中添加Tables菜单
13)在Tables菜单选择Lug按钮
14) SiPESC.OPT显示吊耳优化的迭代历史,后处理对话框左侧是以表格形式显示,右侧以迭代历史曲线形式。
左侧表格中一行记录一个迭代步,设计变量,目标函数,约束函数等按列依次排布。
点击左侧表格中一栏,右侧将显示该列数据的历史曲线

本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

发表于 2011-3-31 15:34:33 | 显示全部楼层 来自 新加坡
lz是原创么?

脚本文件请以附件形式上传。一个楼层好几页,看起来多有不便;而且别人难以复制。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-3-31 18:34:25 | 显示全部楼层 来自 大连理工大学
本帖最后由 cocoon 于 2011-4-9 20:19 编辑

Lug_opt.js脚本文件详解

使用SiPESC.OPT调用Abaqus优化计算的脚本Lug_opt.js
详解如下:
(注:Abaqus使用的脚本为Python, SiPESC.OPT使用的脚本文件为JavaScript,两个略有不同,其中双斜杠 // 后均为注释  )


//
// 创建一个优化模型对象,供后续程序使用。
var theModel = new OptModel;

//
// 设置优化模型的名称。
theModel.setModelName("Lug");
// 软件将迭代历史保存在以Lug为名的Table中
// 在查看优化结果时,要依据优化模型名选择相应的Table。

//
// 设置优化模型中优化变量的初始值以及上、下限。
theModel.setVariable( "innerRadius" ,  0.015 ) ;
theModel.setVariableLowerLimit( "innerRadius" , 0.001 ) ;
theModel.setVariableUpperLimit( "innerRadius" , 0.023 ) ;

//
// 计算优化模型中目标函数值和约束函数值。
function eval( )
{
    //经过上次优化处理后,模型对象theModel中会产生新的,算法判断较好的设计变量值。
    //将新值赋给参数建模的参数。
    var innerRadius =  theModel.getVariable( "innerRadius" );

    parser = new FileParser;
    parser.open( "D:\\SIMULIA\\workspace\\parameterValues.txt"); // python 脚本python_Lug02.py从文件parameterValues.txt读取数据,你要更改数据文件的路径,要在python_Lug02.py和这里做相应修改。
    parser.replaceString( 0, 7, innerRadius );     // 更新参数文件中的参数值。其中的0,7为参数值在文件中的起始和结束位置,软件提供相应的工具自动计算这两个位置的数值。
    parser.close();


    //运行计算软件来得到新的目标函数值
    var abaqusExeFileName = "D:/SIMULIA/abaqus/6.9-1/exec/abq691.exe"
    var arguments = new Array( "cae","noGUI=D:\\SIMULIA\\workspace\\python_Lug02.py" );
    process = new Process;
    process.execute( abaqusExeFileName , arguments );

    print("===========finished.==========")
    process.kill();

    //从计算软件的输出文件中提取目标函数值
    parser = new FileParser;                    
    parser.open( "D:\\SIMULIA\\workspace\\maxMises.txt");      //打开输出文件。 python 脚本python_Lug02.py将结果保存到文件maxMises.txt中,你要更改数据文件的路径,要在python_Lug02.py和这里做相应修改。
  
    var  obj = parser.retriveString( 0, 17 );  // 从分析结果文件中提取最大Mises应力值,其中的0,17为最大Mises应力值在文件中的起始和结束位置,软件提供相应的工具自动计算这两个位置的数值。
    theModel.setObject( "obj" , obj );
    parser.close();
   
    // showing result
    print("innerRadius = " + innerRadius )
    print("maxMises = " + obj + "\n")

}



//
// 使用优化变量的初始值对优化模型初始化。
eval( );



//
// 设置优化算法参数。
GA.setMINMAX( -1 );
GA.setGENERATION( 150 );
GA.setPOPULATIONSIZE( 30 );
GA.setMUTATIONPROBABILITY( 0.1 );
GA.setCROSSOVERPROBABILITY( 0.8 );
  
var Solver =  GA ;
// 软件提供了BFGS, SLP,SQP,GA,DGA(可处理离散设计变量的GA算法)等优化算法模块,
// 注:这里使用了遗传算法(GA),如要使用BFGS, SLP,SQP等算法,只需要将GA更换成相应的算法名即可。
// 当然BFGS, SLP,SQP等算法的参数与GA算法有不同之处,例如,若要使用SLP算法,上面这一段脚本命令只需要更换为
// SLP.setMINMAX( -1 );
//
// var Solver =  SLP ;

//
// 使用优化模型初始化优化算法。
Solver.initialize( theModel );

//
// 初始化数据库,以备存储优化迭代过程中优化模型数据。
ModelSaver.executeSQLCommand( "DROP TABLE IF EXISTS Lug" );  
ModelSaver.initializeModel( theModel );  

//
// 开始优化迭代计算。
do{  
    eval();  
   // 将优化模型信息,保存到数据库中,数据库名默认为OptimizationDB
    ModelSaver.save( theModel );  
    Solver.renewModel( theModel );
}while(  ! Solver.isComplete() )    // 如果未满足终止条件,则继续迭代
回复 不支持

使用道具 举报

发表于 2011-3-31 19:33:21 | 显示全部楼层 来自 浙江嘉兴
楼主和陈飚松师兄是什么关系啊?呵呵。
给我发一份SiPESC.Opt 吧。谢谢!  lncg78@163.com
我QQ:8525187
回复 不支持

使用道具 举报

 楼主| 发表于 2011-3-31 19:40:36 | 显示全部楼层 来自 大连理工大学
本帖最后由 cocoon 于 2011-4-1 07:32 编辑

SiPESC.OPT通用优化设计软件 已经发送到你的邮箱中。
谢谢您使用,欢迎提出宝贵意见。
此软件是有版权软件,目前仅限于科研,教学非商业用途。
回复 不支持

使用道具 举报

发表于 2011-3-31 20:09:32 | 显示全部楼层 来自 白俄罗斯
给我发一份SiPESC.Opt 吧。谢谢!  kendys@fenox.com
回复 不支持

使用道具 举报

 楼主| 发表于 2011-3-31 20:33:52 | 显示全部楼层 来自 大连理工大学
本帖最后由 cocoon 于 2011-4-1 07:32 编辑

7# Kendysmax
SiPESC.OPT通用优化设计软件 已经发送到你的邮箱中。
谢谢您使用,欢迎提出宝贵意见。
此软件是有版权软件,目前仅限于科研,教学非商业用途。
回复 不支持

使用道具 举报

发表于 2011-3-31 21:37:43 | 显示全部楼层 来自 澳大利亚
请问LZ在计算这个优化算例的时候GA算法的精度是多少?怎么可以控制我需要的取值范围的精度?比如说在设计范围0.001-0.023之间, 我只要设计参数的精度到达0.0001就可以了
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-1 07:49:40 | 显示全部楼层 来自 大连理工大学
本帖最后由 cocoon 于 2011-4-4 08:10 编辑

9# rogerzong
BFGS, SLP,SQP,GA这些算法都是使用迭代法优化求解的,迭代步长多是当前值乘以一个小的系数。你所要求的0.0001远大于计算机的机器误差,应该能够满足精度要求。(不知道我的理解是否和你的本意有偏差。)。
这个样例中,设计变量的初始值是0.015,最终收敛于0.0145374(这个样例只是演示如何基于SiPESC.OPT使用Abaqus进行优化的流程,对于优化结果是否合理,不做保证)。如果你只要精度到达0.0001,可以对结果做圆整。Javascript中有一个方法“toFixed()”,这个方法就是用来截取小数点后尾数的长度的。例:var a = 343.12345465;var b = b.toFixed(4);这样b小数点后的尾数就是4位了,注意,它是按照四舍五入进行截取的。
回复 不支持

使用道具 举报

发表于 2011-4-1 15:19:07 | 显示全部楼层 来自 陕西渭南
给我发一份SiPESC.Opt 吧。谢谢!  heromail@foxmail.com
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-1 15:29:44 | 显示全部楼层 来自 大连理工大学
11# CHAORAN

SiPESC.OPT通用优化设计软件 已经发送到你的邮箱中。
谢谢您使用,欢迎提出宝贵意见。

此软件是有版权软件,目前仅限于科研,教学非商业用途。
回复 不支持

使用道具 举报

发表于 2011-4-1 15:56:09 | 显示全部楼层 来自 重庆沙坪坝区
据说是DUT开发的,先谢谢了,我的邮箱是santon_100@163.com
回复 不支持

使用道具 举报

发表于 2011-4-2 08:06:16 | 显示全部楼层 来自 澳大利亚
对优化很感兴趣,情楼主发一份
SiPESC.OPT
谢谢
steven.6v@gmail.com
回复 不支持

使用道具 举报

发表于 2011-4-2 18:30:25 | 显示全部楼层 来自 安徽淮南
请楼主发一份SiPESC.OPT到我的信箱,研究一下,谢谢!chbwang_aust@126.com
回复 不支持

使用道具 举报

发表于 2011-4-3 04:45:06 | 显示全部楼层 来自 俄罗斯
1# cocoon

请楼主也发我一份,多谢了!邮箱lms5882946@hotmail.com
回复 不支持

使用道具 举报

发表于 2011-4-3 21:40:00 | 显示全部楼层 来自 重庆
楼主,看了您关于SiPESC.OPT的介绍很感兴趣,请您也给我发一份,谢谢您!我的邮箱是:cquaaa@gmail.com
回复 不支持

使用道具 举报

发表于 2011-4-4 09:46:41 | 显示全部楼层 来自 吉林长春
楼主,能给我也发一份吗,好多问题想问,留个邮箱吧,我的yangxunfeng158@163.com
谢谢了
回复 不支持

使用道具 举报

发表于 2011-4-4 21:40:11 | 显示全部楼层 来自 澳大利亚
我的意思不是对最终的优化参数做小数点后4位的截取,
而是在优化过程中,对设计参数的小数位数的控制,比如说这个例子,我只让我的设计参数以0.0151,0.0152,0.0143这样的形式出现,相当于控制我的设计参数的个数。而LZ得这个例子中,设计参数是小数点后7位,则设计参数的范围就大大增加。 不知道要每次迭代后设计参数控制在小数点四位 应该如何实现?
10# cocoon
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-5 07:49:34 | 显示全部楼层 来自 大连理工大学
SiPESC.OPT使用的Javascript脚本语言(和Abaqus使用的Python一样,都是面向对象的脚本语言)
Javascript中有一个方法“toFixed()”,这个方法就是用来截取小数点后尾数的长度的。例:var a = 343.12345465;var b = b.toFixed(4);这样b小数点后的尾数就是4位了,注意,它是按照四舍五入进行截取的。
在这个样例中,也可以使用这种方法控制设计变量的精度,可以将脚本稍做修改,
   //将新值赋给参数建模的参数。
    var tempRadius =  theModel.getVariable( "innerRadius" );
        var innerRadius = tempRadius.toFixed(4); //这样就可以将设计变量的精度控制在小数点后4位。


不知道这样是否能满足你的要求
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 02:58 , Processed in 0.056331 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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