不知道是不是好事,现在这篇里先回避这个问题,突出一个主题即可,其他的问题在后续的文章中解决。
从目前来看,mean比max更容易校准,max在finetune中几乎不会有任何改进,只会变得更差!当分组变多时,遗传算法搜索的效率也是大大降低 了,如何克服这个问题值得研究的!具体的建模方法是下一篇的主旨,这一篇里先提出TSK建模的可行性。
2008年1月29日星期二
2008年1月24日星期四
在qt中操作sqlite
昨天师弟来问我qt中如何操作sqlite,我不知道,查了一下,和一般的数据库操作流程差不多,写了个测试的小例子。核心的代码如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("haha.sqlite");
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.\n\n"
"Click Cancel to exit."), QMessageBox::Cancel);
return;
}
ui.label->setText("Sqlite is connected!\n");
QSqlQuery query;
query.exec("create table person (id int primary key, "
"firstname varchar(20), lastname varchar(20))");
query.exec("insert into person values(101, 'Danny', 'Young')");
query.exec("insert into person values(102, 'Christine', 'Holand')");
query.exec("insert into person values(103, 'Lars', 'Gordon')");
query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");
query.exec("create table trolltechoffice (id int primary key,"
"imagefile int,"
"location varchar(20),"
"country varchar(20),"
"description varchar(100))");
query.exec("insert into trolltechoffice "
"values(0, 0, 'Oslo', 'Norway',"
"'Oslo is home to more than 500 000 citizens and has a "
"lot to offer.It has been called \"The city with the big "
"heart\" and this is a nickname we are happy to live up to.')");
query.exec("insert into trolltechoffice "
"values(1, 1, 'Brisbane', 'Australia',"
"'Brisbane is the capital of Queensland, the Sunshine State, "
"where it is beautiful one day, perfect the next. "
"Brisbane is Australia''s 3rd largest city, being home "
"to almost 2 million people.')");
query.exec("insert into trolltechoffice "
"values(2, 2, 'Redwood City', 'US',"
"'You find Redwood City in the heart of the Bay Area "
"just north of Silicon Valley. The largest nearby city is "
"San Jose which is the third largest city in California "
"and the 10th largest in the US.')");
query.exec("insert into trolltechoffice "
"values(3, 3, 'Berlin', 'Germany',"
"'Berlin, the capital of Germany is dynamic, cosmopolitan "
"and creative, allowing for every kind of lifestyle. "
"East meets West in the metropolis at the heart of a "
"changing Europe.')");
query.exec("insert into trolltechoffice "
"values(4, 4, 'Munich', 'Germany',"
"'Several technology companies are represented in Munich, "
"and the city is often called the \"Bavarian Silicon Valley\". "
"The exciting city is also filled with culture, "
"art and music. ')");
query.exec("insert into trolltechoffice "
"values(5, 5, 'Beijing', 'China',"
"'Beijing as a capital city has more than 3000 years of "
"history. Today the city counts 12 million citizens, and "
"is the political, economic and cultural centre of China.')");
query.exec("create table images (locationid int, file varchar(20))");
query.exec("insert into images values(0, 'images/oslo.png')");
query.exec("insert into images values(1, 'images/brisbane.png')");
query.exec("insert into images values(2, 'images/redwood.png')");
query.exec("insert into images values(3, 'images/berlin.png')");
query.exec("insert into images values(4, 'images/munich.png')");
query.exec("insert into images values(5, 'images/beijing.png')");
ui.label->setText(ui.label->text()+"query is done!\n");
db.close();
ui.label->setText(ui.label->text()+"db is closed!\n");
// reopen db
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.\n\n"
"Click Cancel to exit."), QMessageBox::Cancel);
return;
}
ui.label->setText(ui.label->text()+"db is reopened!\n");
query.exec("SELECT firstname, lastname FROM person WHERE id > 102");
while (query.next()) {
QString firstname = query.value(0).toString();
QString lastname = query.value(1).toString();
ui.label->setText(ui.label->text()+"firstname:"+firstname+",lastname:"
+lastname+"\n");
}
db.close();
ui.label->setText(ui.label->text()+"db is closed again!\n");
return;
2008年1月22日星期二
关于车辆跟驰模型验证的思考
引言
不管哪一种车辆跟驰模型,都需要验证模型的有效性。那么如何验证呢?显然要先设定前车的行驶行为,然后通过对比模型的输出与实际情况下驾驶行为得出结果。
如何判断模型结果的好坏呢?主要有以下两种方法:一是仅仅通过观察实际的跟驰行为,人为的判断是否和实际情况相同;二是通过跑车实验,得出在实际情况下,面对设定的前车行驶行为,后车会有如何的跟驰行为,获得其速度、加速度及与前车的距离等数据,再与模型的输出进行对比。
显然,第二种方法更有说服力。已有的采集实际情况下后车跟驰数据的方法,主要是用五轮仪测速度、加速度,用前向雷达或摄像机测量与前车的距离。下面简单分析一下上述几种数据采集设备的优缺点。
数据采集设备分析
五轮仪
五轮仪是一种汽车行驶性能检测的综合仪器,分为接触式和非接触式两种。接触式五轮仪外形很简单,一个独轮(类似电动车的车轮)由一个支臂连接到被检测的车辆上(后方或侧方),由于象汽车四个轮子多出来的一个第五轮,所以简称“五轮仪”。该轮有适当的压力紧贴地面,由该轮的直径和转数可以产生准确的行驶距离,结合精确的计时器、车辆的各种操控信息汇集到仪器的主机,根据需要测出精确的车辆性能数据,如最高车速、最低稳定车速、0-100km的加速时间、各种时速下的制动距离、百公里油耗等等多种参数,有的还能测出行驶稳定性相关数据。
非接触式第五轮仪以计算机为核心部件,配以相应的I/O接口及外设,不需要路面接触或设置任何测量标志,采用光电相关滤波技术,安装在车上的光电路面探测器(简称光电头)照射路面,把路面图像变换为频率信号,用于汽车动力性、制动性和燃油经济性能的测试。
五轮仪的优点是精度高,缺点是无论是接触式还是非接触式五轮仪,主要是用于测试新车的动力性能等数据,测试条件要求高,要求尽量选择接近国家试验要求的标准路面进行试验,受天气影响较大,不宜在雨雪道路情况下使用。用句俗话说就是太娇贵了,不适合实际复杂情况下采集数据。
车用雷达
再来看看车用雷达。按测量介质不同,可将车用雷达分为超声波雷达、红外雷达、激光雷达以及微波雷达。超声波雷达、红外雷达因其探测距离相对较短,目前,主要应用于汽车倒车控制系统。激光雷达和微波雷达因其具有测量距离远、精度高等优点,被广泛应用于车辆主动安全控制系统。
激光雷达的优点是结构相对简单,具有高单色性、高方向性、相干性好、测量精度较高、探测距离远、能识别道路状况、价格便宜等特点。缺点是测量性能易受环境 因素干扰,在雨、雪、雾等天气情况下,测量性能会有所下降,受测量原理限制只能传递相对距离信息。按测量原理不同可分为脉冲式激光测距雷达和相位式激光测距雷达2种。
微波雷达探测距离远、运行可靠、测量性能受天气等外界因素的影响较小,可以获得主车与目标车辆间距离、相对速度,有些雷达还可获得相对方位角和以及相对加速度等信息,但价格比较昂贵。按测量原理不同,可分为脉冲调频(pulse frequency modulation,PFM)和调频连续波(frequency modulation continuous wave,FMCW)。
车用雷达首先要解决的技术难题就是减少雷达的误报。由于车辆在道路中行驶状况十分复杂,并线、移线、转弯、上下坡以及道路两旁的静态护栏、标志牌,还有各种恶劣天气的影响等,使得雷达对主目标的识别十分困难,误报率很高。这就使得实际复杂情况下采集与前车距离数据得不到保证。
摄像机
用摄像机记录跟驰状态下两辆车的运动状态,经过图像处理,来获取不同时刻后随车相对于实验车的位置和速度与加速度统计值。这样的方式处理难度大,精度低,资料适宜作为方便研究人员后期回顾跟驰历程的资料。
GPS采集数据
从上述对已有数据采集设备的分析可以看出,面对复杂实际情况,尤其是雨雪等恶劣条件下的车辆跟驰数据采集,还存在一定的局限性,有待于进一步的改进。机场场面在恶劣的天气条件下仍要保持运行,这就要求对此时的跟驰行为进行数据采集,这样才能验证模型在此种情况下的契合程度。
结合我们现有的条件,提出使用GPS采集车辆跟驰数据的方案。GPS的优点是全天候,不受天气、道路情况的影响,缺点是单点GPS精度一般不高,这可以通过使用高精度GPS或差分GPS来弥补,即将购买的使用RTK技术的DGPS精度可达到厘米级,且没有任何累加误差,完全可以满足车辆跟驰数据采集的要求。已有的JGG100精度比一般的单点GPS精度高至少一个数量级,也基本可以满足要求。通过在前后两辆车上加装DGPS终端,记录下全程位置信息,通过后期处理,可以轻松得出全程的速度、加速度及前后车距离信息。但GPS方式另一个问题是输出更新率的问题,现在一般都是1Hz,这对于一般跟驰是足够了,但对于高速紧急刹车等速度急剧变化的情况显得有些力不从心。可以考虑在后期处理时添加判断条件进行处理,可以部分弥补这个弱点。
结论
由于现阶段高精度的DGPS还没有到位,为了加快论文的进度,可以先采用高精度单点GPS代替。在实验室的静态实验表明,普通单点GPS(GPS25-LVS板)的精度大概在4-5米,而高精度单点GPS(JGG100板)比前者高至少一个数量级的精度,这样可以推断后者的动态误差应该可以到达米级左右,这样就可以基本满足中高速下的跟驰数据采集的要求。可以先进行这部分实验,获得数据对论文中的模型进行标定。
不管哪一种车辆跟驰模型,都需要验证模型的有效性。那么如何验证呢?显然要先设定前车的行驶行为,然后通过对比模型的输出与实际情况下驾驶行为得出结果。
如何判断模型结果的好坏呢?主要有以下两种方法:一是仅仅通过观察实际的跟驰行为,人为的判断是否和实际情况相同;二是通过跑车实验,得出在实际情况下,面对设定的前车行驶行为,后车会有如何的跟驰行为,获得其速度、加速度及与前车的距离等数据,再与模型的输出进行对比。
显然,第二种方法更有说服力。已有的采集实际情况下后车跟驰数据的方法,主要是用五轮仪测速度、加速度,用前向雷达或摄像机测量与前车的距离。下面简单分析一下上述几种数据采集设备的优缺点。
数据采集设备分析
五轮仪
五轮仪是一种汽车行驶性能检测的综合仪器,分为接触式和非接触式两种。接触式五轮仪外形很简单,一个独轮(类似电动车的车轮)由一个支臂连接到被检测的车辆上(后方或侧方),由于象汽车四个轮子多出来的一个第五轮,所以简称“五轮仪”。该轮有适当的压力紧贴地面,由该轮的直径和转数可以产生准确的行驶距离,结合精确的计时器、车辆的各种操控信息汇集到仪器的主机,根据需要测出精确的车辆性能数据,如最高车速、最低稳定车速、0-100km的加速时间、各种时速下的制动距离、百公里油耗等等多种参数,有的还能测出行驶稳定性相关数据。
非接触式第五轮仪以计算机为核心部件,配以相应的I/O接口及外设,不需要路面接触或设置任何测量标志,采用光电相关滤波技术,安装在车上的光电路面探测器(简称光电头)照射路面,把路面图像变换为频率信号,用于汽车动力性、制动性和燃油经济性能的测试。
五轮仪的优点是精度高,缺点是无论是接触式还是非接触式五轮仪,主要是用于测试新车的动力性能等数据,测试条件要求高,要求尽量选择接近国家试验要求的标准路面进行试验,受天气影响较大,不宜在雨雪道路情况下使用。用句俗话说就是太娇贵了,不适合实际复杂情况下采集数据。
车用雷达
再来看看车用雷达。按测量介质不同,可将车用雷达分为超声波雷达、红外雷达、激光雷达以及微波雷达。超声波雷达、红外雷达因其探测距离相对较短,目前,主要应用于汽车倒车控制系统。激光雷达和微波雷达因其具有测量距离远、精度高等优点,被广泛应用于车辆主动安全控制系统。
激光雷达的优点是结构相对简单,具有高单色性、高方向性、相干性好、测量精度较高、探测距离远、能识别道路状况、价格便宜等特点。缺点是测量性能易受环境 因素干扰,在雨、雪、雾等天气情况下,测量性能会有所下降,受测量原理限制只能传递相对距离信息。按测量原理不同可分为脉冲式激光测距雷达和相位式激光测距雷达2种。
微波雷达探测距离远、运行可靠、测量性能受天气等外界因素的影响较小,可以获得主车与目标车辆间距离、相对速度,有些雷达还可获得相对方位角和以及相对加速度等信息,但价格比较昂贵。按测量原理不同,可分为脉冲调频(pulse frequency modulation,PFM)和调频连续波(frequency modulation continuous wave,FMCW)。
车用雷达首先要解决的技术难题就是减少雷达的误报。由于车辆在道路中行驶状况十分复杂,并线、移线、转弯、上下坡以及道路两旁的静态护栏、标志牌,还有各种恶劣天气的影响等,使得雷达对主目标的识别十分困难,误报率很高。这就使得实际复杂情况下采集与前车距离数据得不到保证。
摄像机
用摄像机记录跟驰状态下两辆车的运动状态,经过图像处理,来获取不同时刻后随车相对于实验车的位置和速度与加速度统计值。这样的方式处理难度大,精度低,资料适宜作为方便研究人员后期回顾跟驰历程的资料。
GPS采集数据
从上述对已有数据采集设备的分析可以看出,面对复杂实际情况,尤其是雨雪等恶劣条件下的车辆跟驰数据采集,还存在一定的局限性,有待于进一步的改进。机场场面在恶劣的天气条件下仍要保持运行,这就要求对此时的跟驰行为进行数据采集,这样才能验证模型在此种情况下的契合程度。
结合我们现有的条件,提出使用GPS采集车辆跟驰数据的方案。GPS的优点是全天候,不受天气、道路情况的影响,缺点是单点GPS精度一般不高,这可以通过使用高精度GPS或差分GPS来弥补,即将购买的使用RTK技术的DGPS精度可达到厘米级,且没有任何累加误差,完全可以满足车辆跟驰数据采集的要求。已有的JGG100精度比一般的单点GPS精度高至少一个数量级,也基本可以满足要求。通过在前后两辆车上加装DGPS终端,记录下全程位置信息,通过后期处理,可以轻松得出全程的速度、加速度及前后车距离信息。但GPS方式另一个问题是输出更新率的问题,现在一般都是1Hz,这对于一般跟驰是足够了,但对于高速紧急刹车等速度急剧变化的情况显得有些力不从心。可以考虑在后期处理时添加判断条件进行处理,可以部分弥补这个弱点。
结论
由于现阶段高精度的DGPS还没有到位,为了加快论文的进度,可以先采用高精度单点GPS代替。在实验室的静态实验表明,普通单点GPS(GPS25-LVS板)的精度大概在4-5米,而高精度单点GPS(JGG100板)比前者高至少一个数量级的精度,这样可以推断后者的动态误差应该可以到达米级左右,这样就可以基本满足中高速下的跟驰数据采集的要求。可以先进行这部分实验,获得数据对论文中的模型进行标定。
2008年1月18日星期五
痛苦的思索中……
为什么要对跟车模型进行标定呢?
因为我们希望模型的行为和实际中的跟驰行为一致,至少是类似的,在误差允许范围之内。但是我们也明白即使同一个人同一种条件下,两次跟驰的行为也不会完全一样,人类天生不擅长进行精密的控制,但总能八九不离十。
因此,即使能够标定到很高的一致性(用mamdani模型很难得到高的一致性,TSK可以得到较小的误差值),对于未知的情况也不能保证同样的司机在同样的情况下能有高度的一致性。那么,是不是说标定是没有意义的呢?当然不是了!标定能调整模型的参数,使得模型的输出和实际驾驶行为类似,不要求一致,但至少能给出大致形同的驾驶行为。
用TSK和Mamdani模型分别对同一批数据进行建模、标定,来观察先验的设定规则和完全根据数据非线性度分组产生的模型之间的异同,也许能得出很有意思的结果。
根据现有的标定结果可以初步得出这样的结论:Mamdani模型可以事先确定规则,划分模糊集,但不容易标定;TSK模型不用先验规则,完全从训练数据得出模糊集和规则,也还不错,需要进一步的解释。
因为我们希望模型的行为和实际中的跟驰行为一致,至少是类似的,在误差允许范围之内。但是我们也明白即使同一个人同一种条件下,两次跟驰的行为也不会完全一样,人类天生不擅长进行精密的控制,但总能八九不离十。
因此,即使能够标定到很高的一致性(用mamdani模型很难得到高的一致性,TSK可以得到较小的误差值),对于未知的情况也不能保证同样的司机在同样的情况下能有高度的一致性。那么,是不是说标定是没有意义的呢?当然不是了!标定能调整模型的参数,使得模型的输出和实际驾驶行为类似,不要求一致,但至少能给出大致形同的驾驶行为。
用TSK和Mamdani模型分别对同一批数据进行建模、标定,来观察先验的设定规则和完全根据数据非线性度分组产生的模型之间的异同,也许能得出很有意思的结果。
根据现有的标定结果可以初步得出这样的结论:Mamdani模型可以事先确定规则,划分模糊集,但不容易标定;TSK模型不用先验规则,完全从训练数据得出模糊集和规则,也还不错,需要进一步的解释。
2008年1月6日星期日
回顾解决LMS收敛问题的过程
新的一年到了,2007年最后困扰我的LMS收敛问题总算是解决了,这是lp和我共同努力的结果,回顾一下其中曲折的过程,作为继续前进的动力吧~~
发现问题:在细调优化参数阶段,把通过GA优化的参数作为输入,用93个点的数据对其使用LMS方法进行进一步的细调,这主要是考虑到GA算法在最优点附近不容易找到最优点,而LMS方法对于局部优化问题更加擅长。但是用这些数据进行LMS后,误差反而增大了!!
问题1:数据集问题。开始怀疑是不是数据集的问题,针对不同的规则参数,似乎应该也将数据分为相同组再进行LMS。按照这个思路对数据集进行了处理,结果依然。
问题2:学习方程式问题。因为前面请lp求过一个参数的偏导数,发现少了一项B,于是怀疑是不是因为从k到k+1的学习方程式有误导致的。后来请lp对所有的方程式都验算了一遍,发现有两个错误,两个正确,但是即使错误的也只是影响了学习速度,修正后还是不能收敛。
问题3:误差函数。在和lp解释整个过程时,突然发现采用的误差函数居然加了绝对值,而误差函数的值是用在学习方程式里的,也就是说LMS方法中下降方向完全被我抹杀了!发现这个问题后十分的激动,认为问题就此解决了,但结果却让人吃惊,还是不能收敛!!
问题4:学习速率。我开始怀疑LMS是否一定能收敛。查阅资料的结果是只要学习步长足够小,肯定能收敛!那么是不是我的学习步长不够小呢?目前我的学习速率lambda是0.002,似乎已经很小了,不过考虑到是93组数据进行LMS后的综合步长,可以将lambda再减小一点。0.0002,不行!0.00002,还是不行!豁出去了,写个2e-6试试,ok的啦!成功~~
成功的喜悦过后,开始仔细观察误差(平均和最大)值的变化,嗯,都在减小,虽然减小的速率都很慢,但一直在减小,可见是收敛的!不过达到设定条件(两次LMS之间误差变化小于0.005)后,发现细化前后的误差变化不大,是否有不要进行这样的细调呢?先保留着吧,把整个算法实现出来再讨论这个问题~
发现问题:在细调优化参数阶段,把通过GA优化的参数作为输入,用93个点的数据对其使用LMS方法进行进一步的细调,这主要是考虑到GA算法在最优点附近不容易找到最优点,而LMS方法对于局部优化问题更加擅长。但是用这些数据进行LMS后,误差反而增大了!!
问题1:数据集问题。开始怀疑是不是数据集的问题,针对不同的规则参数,似乎应该也将数据分为相同组再进行LMS。按照这个思路对数据集进行了处理,结果依然。
问题2:学习方程式问题。因为前面请lp求过一个参数的偏导数,发现少了一项B,于是怀疑是不是因为从k到k+1的学习方程式有误导致的。后来请lp对所有的方程式都验算了一遍,发现有两个错误,两个正确,但是即使错误的也只是影响了学习速度,修正后还是不能收敛。
问题3:误差函数。在和lp解释整个过程时,突然发现采用的误差函数居然加了绝对值,而误差函数的值是用在学习方程式里的,也就是说LMS方法中下降方向完全被我抹杀了!发现这个问题后十分的激动,认为问题就此解决了,但结果却让人吃惊,还是不能收敛!!
问题4:学习速率。我开始怀疑LMS是否一定能收敛。查阅资料的结果是只要学习步长足够小,肯定能收敛!那么是不是我的学习步长不够小呢?目前我的学习速率lambda是0.002,似乎已经很小了,不过考虑到是93组数据进行LMS后的综合步长,可以将lambda再减小一点。0.0002,不行!0.00002,还是不行!豁出去了,写个2e-6试试,ok的啦!成功~~
成功的喜悦过后,开始仔细观察误差(平均和最大)值的变化,嗯,都在减小,虽然减小的速率都很慢,但一直在减小,可见是收敛的!不过达到设定条件(两次LMS之间误差变化小于0.005)后,发现细化前后的误差变化不大,是否有不要进行这样的细调呢?先保留着吧,把整个算法实现出来再讨论这个问题~
订阅:
博文 (Atom)