shiyuxiang 发表于 2013-8-23 09:27:04

如何用Python语言实现Abaqus与Matlab中遗传算法的集成

小弟是做铣削模拟的,通过改变装夹关系来得到不同的变形量。现在想通过MATLAB中的遗传算法来进行变形优化设计,具体问题如下:以最大变形量最小为目标函数,以装夹位置为自变量,在初始装夹关系下进行铣削模拟,得到一组变形量,然后输入到MATLAB中,通过遗传算法来选择不同的装夹位置,以得到最小变形量。

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

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



hitlxm 发表于 2013-8-23 11:07:07

既然都用python了,为什么要调用inp文件?直接写脚本进行建模,把那个夹具位置作为变量,按照你的判断准则循环即可,这样会方便得多。

shiyuxiang 发表于 2013-8-24 09:23:38

hitlxm 发表于 2013-8-23 11:07 static/image/common/back.gif
既然都用python了,为什么要调用inp文件?直接写脚本进行建模,把那个夹具位置作为变量,按照你的判断准则 ...

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

UVAShawn 发表于 2013-8-24 12:06:55

您好。
根据您的要求来看,您需要的只是一个优化算法,并不一定需要用到遗传算法。
既然是用ABAQUS, 我推荐您使用python的scipy stack来实现,比matlab要“集成”可靠的多。
www.scipy.org

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

shiyuxiang 发表于 2013-8-25 10:36:06

UVAShawn 发表于 2013-8-24 12:06 static/image/common/back.gif
您好。
根据您的要求来看,您需要的只是一个优化算法,并不一定需要用到遗传算法。
既然是用ABAQUS, 我推 ...

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

UVAShawn 发表于 2013-8-25 11:28:22

shiyuxiang 发表于 2013-8-24 21:36 static/image/common/back.gif
感谢你的回答。第一种方法我先了解一下。至于第二种写入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');读取就可以了。

shiyuxiang 发表于 2013-8-26 08:58:57

UVAShawn 发表于 2013-8-25 11:28 static/image/common/back.gif
1) 通过MATLAB读取,修改INP文件。这个不难,相信你应该会。读取文件后用MATLAB内部的regular expressio ...

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

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

UVAShawn 发表于 2013-8-26 11:31:50

shiyuxiang 发表于 2013-8-25 19:58 static/image/common/back.gif
你的回答很详细,但是貌似我太菜了,好多不会,以下是相对应的问题:
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方法挺好滴,加油:)

shiyuxiang 发表于 2013-8-26 15:19:43

UVAShawn 发表于 2013-8-26 11:31 static/image/common/back.gif
话说,再细就要讨论到你的具体模型了……

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

多谢,我再努力努力

zgpkaoyan2010 发表于 2013-8-27 10:30:08

UVAShawn 发表于 2013-8-25 11:28 static/image/common/back.gif
1) 通过MATLAB读取,修改INP文件。这个不难,相信你应该会。读取文件后用MATLAB内部的regular expressio ...

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

UVAShawn 发表于 2013-8-27 14:19:04

zgpkaoyan2010 发表于 2013-8-26 21:30 static/image/common/back.gif
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

suixiang 发表于 2014-2-24 09:34:52

学习中

luomawangzi 发表于 2014-3-10 12:05:07

看看python在abaqus中的应用这本书,上面可以找到你这个问题的办法,不过遗传算法直接用python编写不就完了,你的那种思路有点复杂

dindindindindin 发表于 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模块? 请问这个该怎么解决啊?

zuoshoudeba 发表于 2018-7-24 13:20:30

努力学习学习

wangchao1234142 发表于 2018-7-31 16:45:47

挺好的谢谢了!

xiaoxinhuo 发表于 2018-12-6 11:45:19

感觉看的挺值的
页: [1] 2
查看完整版本: 如何用Python语言实现Abaqus与Matlab中遗传算法的集成