【干货】算法学习必备诀窍:算法可视化解密
受困于繁复的代码块里,每天看着密密麻麻的变量和语句,拿着别人提供的代码跑出结果也不知道结果是什么?
不妨来了解了解算法可视化吧,说不定就能解你每日之烦忧,让你的头发掉落的速度慢下来!
01
初入“可视化”:算法可视化概念
可视化,也可以解释为形象化,具象化,它旨将我们脑中抽象复杂的逻辑步骤变成图像,帮助我们更好的检索获取分析信息。虽然说的“高大上”,但毋庸置疑的是可视化是我们学习新知识的捷径,也是透彻理解一个理论的必由之路。还记得小时候被加法表乘法表支配的恐惧吗?那时候就有聪明的大人发明出伟大的“苹果论”(不要误会,不是牛顿发明的),“你有一个苹果,妈妈又给了你一个,现在你有几个苹果了呢?”就在这来来回回的赠送又拿走,拿走又奖励的过程中,GDP总量上升了,我们学会了最基础的逻辑运算。
但肯定有人说了,算法学习怎么能和加减法一样呢,我们也怎么能和学龄前儿童类比呢?算法难不难?(如果认为小菜一碟的能不能给蒟蒻笔者留个联系方式,好心拯救头秃少女)难,非常难,难于上青天,但之所以会有如此哀叹,是因为我们看到的最原始状态的算法是这样的:
这是一段简单的冒泡排序算法,但盯着一堆毫无生命力的英文字母,看到一堆大括号可能就犯晕的你,怕是得花上很多时间才能理解它的原理。
但如果算法以下面这种形式呈现,你可能会说:「噢,原来就是两两比较两两交换啊。」是不是对算法突然就不那么恐惧了呢?
算法可视化是指,将一段程序的数据、操作、语义进行抽象,并对这些抽象进行动态的图像展示,使之更容易理解、传播和交流的过程。
它的使用对象可以分成两类——学习者和教育者。这里的学习者就是你所以为的学习者,但教育者却不仅仅指狭义上的教师,它包括了脚本师、算法设计者等需要进行算法展示的角色。
算法可视化是伴随着需求而发展的一门技术,用户的需求决定了算法可视化的发展方向。从只提供文字和简单图表的无可视化阶段,到通过弹出式问题与用户交互,从用户能改变系统所演示算法的数据,再到自主创建自己的算法的可视化动画,用户的需求不同,其在系统中的参与层级也不同。
02
实例:VRPTW求解过程可视化
听完算法可视化相关概念的你可能已经懵圈了,无图无真相,说什么都不如亲眼看看可视化的实际效果来的直观。这里我们准备了一个基于 Java+JavaFx 实现的禁忌搜索求解带时间窗的车辆路径规划问题(VRPTW)的可视化程序,不妨一起来看看吧:
关于VRPTW问题,我们已经在之前发布的文章中多次介绍过,如果你还有疑问的话,可以戳下面的文章进行了解:
干货|十分钟快速掌握CPLEX求解VRPTW数学模型(附JAVA代码及CPLEX安装流程)
禁忌搜索算法求解带时间窗的车辆路径规划问题详解(附Java代码)
由于启发式算法求解VRPTW的过程往往围绕迭代展开,因而,通过显示每一次迭代得到的结果,追踪解的变化,我们可以对算法求解VRPTW问题的收敛过程有更清晰的认识。同时,成本函数随迭代次数的变化也更直观地反映了算法的效率。
那么,这样一个VRPTW问题的可视化程序,都为我们提供了哪些功能呢?我们又该如何进行操作呢?
首先,我们需要导入我们的算例和结果:
导入算例和结果的TXT文件后,在程序界面的左上方,会出现配送中心和客户节点的分布。我们只需要把鼠标悬停在各个点上,就可以看到相应客户点的位置、需求和时间窗约束。
点击界面下方的启动按钮,程序开始运行。可以看到,在节点的分布图上生成了各种颜色的路径线条,不同颜色的连线代表不同的配送车辆行驶的配送路线,直观地显示了规划路径的变化。
将目光移到右边的区域上,可以看到,随着迭代次数的增加,净成本在不断地变化,方便我们追踪成本是否趋于收敛。下方则是每次迭代产生的具体解,每辆配送车经过客户点的顺序、每条路径的净成本、每个路径规划方案的总成本。我们可以通过点击暂停键随时查看迭代过程中产生的特定解。在最下方可以看到目前为止产生的最优解。
求解过程演示完毕后,在下方可以进行特定迭代次数产生解的查询。此外,我们还可以通过拖动一旁的演示速度条自由选择演示的速度。
当算法的黑盒被突然剖开,求解过程被这样直白的呈现在你的面前,令人头疼的VRPTW问题是不是变得平易近人了呢?当你还在烦恼老师or客户对自己孤零零的结果将信将疑的时候,别人早早地已经使用可视化工具把算法流程讲的一清二楚啦。此时不用可视化,更待何时?
写在最后
总结一下,算法可视化帮助我们将复杂的逻辑过程形象化,不管是为了学习算法原理还是展示算法过程,算法可视化都将是我们的一种有效工具。
在接下来的推文中,我们将更加详细地为大家介绍多种算法的可视化界面及其代码,尽情期待哟!
赞 赏
长按下方二维码打赏感谢您,支持学生们的原创热情!
郑重承诺打赏是对工作的认可所有打赏所得都将作为酬劳支付给辛勤工作的学生指导老师不取一文
The End
文案&编辑:李奕潇 李欣羽
审稿人:秦时明岳(华中科技大学管理学院)
指导老师:秦时明岳(华中科技大学管理学院)
如对文中内容有疑问,欢迎交流。(PS:部分资料来自网络)
如有需求,可以联系:秦虎老师(professor.qin@qq.com)李奕潇(华中科技大学管理学院本科一年级 gloria730@126.com)
李欣羽(华中科技大学管理学院本科二年级 qcbegin@qq.com)
扫一扫,获取数据和模型还有更多算法学习课件分享哟