嵌入式智能查询算法中利用图形对数据进行可视化处理
某些直观推断看起来非常明显,但即便是这些直观推断也有助于探寻待解决问题的实质。对于公路遍历问题,最基本的直观推断就是:"选择具有最小边线权值的路径。"这简单易行,但背离了查询的基线准则。
遵循最小边线权值的方法称为"贪婪算法"(greedyalgorithm),该算法以即刻满意度为基础。贪婪算法并不考虑以后的情况,而选择当前最为廉价的路径进行查询。这并不能保证得到有效的解决方案,甚至有时会得到不怎么优化的路径。当询及为何选择最终被证明是错误的路径时,贪婪算法或许会回答:"在当时,这看起来是个不错的选择。"
一些对人类而言相当明显的直观推断对于机器则并非如此。例如直观推断"当节点存在两个(或更多)等权值边线时,将执行宽度优先查询,然后继续查询总权值最小的路径",这本身并没有问题,但还是存在一个问题。如果最小成本的路径偏离了目标节点怎么办?这样选择得到的或许是一条更为昂贵的路径。由此可见,还必须了解从当前节点至目标节点的方向。以这种形式开发直观推断是展现待解决问题所需核心知识的良好途径。
解决公路网络导向问题的一个有效途径是动态计算当前节点和目标节点之间的距离和方位。这要求得到每个节点的经纬度数据,并对前进中的每一个节点进行浮点操作,因而极有可能是最不优化的解决方案。更好的策略是根据经纬度对之间的差异得到一套准则,这有助于提取最少准则所需的信息。
第一步必须明确方向和经纬度之间的关系,图4显示了根据经纬度差异得到的方向。
当向北方移动时,纬度将增加;向西方移动时,经度增加;以此类推。从这些简单的关系中可以看出,每个节点上完全可以去除许多不必要的操作。将以上知识与交通图相结合,可以得到Scott和Jackson交叉口的起始纬度和经度分别为N3747。514和W12226。356,而目标Fillmore和Vallejo交叉口则分别为纬度N3747。725和经度W12226。002。根据图4中的罗盘仪准则,现在目标交叉口位于起始交叉口的东北方向。
根据以上方向关系,可以得到如下六条准则:
准则1:如果纬度(目标)>纬度(现在状态),那么目标为北方;
准则2:如果纬度(目标)<纬度(现在状态),那么目标为南方;
准则3:如果纬度(目标)=纬度(现在状态),那么目标为空;
准则4:如果经度(目标)>经度(现在状态),那么目标为西方;
准则5:如果经度(目标)<经度(现在状态),那么目标为东方;
准则6:如果经度(目标)=经度(现在状态),那么目标为空;
可以将上述基本准则相结合以得到更为复杂的方向,如东北和西南。这只需要将基本准则通过"与"操作结合起来,这样有效的组合如下:
规则1^规则4->目标为西南
规则1^规则5->目标为东北
规则1^规则6->目标为北
规则2^规则4->目标为西南
规则2^规则5->目标为东南
规则2^规则6->目标为南
规则3^规则4->目标为西
规则3^规则5->目标为东
规则3^规则6->目标为空
将基本准则和复杂准则结合起来就能得到成功的查询方法。如果目标在当前节点的西北方向,那么向北方和东方移动是合法的。这里我认为应该是:"如果目标在当前节点的东北方向,向北方和东方移动是合法的",而向南方和西方移动则不合法。
当查询到节点12,选择的逻辑路径则是从节点12至节点11并且权值为15的边线。此时方向为北方,这看来是合法的,且边线权值达到最小。其实这完全是错误的,因为查询偏离了目标节点。现在我们利用规则对查询进行限定,节点12与节点17平行,因此准则3成立。此时经度减少,因此规则5成立。如果规则3和规则5都成立,那么目标是正东方。规则基础很好地完成任务:避免了"盲目"查询或对"盲目"查询进行导向。结果如图5所示。
本文小结
如上所述,图形表示法和盲目查询算法本身并不足以解决大多数问题。但将这些技术同直观推断以及特定问题的规则集相结合,就像上面所做的那样,就能得到有效的人工智能。类似的技术可应用于诸多应用领域。尽管本文的示例集中于静态数据,但当边线及边线权值改变并且不能对规则进行硬编码时,这里给出的技术仍然有效。
显然,嵌入式系统通常受制于某些特殊限制。嵌入式编程中一般不允许递归算法,尽管这是图形查询算法中的一种常用技术。关键应用中的嵌入式系统也不支持动态内存分配,但如果没有动态内存分配的话,将很难在链表数据表示法中添加和删除节点。出于以上考虑,可以得到如下嵌入式智能的应用技巧:
1。考虑将部分处理移交至功能更为强大的系统,也许嵌入式系统只需要解决部分需要快速解决的问题。
2。避免递归,任何递归函数都应当用迭代函数进行重写。
3。尽可能减小动态内存分配。如果链表的长度相对保持恒定,就可用数组进行代替,使数组的大小等于链表的最大长度,一旦超过该最大长度就返回操作失败。
4。将智能视为低能动物而非超级计算机,即将其想像为处理意外情况或干扰的低等动物形式。
5。最重要的是,有效地综合"盲目"算法、"贪婪"算法和智能查询算法。当然,也没有任何规定限制只能采用一种方法解决需要利用智能的问题。
- 用链表实现的屏幕飘雪程序(12-01)
- 单向链表应用函数(12-01)
- 链表中几个较重要的问题(12-01)
- 单向链表基本操作的递归实现(12-01)
- 单链表就地转置的问题(11-29)
- 建立链表遇到的问题(链表突然消失,链表突然全部为空)(11-25)