




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、神经网络用于机器手臂的控制机械手是一种高度非线性、强耦合、时变的系统,对它的控制基本为两种:基于精确数学模型的传统控制和与模型无关的智能控制。由于机械手系统的复杂性,其精确的数学模型难以建立,使应用传统的控制手段对其进行的控制效果欠佳。常用的智能控制手段如模糊控制、人工神经网络等又有各自的局限性。一般说来,模糊逻辑方法虽然长于表达近似与定性的知识,却通常无学习能力;神经网络具有学习能力,但内部知识的表达方式又是不清楚的,这样神经网络在每次学习时只能从任意初始条件开始,不能利用必要的初始经验或知识,收敛速度慢,易陷入局部极限;而由于缺乏学习能力,模糊逻辑方法只能主观或试凑地选择隶属函数和模糊规则
2、,不能根据积累的经验自动地改善系统的性能。上世纪70年代,J.S.Albus根据神经生理学小脑皮层的结构特点,提出了一种小脑模型关联控制(cerebellar model articulation controller),即CMCA神经网络,是一种类似于Perceptron的相联记忆方法,与模糊逻辑不但是相互补充的,而且也是相互结合的。首先它用连接主义来表达模糊逻辑控制器,引入了学习机制,也带来了两者结合的诸多优点,如存储容量的减小,泛化能力的增加,以及连接主义结构的容错性等。其次,在CMAC的分布表达中,一个值由散布于许多计算单元的活性模式表示,每个计算单元又涉及许多不同值的表达,因此每个计
3、算单元都有一个感受野(receptive field),即它表达的所有值的集合,这相当于每个计算单元都对应一个模糊集合,或者说感受野相当于隶属函数,这正是它们能够有机结合的一个基础。1CMAC的优越性神经网络可分为全局逼近神经网络和局部逼近神经网络,如果网络的一个和多个连接权系数或自适应可调参数,在输入空间的每一点对任何一个输出都有影响,则称该神经网络为全局逼近网络。如BP网络,每一次样本学习都需要重新调整网络的所有权值,收敛速度慢,易陷入局部最小,很难满足控制系统的实时性要求;若对输入空间的某个局部区域,只有少数几个连接权影响网络的输出,则称该网络为局部逼近网络,从而使局部逼近网络具有学习速
4、度快的优点。CMAC、RBF以及某些模糊神经网络是局部逼近网络。CMAC比其他神经网络的优越性体现在:CMAC神经网络把信息存储在局部的结构上,在保证函数逼近的前提下,学习速度快。CMAC函数逼近器对学习数据出现的次序不敏感,因此,CMAC在时变、非线性系统控制中得到广泛应用。CMAC结构简单,易于硬件实现和软件实现。因此,CMAC已被越来越多的学者所关注,并得到广泛的应用。2CMAC模型结构CMAC的模型结构如图1所以,它的工作过程是一系列映射。输入状态空间S的维数由对象决定。一般来说,输入是模拟量,需要进行量化,然后才能送入存储区A,状态空间中的每一点将同时激活A中的c个单元。网络输出F(
5、si)为c个对应单元中的值(即权wi)累加的结果,如对应s1输入单眼有c4个,则 SKIPIF 1 0 Fig1 CMAC结构模型可把c看作是信号检测单元的感受野大小,其值与泛化能力有关,所以有时称c为范化参数。如果输入S有m个分量(输入向量时m维的),而每一分量有q个量化等级,则S的可能状态有qm个,它们都要映射到A中,并有其对应的(权)值。在S中比较接近的那些样本在A中会出现交叠,如图1中s2与s3,它们有两个权时交叠的,从而其输出F(s2)和F(s3)也较相近,这可起到泛化的作用,对S中相距很远的矢量这种泛化是不起作用的。如果用Hamming距离d表示si,sj的差异程度,则在A存储区内
6、交叠的单元数约为cdij,cdij0的那些交叠区可以看作聚类的领域。这样,输入空间S中相近的向量映射后产生聚类。对一些实际系统,qm往往很大,例如10维输入,每个量化为100个等级,则输入空间有100个可能的状态,这个需要A中至少有100个权与其对应。由于绝大数学习问题并不要包含所有状态,所以实际上不需要那么多的地址单元。A只是一个虚拟地址,可把A的地址通过散列编码映射到一个小的多的物理地址Ap中,且在Ap中每一个状态也有c个地址与之对应,输出仍满足 SKIPIF 1 0 但在Ap中c个单元是随机的,wi可通过学习得到,S到Ap部分是非线性映射,而Ap到输出F是线性映射。3工作原理图2画出了一
7、个较详细的二维输入,一维输出的CMAC模型,下面对每一部作分析。S到M的映射Fig2 CMAC的工作原理图输入为二维, SKIPIF 1 0 ,量化感知器M也分为两组 SKIPIF 1 0 , SKIPIF 1 0 ,图2中M的每一小格是一个感知器,感知器的个数是量化的级数, SKIPIF 1 0 和 SKIPIF 1 0 的量化级数不一定相同,对任意输入 SKIPIF 1 0 或 SKIPIF 1 0 ,在M上可找到其对应的感知器,为泛化需要,在对应量化周围c格感知器同时被激励。如表1所以,c4,a,b,c,l表示感知器编号, SKIPIF 1 0 表示输入一个模拟对应的量化值。任一量化值将
8、引起c个感知器激活为1,每个感知器也可对应于c个输入量 SKIPIF 1 0 。例如 SKIPIF 1 0 是25之间, SKIPIF 1 0 为1的个数与聚类范围c相同,c可由认为选择,表1中c4,shijic可以很大,例如从10100。希望S中靠近的值在 SKIPIF 1 0 中也较近。把表中 SKIPIF 1 0 为1的值表示为a,b,c,后,可把表1整理化为表2,其中每一S值与 SKIPIF 1 0 4个感知器对应。可以看出输入空间中相近的 SKIPIF 1 0 在输出 SKIPIF 1 0 中也接近,且有 SKIPIF 1 0 表1 感知器的激活情况 表2 与各 SKIPIF 1 0
9、 对应的激活感知器 例如对两个接近的量 SKIPIF 1 0 5和 SKIPIF 1 0 4来说, SKIPIF 1 0 SKIPIF 1 0 , SKIPIF 1 0 可见 SKIPIF 1 0 一般情况下,输入是多维的,以二维情况为例,设 SKIPIF 1 0 量化为5级, SKIPIF 1 0 量化为7级,它们分别用大写和小写字母表示,如表3和表4所示。表3 表2 与各 SKIPIF 1 0 对应的激活感知器 表4 表2 与各 SKIPIF 1 0 对应的激活感知器 在一般情况下 SKIPIF 1 0 则 SKIPIF 1 0 映射为 SKIPIF 1 0 M到A的映射M到A的映射是通过
10、滚动组合得到的。其原则还是输入空间相近的矢量在输出空间也相近,如果输入感知器的兴奋元为c个,不管输入是多少维,A中地址也对应c个。以二维c4情况为例,映射如表5,用与的关系组合后,得到A的地址表5所示。(下图为表5)在表中, SKIPIF 1 0 和 SKIPIF 1 0 组合成 SKIPIF 1 0 ,每个 SKIPIF 1 0 中含c个单元,在A中同样有c个单元被激励。在表5中,每一组合Ae,Cf,都代表A中的一个地址,正如前面所说,这样的地址共有 SKIPIF 1 0 个,数量很大,但实际能被激励的地址是非常稀疏的,可使用杂散技术把很大的A空间压缩到较小的实际空间 SKIPIF 1 0
11、中去。A到 SKIPIF 1 0 的映射杂散技术是将分布稀疏,占用较大存储空间的数据作为一个伪随机发生器的变量,产生一个占用空间小的随机地址,用于存放A中的数据。实现这一个压缩的最简单方法是将A中 SKIPIF 1 0 的地址除以一个大的质数,所得余数就作为一个伪随机码,表示为 SKIPIF 1 0 中的地址。用杂散技术会带来冲撞问题,即A中不同的地址在 SKIPIF 1 0 中却被映射到同一个地址,若映射的随机性很强,将减少冲撞的概率,但仍不可避免。在CMAC中,我们忽略这种冲撞,因为冲撞部强烈时,可将其看作一种随机扰动,通过学习算法的迭代过程,可逐步将影响减小,而不影响输出结果。(4) S
12、KIPIF 1 0 到F的映射网络输出为 SKIPIF 1 0 , SKIPIF 1 0 存于 SKIPIF 1 0 的 SKIPIF 1 0 个地址中,因为经 SKIPIF 1 0 的变化后,有 SKIPIF 1 0 个地址被选中,如不考虑冲撞,在中 SKIPIF 1 0 也有 SKIPIF 1 0 个地址对应,由于使用杂散技术,在 SKIPIF 1 0 中这 SKIPIF 1 0 个地址是随机分布的。输出是这 SKIPIF 1 0 个地址中所存的权值的叠加,对应某一输入样本,总可通过调整权值,达到应有的输出值。4学习算法 CMAC的学习采用误差纠正算法,如图3所示。权值修正公式为 SKIP
13、IF 1 0 SKIPIF 1 0 SKIPIF 1 0 为应有输出, SKIPIF 1 0 SKIPIF 1 0 c,为综合聚类神经元数修正方法可以用每个样本修正一次的方法,也可用所有样本都输入一轮后在修正的批学习方法。Fig3 CMAC的学习算法5程序作业算法的思路来此书本,为了验证所做算法的正确性,首先使用一个一维的进行验证。通过选择可以使用CMAC算法对一个正弦波形进行逼近。见程序一。(程序见附录)Fig1.1主要是通过图像来看CMAC的效果,通过多次对权值的修改,达到最好的效果。下面分别是三次网络的训练的逼近图。Fig1.1是训练三次的结果Fig1.2是它的权值分布,Fig2.1也是
14、训练五次的结果,Fig2.2是它的权值分布,Fig3.1是训练九次的结果,Fig3.2是它的权值分布:(其中显示的SSe是21个点上的误差的和均方根)Fig 1.2权值分布epoch = 1 SSE = 0.926epoch = 2 SSE = 0.231epoch = 3 SSE = 0.058Fig2.1Fig2.2 权值分布epoch = 1 SSE = 0.926epoch = 2 SSE = 0.231epoch = 3 SSE = 0.058epoch = 4 SSE = 0.014epoch = 5 SSE = 0.004Fig3.1Fig3.2权值分布epoch = 1 SSE
15、 = 0.926epoch = 2 SSE = 0.231epoch = 3 SSE = 0.058epoch = 4 SSE = 0.014epoch = 5 SSE = 0.004epoch = 6 SSE = 0.001epoch = 7 SSE = 0.000epoch = 8 SSE = 0.000从上述可以看出在第六次训练的时候在规定的误差精度权值的分布已经很好的满足条件。同时可以看出cmac算法的优越性,在很少次数训练仍然可以达到很好的效果,从三次权值分布可以看出,权值分布形状大致是一样的,可以看出在很少的步骤就可以达到效果,所不同的就是精度问题。而精度可以从误差SSE看出。在实
16、际程序中同时还使用cmac算法对波形为阶梯波形以及脉冲波形进行训练。应用程序可以得到相应的训练结果(如下图)梯形波形权值分布脉冲波形权值分布从各个不通的波形可以看出所做算法的正确性,最后按照实验要求对机器人控制的模拟.同样按照课本上的思路,由于它是五维的输入,算法相对复杂一些。(见附录程序二)课程设计要求以及原理请看神经网络与模糊控制P151-156的详细说明。其中最主要的部分通过cmac控制器实现,具体的学习原理可以看前面的具体叙述。同样通过图形观察训练情况如图:训练一次的情况:误差和的均方根是:SSE=5.0533e-005训练第二次情况:SSE=5.0439e-006训练第三次SSE =
17、 4.7503e-006训练第四次SSE =5.0070e-006四次训练以后的权值分布在机器人控制,使用了书上的学习步长为0.00001,但是在实际使用中,效果不是很好,收敛太慢,在实际学习中使用的学习步长是0.1,效果比较明显,然而当学习步长为0.5,1.0的时候算法变得不收敛,在本程序中可以在matlab的环境对这几种学习步长进行比较.可以具体运行程序观察。6不足对学习步长得确定没有通过具体的分析,是通过猜测估计得到.而算法的实现很重要的一节是其鲁棒性的测试,但是由于时间问题没有对它的鲁棒性进行分析。这是很大的不足之处。7补充在算法中求对物理地址的实际映射使用的算法有很多。本程序还使用了
18、来自网络的算法。同样可以得到书上算法的效果,但在实验中没有具体分析各个算法不同之处。希望在将来里能更深入的研究。附录程序一function cmac1d()% A single input single output CMAC networkhelp cmac1dclf resetpausetime = 0.1;P = -1:0.1:1;P3 = -1:0.005:1;% INITIALIZE iprange = 256;disp(sprintf(iprange is %d,iprange);width=1;c=10;beta=0.5;memreq = c*ceil(iprange/width
19、);s = sprintf(number of weights required is %d,memreq);disp(s);memsize=0;% INITIALISE WEIGHTS% =if memsize = 0 wts = zeros(memreq,1);else wts = zeros(memsize,1);end% PLOT CMAC OUTPUTwts,netout = modcmac(wts,(2.0)*64,1,1.0,1.0,iprange,c,width,memsize);for k=1:401 wts,op(k) = opcmac(wts,(P3(k)+2.0)*64
20、,1,iprange,c,width,memsize);end;plot(P3,op,r);axis(-1.0,1.0,-2.0,2.0);title(CMAC output after one training example);xlabel(Input Vector P);ylabel(Network Output);disp(any key to continue);pause%Define the associated twenty-one 1-element targets.z = menu(select target function, . damped sinusoid, . s
21、tep, .impulse);disp()if z = 1 T = -.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 . .1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 . .3072 .3960 .3449 .1816 -.0312 -.2189 -.3201;else if z = 2 T = 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1;else T = 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0;endendplot(P,T
22、,+);title(Training Vectors);xlabel(Input Vector P);ylabel(Target Vector T);hold on% PLOT INITIALif memsize = 0 wts = zeros(memreq,1);else wts = zeros(memsize,1);endfor i=1:401 wts,op(i) = opcmac(wts,(P3(i)+2.0)*64,1,iprange,c,width,memsize);endplot(P3,op,m);title(Function Approximation);xlabel(Input
23、 Vector P);ylabel(Target + Network -);h = get(gca,Children);h = h(1); hold onpause2(pausetime);% TRAIN THE NETWORK%=% TRAINING PARAMETERSmax_epoch = input(enter maximum number of training epochs );epoch = 1;SSE = 1;while (epoch 0.02)for i = 1:21 wts,netout = modcmac(wts,(P(i)+2.0)*64,1,T(i),beta,ipr
24、ange,c,width,memsize);endfor k=1:401 wts,op(k) = opcmac(wts,(P3(k)+2.0)*64,1,iprange,c,width,memsize);end for i = 1:21 wts,p=opcmac(wts,(P(i)+2.0)*64,1,iprange,c,width,memsize); neterr(i) = T(i) - p; end SSE = sumsqr(neterr); fprintf(epoch = %d SSE = %5.3fn,epoch,SSE); delete(h); h = plot(P3,op,m);
25、drawnow pause2(pausetime); epoch = epoch + 1; endenddisp(any key to continue);pausehold offbar(wts,r)title(Network Weights);xlabel(Weight Number);ylabel(Weight Value);if memsize = 0 set(gca,xlim,0 memreq);else set(gca,xlim,0 memsize);endfunction wts,op=opcmac(wts,ip,ipdim,iprange,c,width,memsize)% O
26、P = OPCMAC(WTS,IP,IPRANGE,C,WIDTH,MEMSIZE)HASH=12345;addrs=zeros(c,1);quantisation=ceil(iprange/width);offset=width/c;ofs=0;op=0;for i=1:c address=0; shift=1.0; for j=1:ipdim %address=address+rem(ceil(ip(j)+ofs)/width),quantisation)*shift; address=address+ceil(ip(j)/width)*shift; shift=shift*quantis
27、ation; end; % address=address+shift*i; if memsize0 addrs(i)=ceil(rem(log(address+1)*HASH),memsize); else %addrs(i)=ceil(rem(address,c*ceil(iprange/width); memreq = c*ceil(iprange/width); addrs(i)=ceil(rem(address,memreq); end; ofs=ofs+offset; op=op+wts(addrs(i); end;function wts,mod=modcmac(wts,ip,i
28、pdim,target,beta,iprange,c,width,memsize)addrs=zeros(c,1);quantisation=ceil(iprange/width);offset=width/c;ofs=0;sum=0.0;for i=1:c address=0; shift=1.0; for j=1:ipdim address=address+ceil(ip(j)/width)*shift; shift=shift*quantisation; end; address=address+shift*i; if memsize0 addrs(i)=ceil(rem(log(add
29、ress+1)*HASH),memsize); else memreq = c*ceil(iprange/width); addrs(i)=ceil(rem(address,memreq); end; ofs=ofs+offset; sum=sum+wts(addrs(i); end; delta=beta*(target-sum)/c; for i=1:c wts(addrs(i)=wts(addrs(i)+delta; end; mod=sum+delta*c;程序二function robot()% neural networks housework%use cmac simulink
30、2D robotic operation% CMAC operates as a form of lookup table. Note, however,% that it generalises, i.e. is capable of producing outputs% in response to inputs not previously experienced.%5 dim input 3 dim outputhelp robot;clf reset;pausetime=0.1;quantisation=200;c=40;memsize=3080;pausez = menu(sele
31、ct step of studying, . 0.00001, . 0.1,. 0.5,. 1.0);if z=1 seta=0.00001;else if z=2 seta=0.1; else if z=3 seta=0.5; else if z=4 seta=1.0; end; end; end;end;disp()%seta=0.1;l=0.5 0.5 0.5;ipdim=5;disp(sprintf(quantisation is; %d,quantisation);disp(sprintf(acceptive field is: %d,c);disp(sprintf(memsize
32、is : %d,memsize);iprange=360;width=iprange/200;% data initial xd=zeros(200,2);disp(any key to continue);pausez = menu(select target function, . Circle, . Line);disp()if z = 1 for t=1:200 xd(t,1)=0.5-0.25*cos(0.5*pi*0.02*(t-1); xd(t,2)=0.25+0.25*sin(0.5*pi*0.02*(t-1); end;else for t=1:200 %xd(t,1)=0.
33、5-0.25*cos(0.5*pi*0.02*(t-1); %xd(t,2)=0.25+0.25*sin(0.5*pi*0.02*(t-1); xd(t,1)=0.5-0.0025*t; xd(t,2)=0.0025*t; end;end;k=1:200;hold off;plot(xd(k,1),xd(k,2);hold on;deta=-9.14 69.87 131.58;x=l(1)*cos(deta(1)*2*pi/360)+l(2)*cos(deta(1)+deta(2)*2*pi/360)+l(3)*cos(deta(1)+deta(2)+deta(3)*2*pi/360) . l
34、(1)*sin(deta(1)*2*pi/360)+l(2)*sin(deta(1)+deta(2)*2*pi/360)+l(3)*sin(deta(1)+deta(2)+deta(3)*2*pi/360);jmat=-l(1)*sin(deta(1)*2*pi/360)-l(2)*sin(deta(1)+deta(2)*2*pi/360)-l(3)*sin(deta(1)+deta(2)+deta(3)*2*pi/360) . -l(2)*sin(deta(1)+deta(2)*2*pi/360)-l(3)*sin(deta(1)+deta(2)+deta(3)*2*pi/360) . -l
35、(3)*sin(deta(1)+deta(2)+deta(3)*2*pi/360); . l(1)*cos(deta(1)*2*pi/360)+l(2)*cos(deta(1)+deta(2)*2*pi/360)+l(3)*cos(deta(1)+deta(2)+deta(3)*2*pi/360) . l(2)*cos(deta(1)+deta(2)*2*pi/360)+l(3)*cos(deta(1)+deta(2)+deta(3)*2*pi/360) . l(3)*cos(deta(1)+deta(2)+deta(3)*2*pi/360) ;wts=zeros(memsize,3);% w
36、eight stacksse=1;%sse=|Et| addrs=zeros(c,3);epcoh = input(enter number of training epochs );%epcoh=4;for p=1:epcoh disp(any key to continue); pause k=1:200; hold off; plot(xd(k,1),xd(k,2); hold on; for t=1:200 delta_x=xd(t)-x; ip=deta 360*delta_x+90 90 90 0 0; HASH=123456; offset=width/c; ofs=0; set
37、a_delta=0 0 0; for i=1:c address=0; shift=1; for j=1:ipdim address=address+(rem(ceil(ip(j)+ofs)/width),quantisation)*shift; %address=address+(ceil(ip(j)/width)*shift; shift=shift*quantisation; end; address=address+shift*i; for j=1:3 addrs(i,j)=ceil(rem(log(address+1)*HASH),memsize); %addrs(i,j)=mod(
38、address,memsize); end; ofs=ofs+offset; for j=1:3 seta_delta(j)=seta_delta(j)+wts(addrs(i,j),j); end; end; deta=deta+seta_delta; x=l(1)*cos(deta(1)*2*pi/360)+l(2)*cos(deta(1)+deta(2)*2*pi/360)+l(3)*cos(deta(1)+deta(2)+deta(3)*2*pi/360) . l(1)*sin(deta(1)*2*pi/360)+l(2)*sin(deta(1)+deta(2)*2*pi/360)+l
39、(3)*sin(deta(1)+deta(2)+deta(3)*2*pi/360); jmat=-l(1)*sin(deta(1)*2*pi/360)-l(2)*sin(deta(1)+deta(2)*2*pi/360)-l(3)*sin(deta(1)+deta(2)+deta(3)*2*pi/360) . -l(2)*sin(deta(1)+deta(2)*2*pi/360)-l(3)*sin(deta(1)+deta(2)+deta(3)*2*pi/360) . -l(3)*sin(deta(1)+deta(2)+deta(3)*2*pi/360); . l(1)*cos(deta(1)
40、*2*pi/360)+l(2)*cos(deta(1)+deta(2)*2*pi/360)+l(3)*cos(deta(1)+deta(2)+deta(3)*2*pi/360) . l(2)*cos(deta(1)+deta(2)*2*pi/360)+l(3)*cos(deta(1)+deta(2)+deta(3)*2*pi/360) . l(3)*cos(deta(1)+deta(2)+deta(3)*2*pi/360) ; Et=xd(t)-x; seta_delta=seta_delta-0.1*(-300*Et*jmat+seta_delta); deta=deta+seta_delta; x=l(1)*cos(deta(1)*2*pi/360)+l(2)*cos(deta(1)+deta(2)*2*pi/360)+l(3)*cos(deta(1)+deta(2)+deta(3)*2*pi/360) . l(1)*sin(deta(1)*2*pi/360)+l(2)*sin(deta(1)+deta(2)*2*pi/360)+l(3)*sin(deta(1)+deta(2)+deta(3)*2*pi/360); jmat=-l(1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030各类插座市场发展现状分析及行业投资战略研究报告
- 苏教版2025年三年级下册语文月考考试必考题
- 2025-2030医用消毒机行业市场深度调研及发展趋势与投资前景研究报告
- 2025-2030区域冷却行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030化妆铅笔和钢笔行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030加热套行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030冶金化工制服行业发展分析及发展趋势预测与投资风险研究报告
- 2025-2030内部折叠门行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030全球及中国移动支付(移动货币)行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030全球及中国电动冷凝水泵行业市场现状供需分析及投资评估规划分析研究报告
- LOTO上锁挂牌培训资料课件
- DB63-T 1800-2020盐湖卤水矿堤坝工程施工技术规范
- 公路工程施工现场安全检查手册
- 初三任务型阅读公开课一等奖省优质课大赛获奖课件
- 财务会计费用原始凭证分割单
- 清淤工程施工记录表
- 矩阵理论讲义第四章内积空间
- 货物采购服务方案
- 初中英语 沪教牛津版 8B U6-1 Reading Head to head 课件
- GB∕T 20808-2022 纸巾
- 祖国不会忘记合唱谱(1)
评论
0/150
提交评论