1)基函数的布置和总数
2)高阶基函数
当初始CMAC网络使用二值基函数时,它的输出是分段连续的,即在每个网格内是连续的,在输入轴节点处是间断的。要使网络有连续的输出,必须要求基函数的输出在其定义域的边界上为0。本设计中,用表示距离,表示单变量函数,采用无穷大泛数基函数实现连续输出。
并利用无穷大泛数计算距离时,可以使基函数在定义域边界的输出为0,在定义域中心的输出为1/ρ。在一维情况下,其他输出值是在这两个极值间的线性插值。在二维输入空间中,基函数输出呈“金字塔”型。
3)内存杂散技术
CMAC网络对内存的需求量正比于 的指数倍,所以它是很大的。对高维输入 ,基函数的数量 可以由公式(5)近似地计算出来。由于要求基函数的数量要小于网格的数量(p<<p‘,p‘是CMAC网络中网格的数量),所以一般的算法只适用于维数较低或者适中的网络输入,如果维数较高,就要使用内存杂散技术。内存杂散技术是将分布稀疏、占用较大存储空间的数据作为一个伪随机发生器的变量,产生一个占用空间较小的随机地址,而在这个随机地址内就存放着占用大量内存空间地址内的数据,这就完成了由多到少的映射。
4 ) CMAC神经网络的编程实现
CMAC神经网络的算法主要函数是由C语言编程实现的。本设计中的代码是在Visual C++平台上调试实现的。int allocate_cmac(int num_state, int *qnt_state, int num_cell, int memory, int field_shape, int collision_flag); allocate函数用指定的参数为CMAC网络在内存中分配空间。num_state是输入向量的维数; *qnt_state是指向 维数组的指针,这个数组定义了每一维输入向量的量化精度;num_cell是泛化系数ρ; memory占用内存空间的数量; field_shape设置基函数的类型;collision_flag训练冲突标记,若冲突发生返回TRUE,反之为FALSE。
MATLAB中的编译与调用时,采用MEX技术来完成MATLAB中调用CMAC网络算法的C语言代码
4 CMAC神经网络训练
CMAC神经网络的主要参数有:输入变量的量化精度、泛化参数以及基函数的种类。对CMAC神经网络的三个输入分别进行量化,阻尼比ζ分为23级,超调量百分比σ分为12个等级,衰减振荡周期Tc分为20个等级,共有23*12*20=5520种训练模式。
在所有5520种训练模式中选取2000种,作为CMAC参数整定网络的选练样本。再在2000组特征参数模式中选取1620组特征参数模式作为训练集对网络进行训练。
建立输入到物理存储空间的映射,同时建立了物理存储空间与输出的关系。泛化参数 选为32,学习算法采用了误差纠正算法。学习率β为0.6,采用样条函数SPLINE替代传统的ALBUS函数作为CMAC神经网络的基函数。ALBUS函数的输出只有0和1,因此输出的曲线分段连续,仅在内节点之间连续,在内节点的分界处往往是不连续的。而样条函数则可以较好的解决这个问题。相应的内存使用量为300。