2007年11月12日星期一

遇到了麻烦

早上满怀期望的过来,修改了仿真程序,用真实的前车数据+模糊推理模型进行了仿真,结果让人沮丧!仿真中后车的行为与实际的相比相差甚远,也就是说参数标定的结果很糟糕!经历了短暂的沮丧和抱怨后,只有转过头来看看到底原因是什么?
首先要承认,对于50多个要优化的参数来说,GA算法不堪重负了,尤其是在计算fitness值的时间不能忽略不计的前提下,我无法用野蛮的超多代的进化或是巨量的种群数来达到目的。所以我选择了佳点集,但是看起来效果并不明显。同时我采用的计算fitness值的方法也有问题,仅用差值平方的累加来表示误差会忽略掉本身比较小的值,使得结果更倾向于突然加减速的情况,而跟车时更经常的情况是不加速或微加减速。这个问题可以通过将差值归一化后再累加来避免。
佳点集是我给予厚望的,现在的效果却不理想,初步总结,可能是佳点数设置过低了。看参考文章中理论部分,举的例子中n取值到了10000,而我在程序中设置的仅为5,再结合佳点集理论的特点,显然n取值越大,划分的越细,就越有可能得到较好的值,相对来说,进化的代数则不需要太关注。不过n的取值大小会直接影响到计算的速度,从目前修改后的速度来看,每代的提高速度大大加快了,不过所需的时间也大大延长了,如何得到一个平衡的结果要进一步的考虑。
取佳点计算中取值范围是非常重要的,现在我采用的是固定取值范围,使用预先估计的值。这样做的优点是不会开始时比较容易得到较好的佳点,缺点是太固定了,很可能在多次计算中得出相同的佳点集,这样就没有什么意义了(是否有意义还没想清楚)。
还有一个可以改进的地方是划分两个基因值是否相似。目前的方法是将所有同代的染色体的相同基因位遍历一遍,找出最大最小值,作为上下限值,然后对于每个染色体的每位基因,计算其在限值范围的上半部分还是下半部分,分别赋予0和1。之后比较基因位是否相同时就看是否同为0或1。这样略显粗糙了一些,也许可以通过更细的划分来得到更好的结果。

没有评论: