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

[二次开发] 如何用Python语言实现Abaqus与Matlab中遗传算法的集成

[复制链接]
发表于 2013-8-23 09:27:04 | 显示全部楼层 |阅读模式 来自 辽宁沈阳
悬赏10仿真币未解决
小弟是做铣削模拟的,通过改变装夹关系来得到不同的变形量。现在想通过MATLAB中的遗传算法来进行变形优化设计,具体问题如下:以最大变形量最小为目标函数,以装夹位置为自变量,在初始装夹关系下进行铣削模拟,得到一组变形量,然后输入到MATLAB中,通过遗传算法来选择不同的装夹位置,以得到最小变形量。

目前思路如下:1,用ABA模拟铣削过程,调出INP文件
                         2.用PY语言从ODB文件调出位移量
                         3.用MATLAB 调出INP文件,让ABA进行模拟,然后调用PY获得位移变形量
                         4.通过优化算法求得最小变形时的装夹位置.

现在前两步基本可以搞定了,关键是后两步愁人啊,所以例出以下问题,希望各路大神可以解救一下
                        1.matlab如何调用INP文件,让ABA自动模拟
                        2.如何在INP文件中把装配关系定义为可变量,定义在一定区间内变化
                        3.matlab如何调用PY的位移结果
                        4,如何应用优化算法



发表于 2013-8-23 11:07:07 | 显示全部楼层 来自 湖南长沙
Simdroid开发平台
既然都用python了,为什么要调用inp文件?直接写脚本进行建模,把那个夹具位置作为变量,按照你的判断准则循环即可,这样会方便得多。
回复

使用道具 举报

 楼主| 发表于 2013-8-24 09:23:38 | 显示全部楼层 来自 辽宁沈阳
hitlxm 发表于 2013-8-23 11:07
既然都用python了,为什么要调用inp文件?直接写脚本进行建模,把那个夹具位置作为变量,按照你的判断准则 ...

首先非常感谢你的回答。现在我的水平只能用py导出结果,至于前处理,我还不会,虽然可以通过。rpy导出,但感觉不是很完整。而INP却可以全部记录。
  那如果直接用PY的话,装配关系怎么编呢。例如RP1是part1的参考点,rp1在(0,0,0)到(10,10,10)变化区间、
回复

使用道具 举报

发表于 2013-8-24 12:06:55 | 显示全部楼层 来自 美国
您好。
根据您的要求来看,您需要的只是一个优化算法,并不一定需要用到遗传算法。
既然是用ABAQUS, 我推荐您使用python的scipy stack来实现,比matlab要“集成”可靠的多。
www.scipy.org

用matlab当然也可以调用python的后果实现——我能想到的方法就是让python把结果写到csv文件里,再用matlab读取。

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-8-25 10:36:06 | 显示全部楼层 来自 辽宁沈阳
UVAShawn 发表于 2013-8-24 12:06
您好。
根据您的要求来看,您需要的只是一个优化算法,并不一定需要用到遗传算法。
既然是用ABAQUS, 我推 ...

感谢你的回答。第一种方法我先了解一下。至于第二种写入csv,被MATLAB读取能给个详细点的吗?
回复

使用道具 举报

发表于 2013-8-25 11:28:22 | 显示全部楼层 来自 美国
shiyuxiang 发表于 2013-8-24 21:36
感谢你的回答。第一种方法我先了解一下。至于第二种写入csv,被MATLAB读取能给个详细点的吗?
...

1) 通过MATLAB读取,修改INP文件。这个不难,相信你应该会。读取文件后用MATLAB内部的regular expression就行。
2) 提交JOB。用命令行提交就行,matlab里面!开头的都是送到shell的命令。记得最后加interactive。
3) 用MATLAB提取结果。又是两种方法:
a. 用node print, el print等方法输出到DAT文件后用MATLAB和regular expression提取
b. 输出成ODB, 用python提取。然后在python里面输出到csv文件,最基本的我能想到的就是你在得到数据以后整理成matrix (也就是numpy里面ndarray)的格式,然后
import numpy as np
np.savetxt('my_output.csv', my_output_data, delimiter=',')
最后再用matlab的myData = dlmread('my_output.csv');读取就可以了。

回复

使用道具 举报

 楼主| 发表于 2013-8-26 08:58:57 | 显示全部楼层 来自 辽宁沈阳
UVAShawn 发表于 2013-8-25 11:28
1) 通过MATLAB读取,修改INP文件。这个不难,相信你应该会。读取文件后用MATLAB内部的regular expressio ...

你的回答很详细,但是貌似我太菜了,好多不会,以下是相对应的问题:
1.INP中如何修改装配关系,MATLAB如何读取我也不会.
2.用命令行提交,是在INP中实现是吧?还是matlab啊?
3.第三步我还是比较喜欢用b方法

小弟现在快硕士毕业了,做不出来好闹心啊,感谢您抽空给我帮助,谢谢.
回复

使用道具 举报

发表于 2013-8-26 11:31:50 | 显示全部楼层 来自 美国
shiyuxiang 发表于 2013-8-25 19:58
你的回答很详细,但是貌似我太菜了,好多不会,以下是相对应的问题:
1.INP中如何修改装配关系,MATLAB如 ...

话说,再细就要讨论到你的具体模型了……

1) 做一两个简单的模型,看看生成的INP文件,结合ABAQUS的DOC,应该能看懂。INP语言博大精深,还是得花点儿时间学习一下。
2) MATLAB里面提交命令行,大概就是在MATLAB里面执行:!call C:\SIMULIA\Abaqus\Commands\abaqus.bat cpus=2 job=my_job input=my_job.inp memory="3000 mb" standard_memory="3000 mb" interactive
3)  第三部的b方法挺好滴,加油:)
回复

使用道具 举报

 楼主| 发表于 2013-8-26 15:19:43 | 显示全部楼层 来自 辽宁沈阳
UVAShawn 发表于 2013-8-26 11:31
话说,再细就要讨论到你的具体模型了……

1) 做一两个简单的模型,看看生成的INP文件,结合ABAQUS的DOC ...

多谢,我再努力努力
回复

使用道具 举报

发表于 2013-8-27 10:30:08 | 显示全部楼层 来自 陕西西安
UVAShawn 发表于 2013-8-25 11:28
1) 通过MATLAB读取,修改INP文件。这个不难,相信你应该会。读取文件后用MATLAB内部的regular expressio ...

lz你好,看了你的这个帖子,用matlab提交job这一步我已经实现,非常感谢!
现在我想用matlab把dat文件读取出来,然后用matlab遗传算法进行优化,生成新的inp文件,循环计算,直至生成最优解。请问lz有没有做过这样的例子,帮忙指点一二,多谢了!我的具体思路如下:

本帖子中包含更多资源

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

×
回复

使用道具 举报

发表于 2013-8-27 14:19:04 | 显示全部楼层 来自 美国
zgpkaoyan2010 发表于 2013-8-26 21:30
lz你好,看了你的这个帖子,用matlab提交job这一步我已经实现,非常感谢!
现在我想用matlab把dat文件读 ...

可以用matlab的regular expression去读取DAT文件,贴一段当时的CODE供参考:

        abaqus_raw=extractDAT('nlvisco.dat');   
            function abaqus_raw = extractDAT(filename)
               
                fid=fopen(filename,'r');
                                
                if fid==-1
                    
                    abaqus_raw=[];
                    return
                end
               
                frewind(fid);
                abaqus_raw=[];
                idx=1;

                while feof(fid)==0
                    str=fgetl(fid);
                    s1=regexp(str,'TOTAL TIME COMPLETED +(?<time>\S+)','names');
                    if ~isempty(s1)
                        abaqus_raw(idx,1)=str2double(s1.time);
                    end

                    s2=regexp(str,'S11 +S22 +S33 +S12','match');
                    if ~isempty(s2)
                        fgetl(fid);
                        fgetl(fid);
                        str=fgetl(fid);
                        s2=regexp(str,'\s+(?<pt>\S+)\s+(?<fn>\S+)\s+(?<s11>\S+)\s+(?<s22>\S+)\s+(?<s33>\S+)\s+(?<s12>\S+)','names');
                        abaqus_raw(idx,2)=str2double(s2.s22);
                    end

                    if ~isempty(s2)
                        idx=idx+1;
                    end
                end
                fclose(fid);
               
            end

评分

1

查看全部评分

回复

使用道具 举报

发表于 2014-2-24 09:34:52 | 显示全部楼层 来自 湖北武汉
学习中
回复

使用道具 举报

发表于 2014-3-10 12:05:07 | 显示全部楼层 来自 天津
看看python在abaqus中的应用这本书,上面可以找到你这个问题的办法,不过遗传算法直接用python编写不就完了,你的那种思路有点复杂
回复

使用道具 举报

发表于 2015-4-4 19:36:08 | 显示全部楼层 来自 北京
恩,不错,学习了
回复

使用道具 举报

发表于 2016-9-25 11:17:06 | 显示全部楼层 来自 四川成都
3333333333
回复

使用道具 举报

发表于 2018-6-28 15:48:06 | 显示全部楼层 来自 内蒙古
可以开通思路,非常感谢!
回复

使用道具 举报

发表于 2018-7-18 00:27:20 | 显示全部楼层 来自 美国
UVAShawn 发表于 2013-8-24 12:06
您好。
根据您的要求来看,您需要的只是一个优化算法,并不一定需要用到遗传算法。
既然是用ABAQUS, 我推 ...

abaqus 内置的python好像没有sicpy模块? 请问这个该怎么解决啊?
回复

使用道具 举报

发表于 2018-7-24 13:20:30 | 显示全部楼层 来自 江苏苏州
努力学习学习
回复

使用道具 举报

发表于 2018-7-31 16:45:47 | 显示全部楼层 来自 广东深圳
挺好的  谢谢了!
回复

使用道具 举报

发表于 2018-12-6 11:45:19 | 显示全部楼层 来自 广东佛山
感觉看的挺值的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 08:45 , Processed in 0.041248 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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