再说最短路径——Networkx
Posted 大水牛参数化设计
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再说最短路径——Networkx相关的知识,希望对你有一定的参考价值。
【版权声明】
本文首发于大水牛平台
非常感谢CPF投稿大水牛平台发表
如需转载请联系作者
本次介绍的是python语言编写的软件包——Networkx,便于用户对复杂网络进行创建。为什么要使用它:我们不用再纠结于算法是如何实现的,我们只需要简单的使用它,就可以达到想要的效果。而我们这次将只是初探,毕竟能力有限,欢迎交流。
先展示代码,是不是很简单。当然关于路网我们不仅局限于此。。
关于图论,借用维基百科的定义“图论中的图是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用顶点代表事物,用连接两顶点的边表示相应两个事物间具有这种关系。”
图论中的一些基本概念。图(graph)G=(V,E)由顶点(vertex)的集V和边(Edge)的集E组成。我们可以给边和点赋予各种的属性,比如权值。比如在最短路径中,我们赋予边的权重即距离。权值可以表示从一个顶点到另一个顶点的距离,也可以表示一个顶点到另一个顶点花费的代价(比如时间、金钱等)。一个边上带权值的图称为网络(network)。
下面结合代码,具体解释nextworkx是如何使用的。
下面介绍如何在rhino中使用networkx库,由于在gpython的版本内置的python语言版本为2.,所以需要使用networkx-1.5版本,其他版本可能会出现一定的问题,如果你不在rhino中使用networkx,那么推荐使用Visual Studio ,它将极大的方便你进行配置networkx。
方法一:
工具->Pythonscript->Tools->options
方法二:
将network的文件夹放置在下列中的任何一个文件夹中。
方法三:
进行动态的加载。
接着我们将结合gpython进行具体的练习。
上一次我们只是在一个平面上进行最短路径,如果是在起伏的山地上,我们需要更新边的权重,让它不仅仅和距离有关,还和高度相关。curve.lenght*(1+| tanθ |)也许能到达我们的目的。
发现networkx 的第一个想法,就是欣喜,可无奈自己学术研究能力实在太差了。我想如果能够深入对此进行研究还是能获得不小的收获。networkx本身内置对于图分析的强大算法,关于最短路径的、、、(Bellman-Ford算法的改进版本)、等。但它又不局限于此,它本身还有一系列的对于图的评价体系。
欢迎大家如有好想法或者好的python库相互交流。具体代码过于简单就不放了。
往期回顾:
点击关注微信公共号,获取更多精彩内容。
大水牛数字设计联盟是一个传播分享建筑数字化设计与数字化建造资讯的平台。
并且会不断连载原创或转载有价值的参数化软件教程
(犀牛、grasshopper、python编程、revit、processing等等)
是一个视野与技术并重的数字化传播平台。
我们的目标是把这个平台创造成一个拥有良好氛围的学习平台。
我将带头冲锋;我的立场非常坚定;
我们的狂怒你驾驭不住;黎明就在眼前。
记住我们不是一个人在战斗!
如果觉得我们的公共号不错,欢迎向你的小伙伴安利!
以上是关于再说最短路径——Networkx的主要内容,如果未能解决你的问题,请参考以下文章
networkx图论贝尔曼-福特Bellman Ford Algorithm最短路径,Python