一种基于符号的混合装配序列生成方法与流程

文档序号:11952356阅读:397来源:国知局
一种基于符号的混合装配序列生成方法与流程
本发明涉及装配序列规划
技术领域
,具体涉及一种基于符号的混合装配序列生成方法。
背景技术
:装配序列规划(AssemblySequencePlanning,ASP)是装配规划中的一个技术难点,在产品设计开发和生产过程中占有很重要的地位。对于大规模产品的生产,一条优秀的装配序列将会大大的缩短产品的生产周期,降低产品的生产费用,提高产品的质量性能。ASP是一个高度约束的NP组合优化问题,装配序列的选择要遵循零件之间的几何约束关系,穷尽搜索算法复杂度为指数级。当产品较为复杂、零件数较多时,极易出现状态组合爆炸问题。可见,组合复杂性是制约装配序列规划效率和自动化水平的一个关键因素。减缓或者部分程度上避免组合复杂性问题的一种可行策略是采用符号或者隐式描述技术。有序二叉决策图(OrderedBinaryDecisionDiagram,OBDD)及其扩展形式可以实现状态空间或者变量组合的隐式表示和搜索,是迄今为止最为有效的符号技术之一。近年来,OBDD及其扩展形式(比如ADD和ZBDD)在装配序列规划方面已经有了一些应用。实验结果表明,利用OBDD或其扩展形式作为装配序列的表示比使用AND/OR图表示占用更小的存储空间。穷尽算法生成所有装配序列的过程中,经常会生成一些后来无法再进行装配的子装配体,称作不可行子装配体。如果不提前阻止这类子装配体的生成,那么后续将可能出现更多不可行子装配体,导致搜索结束后出现各种死状态(非终状态,但又没有后继状态)。所以还要进行回溯,删除所有死状态,而且当不可行子装配体数目较多时,最后处理死状态时比较复杂,会降低装配序列规划问题的求解效率和求解规模。如果在穷尽算法中加入引导信息来规避装配序列生成过程中生成不可行子装配体,将在保证解的质量的前提下,有效地提高搜索的效率,并提高所得可行装配序列的质量。技术实现要素:本发明提供一种基于符号的混合装配序列生成方法,其结合启发式策略,能够大大地提高装配序列规划的效率,扩大装配序列规划的规模。为解决上述问题,本发明是通过以下技术方案实现的:一种基于符号的混合装配序列生成方法,包括步骤如下:步骤A.获得装配体知识,生成装配体的联接矩阵和干涉矩阵;步骤B.根据装配体的联接矩阵,创建联接矩阵的ZBDD表示;步骤C.根据装配体的干涉矩阵,创建干涉矩阵的ZBDD表示;步骤D.根据装配体的干涉矩阵,求解优先关系矩阵;步骤E.根据装配体联接矩阵的ZBDD表示、干涉矩阵的ZBDD表示以及优先关系矩阵,采用符号ZBDD和分层思想搜索出所有可行的装配,即可行装配序列;同时,对搜索出的可行装配以及装配序列规划过程中生成的子装配体进行存储,并保存生成每个子装配体的路径数;步骤F.根据保存的可行装配以及子装配体,搜索并删除装配过程中的死状态。所述步骤B的具体步骤如下:步骤B1.利用变量对装配体的各个零件进行编码;步骤B2.根据装配体的联接矩阵,创建装配体联接关系的组合集合;步骤B3.根据装配体联接关系的组合集合以及组合集合到ZBDD的映射关系,进而得到装配体联接关系的ZBDD表示。所述步骤C的具体步骤如下:步骤C1.使用6个二进制变量即Z={z0,z1,z2,z3,z4,z5}对坐标轴的+X、+Y、+Z、-X、-Y和-Z这6个方向进行编码;步骤C2.根据装配体的干涉矩阵,得到装配体干涉关系的组合集合;步骤C3.根据装配体干涉关系的组合集合以及组合集合到ZBDD的映射关系,进而得到装配体干涉关系的ZBDD表示。所述步骤D的具体步骤如下:步骤D1.申请三个整型变量,即迭代次数变量a、b和c,并令迭代次数变量a=1;步骤D2.令迭代次数变量b=1,如果此时a≠b,则转至步骤D3,否则转至步骤D6;步骤D3.令迭代次数变量c=b+1,如果此时a≠c,则转至步骤D4,否则转至步骤D5;步骤D4.如果干涉矩阵中Txb-1xa-1∧Txc-1xa-1≠1,则表示零件xa-1不能在零件xb-1和零件xc-1都装配之后再装配,而必须先于零件xb-1和零件xc-1装配或在两者之间装配,将迭代次数变量a、b和c的当前值,即(a,b,c)保存于优先关系矩阵中;否则,转至D5;其中∧表示向量的按位与;步骤D5.令迭代次数变量c累加1,如果c≤n,则转至步骤D4;否则,转到步骤D6;步骤D6.令迭代次数变量b累加1,如果b<n,则转至步骤D3;否则,转到步骤D7;步骤D7.令迭代次数变量a累加1,如果a≤n,则转至步骤D2;否则,步骤D结束,求得完整的优先关系矩阵;上述Txb-1xa-1表示零件xb-1和零件xa-1在干涉矩阵中的移动向量函数,Txc-1xa-1表示零件xc-1和零件xa-1在干涉矩阵中的移动向量函数;n为零件总个数。所述步骤E的具体步骤如下:步骤E1.创建一个可行装配操作文件File_FeasibleOperations来存放可行装配操作;创建n个子装配体文件依次用来存放具有i个零件的子装配体,i=1,2,…,n,n为零件总个数;第一个子装配体文件初始存放所有n个单个零件的子装配体,其余文件初始为空;创建一个二维动态数组Num_Routes来存放生成每个子装配体的路径数;步骤E2.将第一个装配体文件记为当前层,即层次变量L=1;步骤E3.从当前层中读取一个子装配体p,并建立子装配体p的组合集合表示Fp(X);步骤E4.如果存放在子装配体p之前的子装配体都已和p进行过可行性判定,则转到步骤E11;否则,从存放在子装配体p之前的子装配体中选择一个子装配体q;若子装配体q中包含的零件个数小于等于n-L,则建立子装配体q的组合集合表示Fq(X);否则,转到步骤E11;步骤E5.判断2个子装配体的组合集合是否包含有共同的零件,即判断Fp(X)∩Fq(X)是否为空;如果不为空,则包含有共同的零件无法装配,转至步骤E4,选择下一个子装配体进行判定;如果为空,则不包含共同的零件,转至步骤E6;其中∩表示集合的交运算;步骤E6.判断子装配体p和子装配体q是否满足步骤D所生成的优先关系矩阵中的优先关系约束,即根据优先关系矩阵判断子装配体p和子装配体q装配在一起是否会导致其他未被装配的零件无法装配;若不满足优先关系约束,则转至步骤E4;若满足优先关系约束,则转至步骤E7;步骤E7.判断子装配体p和子装配体q是否满足联接矩阵的联接关系约束和干涉矩阵的干涉关系约束,即判断子装配体p和子装配体q是否满足装配可行性;若不满足装配可行性,转至步骤E4;若满足装配可行性,则二者可以组装成新的子装配体,转至步骤E8;步骤E8.由此生成可行装配操作NewFeasibleOperation和子装配体NewSubassembly;步骤E9.从第i个子装配体文件中检查子装配体NewSubassembly是否已被保存;若未被保存,把子装配体NewSubassembly写入第i个子装配体文件File_i中存放,并在二维动态数组Num_Routes内存放生成该子装配体的路径数;若已被保存,则只需改变原来存放在二维动态数组中的生成该子装配体的路径数;此时i=x+y,其中x代表子装配体p包含的零件数且1≤x<n,y代表子装配体q包含的零件数且1≤y<n;步骤E10.把可行装配操作NewFeasibleOperation写入步骤E1所创建的可行装配操作文件File_FeasibleOperations中进行存储,并转到步骤E4;步骤E11.如果当前层存放的子装配体未被判定完毕,转到步骤E3;否则,则把层次变量L累加1,若层次变量L小于零件总个数n,转到步骤E3;否则,步骤E结束。步骤E9中,生成子装配体的路径数的计算公式如下:NumNewSubassembly=Nump×Numq+NumNewSubassembly′1≤x<n,y=1NumNewSubassembly=Nump×Numq×(Πi=xx+y-2i)/(y-1)!+NumNewSubassembly′1≤x<n,1<y<n]]>其中,Nump代表生成子装配体p的路径数,Numq代表生成子装配体q的路径数,x代表子装配体p中所包含的零件数且1≤x<n,y代表子装配体q中所包含的零件数且1≤y<n,NumNewSubassembly代表本次迭代的生成子装配体的路径数,NumNewSubassembly'为上一次迭代的生成子装配体的路径数;!表示阶乘;所述步骤E7的具体步骤如下:步骤E71.计算Fp(X)和Fq(X)的笛卡尔积Fpq(X),即Fpq(X)=Fp(X)×Fq(X),并创建Fpq(X)所对应的ZBDD,记为ZBDDpq;步骤E72.执行ZBDDpq∩ZBDDC,若结果不为空,则子装配体p和子装配体q所代表的2个零件或子装配体满足联接关系约束,转至步骤E73;否则,不满足联接关系的约束,转至步骤E4;步骤E73.创建一个ZBDD,记为ZBDDD,用于存放待装配零部件之间的无冲突装配路径,初始存放坐标轴的六个方向z0,z1,z2,z3,z4和z5;步骤E74.对于ZBDDpq中的每一条路径x0x1…xn-1,在ZBDDT中搜索对应的路径x0x1…xn-1z0z1z2z3z4z5,截取z0z1z2z3z4z5,创建相应的ZBDD,记为ZBDDDS;并令ZBDDD=ZBDDD∩ZBDDDS;步骤E75.若ZBDDD不为空,则子装配体p和子装配体q所代表的两个零件或子装配体满足干涉关系约束,由步骤E72可知子装配体p和子装配体q也满足联接关系约束,因此二者满足装配可行性,转至步骤E8;否则,不满足干涉关系约束,转至步骤E4。所述步骤F的具体步骤如下:步骤F1.令存放包含2个零件的子装配体的文件即第二个子装配体文件为当前被简化层,即简化层次变量SL=2,并且令删除标志变量flag=0;步骤F2.从该层中选择一个子装配体sa;步骤F3.根据存放的可行装配操作,判定子装配体sa是否参与了装配,即判定子装配体sa是否是不可行子装配体;若子装配体sa是不行子装配体,则删除子装配体子装配体sa以及所有生成子装配体sa的装配操作,令flag=1;步骤F4.如果当前层存放的子装配体未检查完毕,则转到步骤F2;若否,则把简化层次变量SL累加1,若简化层次变量SL小于零件总个数n,则转至步骤F2;否则,如果flag=1,则转至步骤F1,如果flag=0,则步骤F结束。与现有技术相比,本发明用于在已知装配知识的前提下生成可行装配序列,其能够在较高的时间和空间效率下,通过分析所有可能的装配操作保证装配序列的完备性,通过判断局部装配几何可行性保证装配序列的可靠性,通过判断优先关系的可满足性保证算法的高效性,最终完成对装配体的所有可行装配序列的生成。用OBDD作为装配序列的表示,无论一个子装配体包含几个零件,表示子装配体、装配操作及装配序列的变量数都一样多的问题得到了解决,同时解决了如何更好地预先避免更多的不可行子装配体的生成问题。附图说明图1一种基于符号的混合装配序列生成方法的流程图。图2是本发明的一个实施例的模型图。图3是图2所示实施例的联接矩阵。图4是图2所示实施例的干涉矩阵。图5是图2所示实施例的联接矩阵的ZBDD表示图。图6是图2所示实施例的干涉矩阵的ZBDD表示图。图7是图2所示实施例的优先关系矩阵。图8是图2所示实施例的文件File_1,即具有1个零件的子装配体。图9是图2所示实施例的文件File_2,即具有2个零件的子装配体。图10是图2所示实施例的文件File_3,即具有3个零件的子装配体。图11是图2所示实施例的文件File_4,即具有4个零件的子装配体。图12是图2所示实施例的文件File_5,即具有5个零件的子装配体。图13是图2所示实施例的文件File_6,即完整装配体。图14是图2所示实施例的所有可行装配操作。具体实施方式本发明公开了一种基于符号的混合装配序列生成方法,包括步骤有:获得装配体知识,即装配体的联接矩阵和干涉矩阵;根据装配体的联接矩阵,创建联接矩阵的ZBDD表示;根据装配体的干涉矩阵,创建干涉矩阵的ZBDD表示;根据装配体的干涉矩阵,求解优先关系矩阵;搜索出所有可行的装配,即可行装配序列,并创建文件存放可行装配序列和装配过程中生成的子装配体,创建动态数组存放生成每个子装配体的路径数;对生成的存放可行装配序列和子装配体的文件进行精化,删除装配过程中的死状态。本发明能够在较高的时间和空间效率下,通过分析所有可能的装配操作保证装配序列的完备性,通过判断局部装配几何可行性保证装配序列的可靠性,通过判断优先关系的可满足性保证算法的高效性,最终完成对装配体的所有可行装配序列的生成。下面通过一个具体的实例对本发明进行进一步详细说明:一种基于符号的混合装配序列生成方法,如图1所示,具体包括如下步骤,即:步骤1.获得装配体知识,生成装配体的联接矩阵和干涉矩阵。图2为一个装配体的模型图。步骤2.根据装配体的联接矩阵,创建联接矩阵的ZBDD表示。图3是图2装配体的联接矩阵。步骤S21.对装配体的各个零件和子装配体进行编码,因为实施例中的装配体有6个零件,则用6个变量X={x0,x1,x2,x3,x4,x5}对零件和子装配体进行编码。每个变量表示一个零件,两个或多个变量组成的集合表示子装配体。步骤S22.根据实施例的联接矩阵,得到装配体联接关系的组合集合表示C(x0,x1,x2,x3,x4,x5)={x0x1,x1x2,x1x3,x3x4,x3x5,x4x5};步骤S23.根据装配体联接关系的组合集合C(X),得到装配体联接关系的ZBDD表示,如图5所示,记为ZBDDC。步骤3.根据装配体的干涉矩阵,创建干涉矩的ZBDD表示。图4是图2装配体的干涉矩阵。步骤S31.对坐标轴的各个方向进行编码,三维坐标共有+X、+Y、+Z、-X、-Y和-Z六个方向,所以使用6个二进制变量Z={z0,z1,z2,z3,z4,z5}为其编码。步骤S32.根据实施例的干涉矩阵,得到装配体干涉关系的组合集合表示为T(x0,x1,x2,x3,x4,x5,z0,z1,z2,z3,z4,z5)={x0x1z0,x0x2z0,x0x2z1,x0x2z2,x0x2z4,x0x2z5,x0x3z0,x0x4z0,x0x5z0,x1x2z0,x1x3z3,x1x4z0,x1x4z3,x1x5z0,x1x5z3,x2x3z1,x2x3z2,x2x3z3,x2x3z4,x2x3z5,x2x4z1,x2x4z2,x2x4z3,x2x4z4,x2x4z5,x2x5z1,x2x5z2,x2x5z3,x2x5z4,x2x5z5,x3x4z0,x3x5z0,x4x5z0,x4x5z3}。步骤S33.根据装配体干涉关系的组合集合T(XZ),得到装配体干涉关系的ZBDD表示,如图6所示,记为ZBDDT。步骤4.根据装配体的干涉矩阵,求解优先关系矩阵。步骤S41.申请三个整型变量,即迭代次数变量a、b和c,并令a=1。步骤S42.令b=1,如果此时a≠b,则转至步骤S43,否则转至步骤S46。步骤S46.令迭代次数变量b累加1,如果b≤n-1,其中为零件个数,则转至步骤S43;否则,转到步骤S47;此时b=2且b≤5,转至步骤S43。步骤S43.令c=b+1,如果此时a≠c,则转至步骤S44,否则转至步骤S45;此时计算可得c=3且a≠c,则转至步骤S44。步骤S44.在干涉矩阵中,两个零件p1和p2之间的移动向量函数表示为Tp1p2=(T0,T1,T2,T3,T4,T5),称作转移函数或者T-函数。定义为:Tp1p2=Ti→{0,1},i=0,1,2,3,4,5。其中,Tp1p2第i个分量Ti=1(i=0,1,2,3,4,5)表示零件p2对于p1存在在方向i上的移动自由度,即零件p2在方向i上有一条到零件p1的无冲突装配路径;Ti=0(i=0,1,2,3,4,5),表示零件p2对于p1不存在在方向i上的移动自由度,即零件p2在方向i上与零件p1存在干涉,无法实施装配。其中,0、1、2、3、4、5分别对应于三维坐标系统的六个方向:+X、+Y、+Z、-X、-Y、-Z。根据上述信息可知,如果干涉矩阵中Txb-1xa-1∧Txc-1xa-1≠1,则零件xa-1不能在零件xb-1和xc-1都装配之后再装配,而必须先于零件xb-1和xc-1装配或在两者之间装配。因此,如果Txb-1xa-1∧Txc-1xa-1≠1,则将(a,b,c)保存于优先关系矩阵中;此时a=1、b=2、c=3,而Tx1x0和Tx2x0不满足条件Txb-1xa-1∧Txc-1xa-1≠1,所以(1,2,3)不被保存于优先关系矩阵PrecedenceMatrix中。步骤S45.令迭代次数变量c累加1,如果c≤n,其中n为零件个数,则转至步骤S44;否则,转到步骤S46;此时c=4,c≤6,所以转到步骤S44。循环执行步骤S44~步骤S45,直至c>6,则可搜索出在a=1、b=2的前提下的优先关系约束。步骤S46.令迭代次数变量b累加1,如果b≤n-1,其中为零件个数,则转至步骤S43;否则,转到步骤S47;此时b=3且b≤5,转至步骤S43。循环执行步骤S43~步骤S46,直至b>5,则可搜索出在a=1的前提下的优先关系约束。步骤S47.令迭代次数变量a累加1,如果a≤n,则转至步骤S42;否则,步骤S4结束,求得完整的优先关系矩阵。此时a=2且a≤6,转至步骤S42。循环执行步骤S42~步骤S47,直至a>6,则可搜索出所有的优先关系约束,即求得完整的优先关系矩阵PrecedenceMatrix,如图7所示。步骤5.搜索出所有可行的装配,即可行装配序列,并创建文件存放可行装配操作和装配过程中生成的子装配体,创建动态数组存放生成每个子装配体的路径数。即:对所有存放子装配体的文件中的子装配体进行两两组合,每当两个子装配体组合在一起满足矩阵PrecedenceMatrix中的优先关系约束、联接关系约束和干涉关系约束时,便到相应的文件中检查两个子装配体组合而成的新的子装配体是否已经存在,若否,则把新的子装配体添加到文件中,并申请一块空间,存放生成该子装配体的路径数;否则,不添加,只需改变原来存放的生成该子装配体的路径数。同时,将该装配操作添加到存放可行装配操作的文件中,直至每一个子装配体都与其他的子装配体进行过组合可行性判断。步骤S51.首先,创建一个名为File_FeasibleOperations的文件用于存放可行装配操作。创建6个文件,依次命名为File_1,File_2,File_3,File_4,File_5和File_6。File_i用于存放具有i个零件的子装配体,其中i=1,…,6。文件File_1初始存放装配体的6个零件,文件File_2,File_3,File_4,File_5和File_6初始为空。创建一个二维动态数组Num_Routes,用于存放生成每个子装配体的路径数。其中,Num_Routes[i-1][j-1]存放的是生成文件File_i中第j个子装配体的路径数。Num_Routes[5][0]中存放的即是生成装配体的所有可行装配序列数。另外,规定单个零件的生成路径为1,即Num_Routes[1]中依次存放6个1;步骤S52.将存放装配体的单个零件的文件File_1,记为当前层L=1,也即是首先处理文件File_1中的单个零件,让当前层指向文件File_1;步骤S53.从该层中读取一个子装配体c,记为p。建立p的组合集合表示{x0},记为Fp(X);步骤S54.如果存放在p之前的子装配体都已和p进行过可行性判定,则转到步骤S511。因为p所代表的子装配体c是存储在第一个的子装配体,因此在p之前没有子装配体,于是转到步骤S511;步骤S511.如果当前层存放的子装配体未被判定完毕,转到步骤S53。因为第一层的文件File_1中存放了6个单零件子装配体,所以未被判定完毕,转到步骤S53;步骤S53.从该层中读取一个子装配体,此时读取第二个子装配体b,记为p,建立其组合集合表示{x1},记为Fp(X);步骤S54.从存放在p所代表的子装配体b之前的子装配体中选择一个子装配体,此时读取在p之前存放的第一个子装配体c,记为q。并且,q中包含的零件个数小于等于n-L,也即是小于等于5,因此,建立q的组合集合表示{x0},记为Fq(X);步骤S55.判断2个子装配体的组合集合是否包含有共同的零件,即判断Fp(X)∩Fq(X)是否为空;如果不为空,则包含有共同的零件无法装配,转步骤S54,选择下一个子装配体进行判定;如果为空,则不包含共同的零件,转至步骤S56判断二者是否满足优先关系约束。因为Fp(X)∩Fq(X)为空,所以,p和q不包含共同的零件,转至步骤S56。步骤S56.判断子装配体p和子装配体q是否满足步骤S4所生成的优先关系矩阵中的优先关系约束,即根据优先关系矩阵判断子装配体p和子装配体q装配在一起是否会导致其他未被装配的零件无法装配;若不满足优先关系约束,则转至步骤S54;若满足优先关系约束,则转至步骤S57对二者进行装配可行性判定。因为q和p所代表的子装配体c和b的编码分别是x0和x1,根据图7所示的该装配体的优先关系矩阵PrecedenceMatrix可知,存在优先关系约束(4,1,2),也即是表示零件x0和零件x1装配在一起之后会导致零件x3无法装配。因此,p和q不满足优先关系矩阵PrecedenceMatrix中的优先关系约束。转至步骤S54。步骤S54.如果存放在p之前的子装配体都已和p进行过可行性判定,则转到步骤S511。因为p所代表的子装配体b是存储在第二个的子装配体,并且,存放在b之前的第一个子装配体c已被进行过判定,因此在p之前没有未被判定的子装配体,于是转到步骤S511;步骤S511.如果当前层存放的子装配体未被判定完毕,转到步骤S53。因为第一层的文件File_1中存放了6个单零件子装配体,目前仅判定了前两个,所以该层存放的子装配体未被判定完毕,转到步骤S53;步骤S53.从该层中读取一个子装配体,此时读取第三个子装配体u,记为p,建立其组合集合表示{x2},记为Fp(X);步骤S54.从存放在p所代表的子装配体u之前的子装配体中选择一个子装配体,此时读取在p之前存放的第一个子装配体c,记为q。并且,q中包含的零件个数小于等于n-L,也即是小于等于5,因此,建立q的组合集合表示{x0},记为Fq(X);步骤S55.判断2个子装配体的组合集合是否包含有共同的零件,即判断Fp(X)∩Fq(X)是否为空;如果为空,则不包含共同的零件,转至步骤S56。因为Fp(X)∩Fq(X)为空,所以,p和q不包含共同的零件。转至步骤S56。步骤S56.判断子装配体p和子装配体q是否满足步骤S4所生成的优先关系矩阵中的优先关系约束,即根据优先关系矩阵判断子装配体p和子装配体q装配在一起是否会导致其他未被装配的零件无法装配;若不满足优先关系约束,则转至步骤S54;若满足优先关系约束,则转至步骤S57对二者进行装配可行性判定。因为q和p所代表的子装配体c和u的编码分别是x0和x2,根据图7所示的该装配体的优先关系矩阵PrecedenceMatrix可知,存在优先关系约束(2,1,3)、(4,1,3)、(5,1,3)和(6,1,3),也即是表示零件x0和零件x2装配在一起之后会导致零件x1、x3、x4和x5无法装配。因此,p和q不满足优先关系矩阵PrecedenceMatrix中的优先关系约束。转至步骤S54。步骤S54.从存放在p所代表的子装配体u之前的子装配体中选择一个子装配体,此时读取存放在p之前的第二个子装配体b,记为q。并且,q中包含的零件个数小于等于n-L,也即是小于等于5,因此,建立q的组合集合表示{x1},记为Fq(X);步骤S55.判断2个子装配体的组合集合是否包含有共同的零件,即判断Fp(X)∩Fq(X)是否为空;如果为空,则不包含共同的零件,转至步骤S56。因为Fp(X)∩Fq(X)为空,所以,p和q不包含共同的零件。转至步骤S56。步骤S56.判断子装配体p和子装配体q是否满足步骤S4所生成的优先关系矩阵中的优先关系约束,即根据优先关系矩阵判断子装配体p和子装配体q装配在一起是否会导致其他未被装配的零件无法装配;若不满足优先关系约束,则转至步骤S54;若满足优先关系约束,则转至步骤S57对二者进行装配可行性判定。因为q和p所代表的子装配体b和u的编码分别是x1和x2,根据图7所示的该装配体的优先关系矩阵PrecedenceMatrix可知,零件x0和零件x2装配在一起不会导致其他零件无法装配。因此,p和q满足优先关系矩阵PrecedenceMatrix中的优先关系约束。向下执行步骤S57对二者进行装配可行性判定;步骤S57.判断子装配体p和子装配体q是否满足联接矩阵的联接关系约束和干涉矩阵的干涉关系约束,即判断子装配体p和子装配体q是否满足装配可行性;若不满足,转至步骤S54;若满足装配可行性,则二者可以组装成新的子装配体,转至步骤S58;步骤S571.计算Fp(X)和Fq(X)的笛卡尔积Fpq(X),即Fpq(X)=Fp(X)×Fq(X)={x1x2},并创建Fpq(X)所对应的ZBDD,记为ZBDDpq;步骤S572.执行ZBDDpq∩ZBDDC,若结果不为空,则子装配体p和子装配体q所代表的2个零件或子装配体满足联接关系约束,转至步骤S573;否则,不满足联接关系的约束,转至步骤S54;因为此时ZBDDpq∩ZBDDC={x1x2},所以,p和q满足联接关系约束,转至步骤S573。步骤S573.创建一个ZBDD,记为ZBDDD,用于存放待装配零部件之间的无冲突装配路径,初始存放坐标轴的六个方向z0,z1,z2,z3,z4和z5;步骤S574.对于ZBDDpq中的每一条路径x0x1…xn-1,在ZBDDT中搜索对应的路径x0x1…xn-1z0z1z2z3z4z5,截取z0z1z2z3z4z5,创建相应的ZBDD,记为ZBDDDS;并令ZBDDD=ZBDDD∩ZBDDDS;于是,对ZBDDpq中的路径x1x2进行操作。在ZBDDT中搜索出的对应路径x1x2z0。因此,截取可得{z0}。故有,ZBDDDS={z0}。执行ZBDDD=ZBDDD∩ZBDDDS,可得ZBDDD={z0}。步骤S575.若ZBDDD不为空,则子装配体p和子装配体q所代表的两个零件或子装配体满足干涉关系约束,转至步骤S58;否则,不满足干涉关系约束,转至步骤S54。由步骤S574中的计算结果可知不为空,所以p和q满足干涉关系约束。由步骤S572可知子装配体p和子装配体q也满足联接关系约束,因此二者满足装配可行性,转至步骤S58。步骤S58.由此生成可行装配操作NewFeasibleOperation和子装配体NewSubassembly;根据p和q所代表的子装配体的组合集合表示可得NewFeasibleOperation={x2y1y2},NewSubassembly={bu}。步骤S59.从第i个子装配体文件中检查子装配体NewSubassembly是否已被保存;若未被保存,把子装配体NewSubassembly写入第i个子装配体文件File_i中存放,并在二维动态数组Num_Routes内存放生成该子装配体的路径数;若已被保存,则只需改变原来存放在二维动态数组中的生成该子装配体的路径数;此时i=x+y,其中x代表子装配体p包含的零件数且1≤x<n,y代表子装配体q包含的零件数且1≤y<n。因为NewSubassembly包含两个零件,所以从相应的文件File_2中检查NewSubassembly是否已被保存。由于这是求解到的第一个子装配体,所以,该子装配体未被保存,把子装配体NewSubassembly写入硬盘里的文件File_2中存放。由于具有6个零件,因此用6个二进制变量X={x0,x1,x2,x3,x4,x5}来表示,根据b和u的编码分别是x1和x2可得子装配体{bu}的存储形式为“011000”。另外,在内存中的二维数组Num_Routes内存放生成该子装配体的路径数NumNewSubassembly。由于NewSubassembly是第一次生成,所以NumNewSubassembly初始为0。并且,因为x=1、y=1,所以Nump=1、Numq=1。根据如下计算路径数的公式可知NumNewSubassembly=1×1+0=1。因此,把求得的NumNewSubassembly的值1存放在二维数组的Num_Routes[1][0]中。NumNewSubassembly=Nump×Numq+NumNewSubassembly′1≤x<n,y=1NumNewSubassembly=Nump×Numq×(Πi=xx+y-2i)/(y-1)!+NumNewSubassembly′1≤x<n,1<y<n]]>步骤S510.把可行装配操作NewFeasibleOperation写入步骤S51所创建的可行装配操作文件File_FeasibleOperations中进行存储,并转到步骤S54;对于该装配体,由于具有6个零件,因此使用12个二进制变量(X,Y)来表示装配操作。其中X={x0,x1,x2,x3,x4,x5}用于表示p,Y={y0,y1,y2,y3,y4,y5}用于表示NewSubassembly。因此,可行装配操作{x2y1y2}存储在文件File_FeasibleOperations中的编码形式为“001000011000”。转到步骤S54。步骤S54.如果存放在p之前的子装配体都已和p进行过可行性判定,则转到步骤S511。因为p所代表的子装配体u是存储在第三个的子装配体,并且,存放在u之前的两个子装配体c和b都已被判定,因此在p之前没有未被判定的子装配体,于是转到步骤S511;步骤S511.如果当前层存放的子装配体未被判定完毕,转到步骤S53;否则,则把层次变量L累加1,若L小于零件总个数n,转到步骤S53;否则,步骤S5结束。循环执行步骤S53~步骤S511,直至每一层中的每一个子装配体都与其他的子装配体进行过装配可行性判断,步骤S5结束。步骤S6.对生成的存放可行装配操作和子装配体的文件进行精化,删除装配过程中的死状态。包括步骤:步骤S61.令存放包含2个零件的子装配体的文件为当前被简化层,记为当前简化层SL=2,即首先处理文件File_2中的子装配体,让当前简化层指向文件File_2,并且令删除标志变量flag=0;步骤S62.从该层中读取出第一个子装配体“011000”,即{bu},记为sa;步骤S63.根据存放的可行装配操作,判定子装配体sa是否参与了装配,即判定子装配体sa是否是不可行子装配体;若子装配体sa是不行子装配体,则删除子装配体子装配体sa以及所有生成子装配体sa的装配操作,令flag=1。因此,到文件File_FeasibleOperations中搜索是否存在子装配体sa参与的装配操作。读取文件File_FeasibleOperations中第一个装配操作“001000011000”,即{x2y1y2}。该装配操作表示零件“010000”和零件“001000”装配在一起生成子装配体“011000”,因此,该装配操作无法证明“011000”能否和其他子装配体进行装配,即无法说明“011000”是否是死状态。然后依次读取存放在后面的装配操作,直至读取到装配操作“000111011111”时,发现子装配体“011000”可以与子装配体“000111”进行装配,生成子装配体“011111”。由此可知,“011000”不是死状态,不必删除,flag的依然为0。执行步骤S64,读取下一个子装配体进行判定。步骤S64.如果当前层存放的子装配体未检查完毕,则转到步骤S62;若否,则把简化层次变量SL累加1,若SL小于零件总个数n,则转至步骤S62;否则,如果flag=1,则转至步骤S61,如果flag=0,则步骤S6结束。因为此时第二层的子装配体未检查完毕,因此转至步骤S62读取下一个子装配体,而不必让SL加1转至下一层进行判定。循环执行步骤S61~步骤S64,直至文件File_2~文件File_5中所有的子装配体(也即是装配的中间状态)都检查完毕,确保没有死状态存在,那么步骤S6结束,整个算法也到此结束。此时即可求得装配体的所有可行装配序列。程序运行结束之后求得的文件File_1、File_2、File_3、File_4、File_5和File_6依次如图8、图9、图10、图11、图12和图13所示,6个文件中存放着所有的子装配体。文件File_FeasibleOperations中存放着所有的可行装配序列,如图14所示。本发明的方法给出装配体的联接矩阵和干涉矩阵;根据装配体的联接矩阵创建联接矩阵的ZBDD表示;根据装配体的干涉矩阵创建干涉矩阵的ZBDD表示;根据装配体的干涉矩阵,求解优先关系矩阵;对所有存放子装配体的文件中的子装配体进行两两组合,每当两个子装配体组合在一起满足矩阵PrecedenceMatrix中的优先关系约束、联接关系约束和干涉关系约束时,便到相应的文件中检查两个子装配体组合而成的新的子装配体是否已经存在,若否,则把新的子装配体添加到文件中,并申请一块空间,存放生成该子装配体的路径数;否则,不添加,只需改变原来存放的生成该子装配体的路径数。同时,将该装配操作添加到存放可行装配操作的文件中,直至每一个子装配体都与其他的子装配体进行过组合可行性判断;删除装配过程中的死状态。本发明能够在较高的时间和空间效率下,通过分析所有可能的装配操作保证装配序列的完备性,通过判断局部装配几何可行性保证装配序列的可靠性,通过判断优先关系的可满足性保证算法的高效性,最终完成对装配体的所有可行装配序列的生成。为了减少装配序列规划中表示子装配体、装配操作和装配序列的变量个数以及预先避免更多不可行子装配体的生成,进而提高装配序列规划的效率,扩大装配序列规划的规模,本发明对子装配体、装配操作和装配序列的特点进行分析,将其表示成组合集合,使得不在子装配体中的零件,其变量不出现在表示该子装配体的集合中,以减少编码所用变量数;其次,利用ZBDD表示和处理组合集合高效性的特点,降低了装配序列生成过程中对空间的需求,更好地解决组合问题,具有较高的计算效率;最后,本发明还结合启发式策略,在不影响可行装配操作生成的情况下,预先避免更多不可行子装配体的生成,从而简化了最后删除死状态的过程。因此,本发明具有较高的时间和空间效率。通过结合附图对本发明具体实施例的描述,本发明的其他方面及特征对本领域的技术人员而言是显而易见的。以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为只是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行解释。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1