亏着潘松找着了一本经典的讲TSK的电子书,亏着他打印了出来,亏着他带回了宿舍,亏着那天我也在,亏着我的求知精神还算足,亏着有老婆可以打印,亏着周日老妈霸占了电脑玩斗地主,亏着我无聊之际舍不得浪费时间……无数的巧合使我看了这本"Fuzzy Control Systems Design and Analysis",虽然开始只看了一章半(问题太多,看不下去了),但随后和潘兄的讨论使得我有了初步的概念,一篇用GA做TSK模糊模型辨识的文章让我终于了解了TSK。
下面来谈谈我对于mamdani和TSK之间不同的体会。
两者形式上最大的不同就是IF-THEN规则中THEN的部分。前者是用一个模糊变量来表示y,后者是用一个方程来表示y,典型的是用一个线性方程来表示。前者的优点是解释性好,符合人类思考的方式,后者的优点是精度高,在运行点附近用线性化的子系统来表示,可以做到和输入输出值高度的吻合。从这一点就不难看出,就标定参数而言,TSK模型更加方便,精确,易用,而mamdani模型标定起来则困难得多,尤其是想精度达到要求比较困难,可能要求隶属度函数形状可变,这很麻烦。
回过头来看看我前面的工作。采用的是mamdani模型,先利用经验初步给出了各变量的语言项和对应的隶属度函数类型(三角型)及取值范围,并且尽自己所能想象出了所有规则,再用实际采集的数据对隶属度函数的参数和规则权重参数进行GA优化。尽管采用了种种的改进方法,结果还是很难令人满意!
我看的那篇讲TSK模型辨识的文章上详尽的介绍了整个过程,虽然其中有些错误,但最终我还是理解了整个流程。它是从整个训练数据集出发先构建第零代TSK模型,再通过寻找最大非线性点,对训练数据集进行划分,再构建第一代TSK模型,细调后看是否满足终止条件,不满足则对其中一个划分再寻找最大非线性点,重复上面的过程,直到精度满足要求为止。这样得出的TSK模型对输入输出数据的拟合程度自然很好,唯一让我顾虑的是每个运行点处的线性方程如何解释的问题了。
早上去图书馆借了三本书,一本讲嵌入式Linux程序设计与应用,另外两本是Donald E. Knuth的"The Art of Computer Programming"的第四卷的三、四两册,借来没事翻翻~~:)不过挎包忘在存包处了,早上没法编TSK辨识的程序了,中午吃饭的时候去拿,下午再编,准备用m语言来实现,这样方便矩阵的运算,也不一定用matlab,scilab也可以运行m文件嘛~
2007年11月28日星期三
2007年11月23日星期五
深受打击
昨晚运行了一个100代,种群数为40,交叉操作率为0.4,变异率为1的PGGA,效果让人汗颜~~收敛速度缓慢,时常会出现倒退,给人的直观感觉就是很烂!!
现在的优胜劣汰操作时固定淘汰率A,下面改为由初始值逐步增加至最大值;现在的划分level的算法是固定划分为几类,下面可以考虑随着进化不断细化;现在取佳点集时的Norm只是简单取种群取值范围,这样会导致不同的染色体的交叉操作总产生类似甚至相同的佳点,这样不利于新的、更好地佳点的产生,下面要改为以进行交叉的两个染色体为Norm的取值依据~
上面所说的三个要加以改进的地方,以最后一点最为重要,对它寄予厚望,希望能有所突破!!
好了,困了,回宿舍睡一会儿~~
现在的优胜劣汰操作时固定淘汰率A,下面改为由初始值逐步增加至最大值;现在的划分level的算法是固定划分为几类,下面可以考虑随着进化不断细化;现在取佳点集时的Norm只是简单取种群取值范围,这样会导致不同的染色体的交叉操作总产生类似甚至相同的佳点,这样不利于新的、更好地佳点的产生,下面要改为以进行交叉的两个染色体为Norm的取值依据~
上面所说的三个要加以改进的地方,以最后一点最为重要,对它寄予厚望,希望能有所突破!!
好了,困了,回宿舍睡一会儿~~
师弟总结的qtopia-core4.3.2流程
gunzip qt-x11-opensource-src-4.3.2.tar.gz
tar xvf qt-x11-opensource-src-4.3.2.tar
./configure -qvfb
make
make install
gunzip qtopia-core-opensource-src-4.3.2.tar.gz
tar xvf qtopia-core-opensource-src-4.3.2.tar
cd /tmp/qtopia-core-opensource-src-4.3.2
在qtopia-core-opensource-src-4.2.2/src/gui/embedded/qmouselinuxtp_qws.h加入
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
以上两个定义是为了支持触摸屏
./configure -prefix /Qtopiacore-4.3.2 -no-largefile -xplatform qws/linux-arm-g++ -no-libtiff -no-gif -no-libmng -no-openssl -embedded arm -big-endian -no-freetype -qt-gfx-linuxfb -no-sq -no-qt3support –no-qvfb
make
make install
将 编译好Qtopiacore-4.3.2下lib库放到目标板根文件系统的Qtopiacore下 (注意根文件系统中的目录要和-prefix /Qtopiacore-4.3.2一样否则下到arm板上运行程序的时候会报错说找不到字体)如果报错说找不到libstc++.so.6文件,可以将 usr/local/arm/3.4.1/arm-linux/lib/libstc++.so.6复制到/Qtopiacore-4.3.2/lib 下。为了实现触摸屏的校准将/Qtopiacore- 4.3.2/examples/qtopiacore/mousecalibration/mousecalibration拷贝到根文件系统中,在文件 系统的.bashrc文件中加入环境变量。并且export QWS_MOUSE_PROTO="LinuxTP:/dev/h3600_tsraw"
然后制作根文件系统,将根文件系统下到arm板子上去,启动板子运行./mousecalibration -qws 进行触摸屏的校准。
校准完后 cat /etc/pointercal 将显示的数据记录下来, 然后新建一个空白文档将其命名为pointercal ,然后将记录的数据放到pointercal文档中
rm -f /etc/pointercal
sudo cp -f 新建的pointercal /etc
sudo chown 500:244 /etc/pointercal
制作根文件系统,烧到arm板子
结束!
tar xvf qt-x11-opensource-src-4.3.2.tar
./configure -qvfb
make
make install
gunzip qtopia-core-opensource-src-4.3.2.tar.gz
tar xvf qtopia-core-opensource-src-4.3.2.tar
cd /tmp/qtopia-core-opensource-src-4.3.2
在qtopia-core-opensource-src-4.2.2/src/gui/embedded/qmouselinuxtp_qws.h加入
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
以上两个定义是为了支持触摸屏
./configure -prefix /Qtopiacore-4.3.2 -no-largefile -xplatform qws/linux-arm-g++ -no-libtiff -no-gif -no-libmng -no-openssl -embedded arm -big-endian -no-freetype -qt-gfx-linuxfb -no-sq -no-qt3support –no-qvfb
make
make install
将 编译好Qtopiacore-4.3.2下lib库放到目标板根文件系统的Qtopiacore下 (注意根文件系统中的目录要和-prefix /Qtopiacore-4.3.2一样否则下到arm板上运行程序的时候会报错说找不到字体)如果报错说找不到libstc++.so.6文件,可以将 usr/local/arm/3.4.1/arm-linux/lib/libstc++.so.6复制到/Qtopiacore-4.3.2/lib 下。为了实现触摸屏的校准将/Qtopiacore- 4.3.2/examples/qtopiacore/mousecalibration/mousecalibration拷贝到根文件系统中,在文件 系统的.bashrc文件中加入环境变量。并且export QWS_MOUSE_PROTO="LinuxTP:/dev/h3600_tsraw"
然后制作根文件系统,将根文件系统下到arm板子上去,启动板子运行./mousecalibration -qws 进行触摸屏的校准。
校准完后 cat /etc/pointercal 将显示的数据记录下来, 然后新建一个空白文档将其命名为pointercal ,然后将记录的数据放到pointercal文档中
rm -f /etc/pointercal
sudo cp -f 新建的pointercal /etc
sudo chown 500:244 /etc/pointercal
制作根文件系统,烧到arm板子
结束!
2007年11月22日星期四
Qtopia-Core4.3.2总算基本上搞定了
和师弟前后忙乎了大概有一个月(嘿嘿,具体工作是他在做,遇到问题我们共同讨论),总算把Qtopia-Core4.3.2移植到优龙的FS2410的板子上,触摸屏的显示、鼠标移动点击等都没问题了。
回过头来看这一系列的工作,最重要的是概念要清楚,还有就是遇到问题时要沉下心来仔细分析,有错误提示的就认真分析错误提示,不行就上网查;没有错误提示的就在输出中加ehco语句,看是在哪一步出的问题,对问题的迅速定位是解决问题的第一步!另外一个重要的经验就是千万不要忽视Qtopia-Core自带的文档,这是最权威的东东了~
下面简单回顾一下整个过程。
首先是设置参数,使得Qtopia-Core4.3.2能在Ubuntu上跑起来。这就首先需要装Qt4.3.2,因为里面有qvfb,有了qvfb才能在PC上模拟frame buffer的小窗口。这些工作算是比较简单的,前面有文章讲过了,这里就不赘述了。
然后是用linux-arm-编译Qtopia-Core4.3.2的库,这是要放在FS2410里用的,参数设置就尤为重要了。要尽量去掉不需要的特性,这样生成的库才能又快又小~编译完了之后,将编译生成的目录中的lib目录copy到目标板中,再copy一个例子程序过去,作为检验是否成功的测试程序。需要注意的是,当使用不同的参数编译时,生成的lib文件及例子的二进制文件是不同的,每次要copy相同参数的lib和例子程序,不然会出现undefined symbol这样的错误~
在目标板的文件系统中要设置一系列的变量,并export出来,才能保证Qtopia-Core的正常运行。这些工作最好是放在rc.local中完成,当然了,想要启动后自动运行的程序最好也是在这里启动起来。
测试成功后,下面就是触摸屏的显示和触摸了,有个校准程序,是Qtopia-Core自带的例子中的一个,运行后由于我们使用的是只读的文件系统,因此无法写入/etc/pointercal,不过不要紧,用cat /etc/pointercal显示出内容(就几个数字而已),记下来,在做文件系统的时候写入/etc/pointercal就可以了~有点要注意,该文件的owner和owner group要和/etc中的其他文件相同,不然也会出问题,嘿嘿,也许不相同也行,不过相同肯定是没问题的~
回过头来看这一系列的工作,最重要的是概念要清楚,还有就是遇到问题时要沉下心来仔细分析,有错误提示的就认真分析错误提示,不行就上网查;没有错误提示的就在输出中加ehco语句,看是在哪一步出的问题,对问题的迅速定位是解决问题的第一步!另外一个重要的经验就是千万不要忽视Qtopia-Core自带的文档,这是最权威的东东了~
下面简单回顾一下整个过程。
首先是设置参数,使得Qtopia-Core4.3.2能在Ubuntu上跑起来。这就首先需要装Qt4.3.2,因为里面有qvfb,有了qvfb才能在PC上模拟frame buffer的小窗口。这些工作算是比较简单的,前面有文章讲过了,这里就不赘述了。
然后是用linux-arm-编译Qtopia-Core4.3.2的库,这是要放在FS2410里用的,参数设置就尤为重要了。要尽量去掉不需要的特性,这样生成的库才能又快又小~编译完了之后,将编译生成的目录中的lib目录copy到目标板中,再copy一个例子程序过去,作为检验是否成功的测试程序。需要注意的是,当使用不同的参数编译时,生成的lib文件及例子的二进制文件是不同的,每次要copy相同参数的lib和例子程序,不然会出现undefined symbol这样的错误~
在目标板的文件系统中要设置一系列的变量,并export出来,才能保证Qtopia-Core的正常运行。这些工作最好是放在rc.local中完成,当然了,想要启动后自动运行的程序最好也是在这里启动起来。
测试成功后,下面就是触摸屏的显示和触摸了,有个校准程序,是Qtopia-Core自带的例子中的一个,运行后由于我们使用的是只读的文件系统,因此无法写入/etc/pointercal,不过不要紧,用cat /etc/pointercal显示出内容(就几个数字而已),记下来,在做文件系统的时候写入/etc/pointercal就可以了~有点要注意,该文件的owner和owner group要和/etc中的其他文件相同,不然也会出问题,嘿嘿,也许不相同也行,不过相同肯定是没问题的~
2007年11月16日星期五
还是收敛速度
昨晚运行了一夜,100代的结果并不好,甚至不如有时十代的结果,如何保证过程是收敛的以及收敛速度不慢是个大难题!!
不能瞎捣鼓了,没时间也没指望,要静下心来从理论上分析原因,吃透整个过程,找出核心问题,对症下药才有希望~
与“二张”的改进GA算法比较,除了二进制与实数编码的区别外,一个重要的不同是我没有注意“优胜劣汰”的影响。“优胜劣汰”在改进GA中的作用不下于复制操作,尤其在经过多代的优化后,可以大幅提高适应度高的模式的浓度。若不进行“优胜劣汰”操作,则模式个数过多,经延长求到最优解的时间。当然了,较早较高的“优胜劣汰”比率会导致早熟问题,文章采用的是“适度优胜劣汰”的方法,逐步提高比例值,先淘汰掉百分比A适应度最差的模式,对余下的部分再按“按比例淘汰”法进行淘汰。我在实数编码的改进GA算法中重点关心的是如何运用佳点集进行交叉操作,通过对取值范围进行划分,将实数编码问题转换为类似于二进制编码的问题,而且随着进化过程的进行不断细化划分的范围,这样可能会更快更好的得到最佳值。但现在我还没有实现动态细化,同时由于采用默认的GA优化过程,没有对复制、交叉、变异操作后的染色体种群进行“优胜劣汰”的操作。从目前运行的效果来看,收敛速度过慢,平均浓度低的问题比较严重。
前面做过仿真,用适应度值1.69的模型,结果很不理想(现在适应度值的计算方式有所改变)。而现在的适应度值还达不到1.69,这就很难让人满意了。
由前面的分析,得出以下进一步改进的方向:
不能瞎捣鼓了,没时间也没指望,要静下心来从理论上分析原因,吃透整个过程,找出核心问题,对症下药才有希望~
与“二张”的改进GA算法比较,除了二进制与实数编码的区别外,一个重要的不同是我没有注意“优胜劣汰”的影响。“优胜劣汰”在改进GA中的作用不下于复制操作,尤其在经过多代的优化后,可以大幅提高适应度高的模式的浓度。若不进行“优胜劣汰”操作,则模式个数过多,经延长求到最优解的时间。当然了,较早较高的“优胜劣汰”比率会导致早熟问题,文章采用的是“适度优胜劣汰”的方法,逐步提高比例值,先淘汰掉百分比A适应度最差的模式,对余下的部分再按“按比例淘汰”法进行淘汰。我在实数编码的改进GA算法中重点关心的是如何运用佳点集进行交叉操作,通过对取值范围进行划分,将实数编码问题转换为类似于二进制编码的问题,而且随着进化过程的进行不断细化划分的范围,这样可能会更快更好的得到最佳值。但现在我还没有实现动态细化,同时由于采用默认的GA优化过程,没有对复制、交叉、变异操作后的染色体种群进行“优胜劣汰”的操作。从目前运行的效果来看,收敛速度过慢,平均浓度低的问题比较严重。
前面做过仿真,用适应度值1.69的模型,结果很不理想(现在适应度值的计算方式有所改变)。而现在的适应度值还达不到1.69,这就很难让人满意了。
由前面的分析,得出以下进一步改进的方向:
- 优胜劣汰操作。在进行完复制、交叉和变异操作后,对染色体种群进行优胜劣汰操作,采用适度优胜劣汰方法。
- 在一次交叉操作后得出的佳点集中选取最好的p个染色体,目前p值固定取为2,可以考虑改变p值,看看效果是否会有变化。
- 实现划分范围的动态细化。随着进化过程的进行,不断细化范围,本质上就是先把整个取值空间粗略划分,找到较好的区域,再在这个区域内进行划分,找到最好的子区域,通过这个过程找到最优值。目前这种固定依取值范围一分为二的方法或是依现有值范围一分为二的方法都难以进一步找到最优值。
2007年11月14日星期三
2007年11月13日星期二
关于并行计算
佳点集方法要求计算N个染色体的fitness值,选择最好的两个作为后代,这就对计算的速度提出了很高的要求!现在的问题是单个染色体decode为模糊集后计算一组实测数据的时间无法减少,只有从并行性上入手来提高速度。由于染色体之间没有任何关联,可以分别计算各个染色体的fitness值,因此可以分为N个线程来计算。主要方向确定了,细节的问题还有很多。首先是模糊集不是多线程安全的,所以每个线程要复制一个模糊集来使用。其次,每次交叉时要计算N个染色体,一代中要交叉多次,最好能重复使用这N个线程,减少创建和销毁线程的开销。这就牵扯到线程的同步、复用,以及其中模糊集的复用。
通过查阅资料,在Java中,并行编程的几个模式基本清楚了。其中,比较适合目前情况的有两个:barrier和executor。barrier的特点是同步方便,通过设置一个Runnable可以在所有线程计算完毕后将结果收集到一个list中。也方便复用,reset即可。不方便的是,它好像只能直接使用Thread。Thread的复用要自己编程实现。executor则是一个框架,可以提供一个线程池,只要用submit提交要计算的线程即可。优点是不用管线程的复用,缺点是得到的计算结果同步要自己实现。两者各有利弊吧。前者适合反复多次计算、同步、再计算、再同步。。。的场合,后者适合大量短时线程要执行的场合。
从我个人角度来说,更倾向于用barrier。一是因为以前用过,相对熟悉一些,二是感觉Thread的复用相对计算结果的同步要简单一些。当然了,最好是能将两者结合,Runnable里用barrier来同步,然后将Runnable提交给executor来处理,最后坐等barrier完成同步。这样Thread的复用就不用操心了,同步问题也解决了,但此时要注意复用fuzzyRuleSet的问题。这还是要自己实现。解决的方法如下:先建立一个模糊集pool,大小为N,这样可以保证一次barrier同步足够用。注意pool中的fuzzyRuleSet值相同,但其中每个对应的rules、RuleImplicationMethod、Variable等都是不同的对象,这样才能彻底杜绝数据的并发访问的问题,嘿嘿,这就完全是用空间来换时间啦。然后用一个链表来保存空闲的模糊集,使用时取一个,用完后还回来。
为了保证和前面的程序兼容,GCO要改名为PGCO(代表并行的GCO),fitnessFuction里新建一个evalute函数,通过参数不同与原来的那个区分来。还有一些细节,编程的时候再说啦,现在困死了,回去睡一会儿先~~
通过查阅资料,在Java中,并行编程的几个模式基本清楚了。其中,比较适合目前情况的有两个:barrier和executor。barrier的特点是同步方便,通过设置一个Runnable可以在所有线程计算完毕后将结果收集到一个list中。也方便复用,reset即可。不方便的是,它好像只能直接使用Thread。Thread的复用要自己编程实现。executor则是一个框架,可以提供一个线程池,只要用submit提交要计算的线程即可。优点是不用管线程的复用,缺点是得到的计算结果同步要自己实现。两者各有利弊吧。前者适合反复多次计算、同步、再计算、再同步。。。的场合,后者适合大量短时线程要执行的场合。
从我个人角度来说,更倾向于用barrier。一是因为以前用过,相对熟悉一些,二是感觉Thread的复用相对计算结果的同步要简单一些。当然了,最好是能将两者结合,Runnable里用barrier来同步,然后将Runnable提交给executor来处理,最后坐等barrier完成同步。这样Thread的复用就不用操心了,同步问题也解决了,但此时要注意复用fuzzyRuleSet的问题。这还是要自己实现。解决的方法如下:先建立一个模糊集pool,大小为N,这样可以保证一次barrier同步足够用。注意pool中的fuzzyRuleSet值相同,但其中每个对应的rules、RuleImplicationMethod、Variable等都是不同的对象,这样才能彻底杜绝数据的并发访问的问题,嘿嘿,这就完全是用空间来换时间啦。然后用一个链表来保存空闲的模糊集,使用时取一个,用完后还回来。
为了保证和前面的程序兼容,GCO要改名为PGCO(代表并行的GCO),fitnessFuction里新建一个evalute函数,通过参数不同与原来的那个区分来。还有一些细节,编程的时候再说啦,现在困死了,回去睡一会儿先~~
2007年11月12日星期一
遇到了麻烦
早上满怀期望的过来,修改了仿真程序,用真实的前车数据+模糊推理模型进行了仿真,结果让人沮丧!仿真中后车的行为与实际的相比相差甚远,也就是说参数标定的结果很糟糕!经历了短暂的沮丧和抱怨后,只有转过头来看看到底原因是什么?
首先要承认,对于50多个要优化的参数来说,GA算法不堪重负了,尤其是在计算fitness值的时间不能忽略不计的前提下,我无法用野蛮的超多代的进化或是巨量的种群数来达到目的。所以我选择了佳点集,但是看起来效果并不明显。同时我采用的计算fitness值的方法也有问题,仅用差值平方的累加来表示误差会忽略掉本身比较小的值,使得结果更倾向于突然加减速的情况,而跟车时更经常的情况是不加速或微加减速。这个问题可以通过将差值归一化后再累加来避免。
佳点集是我给予厚望的,现在的效果却不理想,初步总结,可能是佳点数设置过低了。看参考文章中理论部分,举的例子中n取值到了10000,而我在程序中设置的仅为5,再结合佳点集理论的特点,显然n取值越大,划分的越细,就越有可能得到较好的值,相对来说,进化的代数则不需要太关注。不过n的取值大小会直接影响到计算的速度,从目前修改后的速度来看,每代的提高速度大大加快了,不过所需的时间也大大延长了,如何得到一个平衡的结果要进一步的考虑。
取佳点计算中取值范围是非常重要的,现在我采用的是固定取值范围,使用预先估计的值。这样做的优点是不会开始时比较容易得到较好的佳点,缺点是太固定了,很可能在多次计算中得出相同的佳点集,这样就没有什么意义了(是否有意义还没想清楚)。
还有一个可以改进的地方是划分两个基因值是否相似。目前的方法是将所有同代的染色体的相同基因位遍历一遍,找出最大最小值,作为上下限值,然后对于每个染色体的每位基因,计算其在限值范围的上半部分还是下半部分,分别赋予0和1。之后比较基因位是否相同时就看是否同为0或1。这样略显粗糙了一些,也许可以通过更细的划分来得到更好的结果。
首先要承认,对于50多个要优化的参数来说,GA算法不堪重负了,尤其是在计算fitness值的时间不能忽略不计的前提下,我无法用野蛮的超多代的进化或是巨量的种群数来达到目的。所以我选择了佳点集,但是看起来效果并不明显。同时我采用的计算fitness值的方法也有问题,仅用差值平方的累加来表示误差会忽略掉本身比较小的值,使得结果更倾向于突然加减速的情况,而跟车时更经常的情况是不加速或微加减速。这个问题可以通过将差值归一化后再累加来避免。
佳点集是我给予厚望的,现在的效果却不理想,初步总结,可能是佳点数设置过低了。看参考文章中理论部分,举的例子中n取值到了10000,而我在程序中设置的仅为5,再结合佳点集理论的特点,显然n取值越大,划分的越细,就越有可能得到较好的值,相对来说,进化的代数则不需要太关注。不过n的取值大小会直接影响到计算的速度,从目前修改后的速度来看,每代的提高速度大大加快了,不过所需的时间也大大延长了,如何得到一个平衡的结果要进一步的考虑。
取佳点计算中取值范围是非常重要的,现在我采用的是固定取值范围,使用预先估计的值。这样做的优点是不会开始时比较容易得到较好的佳点,缺点是太固定了,很可能在多次计算中得出相同的佳点集,这样就没有什么意义了(是否有意义还没想清楚)。
还有一个可以改进的地方是划分两个基因值是否相似。目前的方法是将所有同代的染色体的相同基因位遍历一遍,找出最大最小值,作为上下限值,然后对于每个染色体的每位基因,计算其在限值范围的上半部分还是下半部分,分别赋予0和1。之后比较基因位是否相同时就看是否同为0或1。这样略显粗糙了一些,也许可以通过更细的划分来得到更好的结果。
2007年11月11日星期日
前段时间总结+下面的工作
到今天为止,跑车数据的处理进行的差不多了,遇到的几个困难基本上都解决了。做了这些琐碎的工作后,原来要干什么反而不是那么清晰了,所以今天有必要好好的梳理一下。
原来跑车的目的是要对构建的模糊推理模型进行标定,验证模型的有效性和扩展性。之所以选择模糊推理模型而不是神经网络,就是因为神经网络做的结果难以理解、难以扩展,除此以外,神经网络其实比模糊推理简单,也更易于应用于仿真中。因此,我就要做可理解性和可扩展性上做文章,首先用实测数据来验证模型是可用的,再对标定后的模型进行分析,得出一些有用的结论,同时对模型尝试做一些扩展,来展示其方便的可扩展性。这些最好也有实测数据进行支持。
现在数据处理已经完成的工作是:从大量数据中选择出两车在相同路段分别跟驰对方时的数据,并将wgs84下经纬度、高度的位置转成了右手系的站心地平空间直角坐标系。并用基于佳点集的GA对模糊推理模型的参数进行训练,通过设置不同的训练参数(代数、种族数、交叉率和变异率),比较训练的结果,得出了性能时间比最好的值,作为以后训练时的参考值。
下面要做的是:
1)用前车数据、标定后的模型来仿真后车的跟驰行为,将结果与用来标定的实际行为进行比较,看标定的效果如何~
2)分析两车标定后的模型参数的不同,分析两车驾驶员的不同特点,这是展示模型可理解性的窗口。
3)对模型进行扩展,展示如何扩展、标定,并分析结果。这是展示模型可扩展性。(不知道结果如何,是否如预想的一样可扩展,需要通过实验来确定!)
原来跑车的目的是要对构建的模糊推理模型进行标定,验证模型的有效性和扩展性。之所以选择模糊推理模型而不是神经网络,就是因为神经网络做的结果难以理解、难以扩展,除此以外,神经网络其实比模糊推理简单,也更易于应用于仿真中。因此,我就要做可理解性和可扩展性上做文章,首先用实测数据来验证模型是可用的,再对标定后的模型进行分析,得出一些有用的结论,同时对模型尝试做一些扩展,来展示其方便的可扩展性。这些最好也有实测数据进行支持。
现在数据处理已经完成的工作是:从大量数据中选择出两车在相同路段分别跟驰对方时的数据,并将wgs84下经纬度、高度的位置转成了右手系的站心地平空间直角坐标系。并用基于佳点集的GA对模糊推理模型的参数进行训练,通过设置不同的训练参数(代数、种族数、交叉率和变异率),比较训练的结果,得出了性能时间比最好的值,作为以后训练时的参考值。
下面要做的是:
1)用前车数据、标定后的模型来仿真后车的跟驰行为,将结果与用来标定的实际行为进行比较,看标定的效果如何~
2)分析两车标定后的模型参数的不同,分析两车驾驶员的不同特点,这是展示模型可理解性的窗口。
3)对模型进行扩展,展示如何扩展、标定,并分析结果。这是展示模型可扩展性。(不知道结果如何,是否如预想的一样可扩展,需要通过实验来确定!)
2007年11月9日星期五
牛博何时才能重开
前一阵牛博突然无法访问了,现在可以访问了,不过总是说正在补办手续,补办好久了还是没消息,现在上网很无聊,除了收发邮件、看看体育新闻、时事这类的,就没什么地方可去了~~当然上网找资料除外。
在没有牛博的日子里,开始享受一天更新一章小说的乐趣,不用花很多的时间看长篇的,每天看一章就ok了~忙的时候几天没看,就会累积好几章,看得也很过瘾。
此外,练车也是生活的一大消遣。在有突破或很郁闷的时候都会想去练半天车,全心投入到另一种活动中,其中既有乐趣,也有成就感,i feel good!
看着师弟们在找工作,觉得一个也不适合我去,看来只能去研究所了,学校我是不想待了,只要是一种全新的生活就行,生活中需要不断的新鲜刺激的东西才能让我感觉到活着的意义!钱我不太看重,当然了,有钱最好了,不过这不是我的目的。开心的过每一天是我现在所追求的~~
在没有牛博的日子里,开始享受一天更新一章小说的乐趣,不用花很多的时间看长篇的,每天看一章就ok了~忙的时候几天没看,就会累积好几章,看得也很过瘾。
此外,练车也是生活的一大消遣。在有突破或很郁闷的时候都会想去练半天车,全心投入到另一种活动中,其中既有乐趣,也有成就感,i feel good!
看着师弟们在找工作,觉得一个也不适合我去,看来只能去研究所了,学校我是不想待了,只要是一种全新的生活就行,生活中需要不断的新鲜刺激的东西才能让我感觉到活着的意义!钱我不太看重,当然了,有钱最好了,不过这不是我的目的。开心的过每一天是我现在所追求的~~
订阅:
博文 (Atom)