3.giant component(netlogo)
一、简单叙述
这次挑了一个比较复杂的模型进行分析
涉及到了turtle的排列,新的主体link,loop循环,函数递归,图像等等
研究过程中也遇到了一些问题
这个模型主要是用来研究连通巨片的
每个时间步加一条边,每次加边重新探索整个图,来找连通巨片
找到连通巨片上色
之后给边上色,然后对边和点排列一波
之前我发现我的模型颜色一直在闪烁,最后发现是,我的视图更新方式是连续更新,应该设置成按时间步更新
这个闪烁问题差点把我弄自闭
这个模型是在模型库里就能找到的,在下面搜索 giant component即可
整体的界面如下
二、全部代码
;;1.全局变量
globals[current-component-size ;;当前探索连通片大小giantComponent-size ;;当前最大的连通巨片大小giantComponent-startNode ;;连通巨片的一个起点,后面上色方便找到连通巨片
];;2.节点附带属性
patches-own[explored? ;;是否被探索过
];;3.初始化按钮 setup 代码
to setupclear-all ;;清空一切initial-node ;;调用初始化节点方法reset-ticks ;;重设时钟
end;;4.初始化节点方法 initial-node 代码
to initial-nodeset-default-shape turtles "circle" ;;设置节点默认形状是圆create-turtles nodeNum [ ;;创建nodeNum个节点,每个节点大小为3,颜色是黄色set size 3set color yellow]set giantComponent-startNode one-of turtles ;;随机选一个节点成为连通巨片ask giantComponent-startNode[ ;;把其颜色变成红色set color red]layout-circle turtles max-pxcor - 1 ;;把所有节点排列成一个圆圈,半径为 max-pxcor-1
end;;5.循环迭代按钮 go 代码
to goif( ((count links) * 2) >= (count turtles) * (count turtles - 1) )[ ;;退出条件displayuser-message "网络已经形成全连接网络,不能再加边了。"stop] add-edge ;;执行函数,加一条边explore-components ;;执行函数,探索所有的连通片,找到连通巨片ask turtles[set explored? false ;;方便之后涂色的探索]ask giantComponent-startNode[color-giantComponent ;;给连通巨片上色]ask links[set color [color] of end1 ;;设置边的颜色为 连边一端节点的颜色]layout ;;调用layout函数,对边和节点进行排列tick ;;时间步+1
end;;6.加边函数 add-edge
to add-edgelet node1 one-of turtles with [count link-neighbors < nodeNum - 1]let node2 one-of turtles with [count link-neighbors < nodeNum - 1]ask node1[ifelse link-neighbor? node2 or node1 = node2[add-edge][create-link-with node2]]
end;;7.explore-components函数 代码
to explore-componentsask turtles[set color yellowset explored? false]loop[let start one-of turtles with [not explored?] ;;每次选一个没有被探索过的节点if start = nobody[ ;;全都探索过了退出stop]set current-component-size 0ask start[ ;;从这个节点开始,把这个连通片探索一遍explore-current-component]if current-component-size > giantComponent-size[ ;;如果当前连通片最大,更新最大连通片set giantComponent-size current-component-sizeset giantComponent-startNode start]]
end;;8.explore-current-component函数 代码
to explore-current-componentif explored? [stop]set explored? trueset current-component-size current-component-size + 1ask link-neighbors[explore-current-component]
end;;9.color-giantComponnet函数 代码
to color-giantComponentif explored?[stop]set color redset explored? trueask link-neighbors[color-giantComponent]
end;;10.layout函数
to layoutif not layout?[stop ;;如果layout开关是关闭的,停止]repeat 10[ ;;重复10次do-layout ;;执行排列函数display ;;刷新界面]
end;;上方layout函数用到了 layout?这个开关,在主界面添加
;;layout函数调用了 do-layout函数
;;11.do-layout函数
to do-layout;;这个弹簧排列是为了让整个模型运行起来更美观,传入节点集合和边结合;;节点满足只要有一个邻居节点,就能加入节点集,边集合就是全体边;;后面的三个系数是弹簧常数,弹簧长度,回归常数 就这样设置就行layout-spring (turtles with [any? link-neighbors]) links 0.4 6 1
end
图代码
三、小结
自己调试的时候,一定要注意,要保存文件
我昨天就因为时间步的问题,导致程序卡死,代码还没有保存
今天起来重新敲了一遍
基本的内容代码里都注释过了
为什么模型看上去不那么呆板? 用的layout-spring(弹簧样式),把连边当成弹簧
通过设置一系列系数,让动画看上去十分流畅
基本碰到循环,首先在开头考虑退出条件
调试的时候可以右击画面,点开全局变量,实时查看全局变量的情况
每次做模型先考虑模型的大小,左右上下是否连起来
3.giant component(netlogo)相关推荐
- 一文读懂Python复杂网络分析库networkx | CSDN博文精选
作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...
- 推荐一本网络科学入门书
推荐一本网络科学入门书 具体见参考1. 本书是M. E. J. Newman的代表作:<Networks: An Introduction>. 书目录: Table of Contents ...
- [python] NetworkX实例
文章目录 NetworkX实例 1. 基础Basic 2. 绘图Drawing 3. 图标Graph NetworkX实例 代码下载地址 NetworkX 2.4版本的通用示例性示例.本教程介绍了约定 ...
- networkx edge 属性_一文读懂Python复杂网络分析库networkx | CSDN博文精选
作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...
- 【CS224W】(task1)图机器学习导论
note GNN应用场景:社交网络.知识图谱.复杂的文件系统等:节点.链路.子图分类任务等. 图机器学习的编程工具:(Graphgym.pyG.networkx.dgl.Pytorch.AntV.Ec ...
- CS224W 02-Properties of NetWorks, Random Graph Models 图网络特征,随机图模型
02-Properties of NetWorks, Random Graph Models 文章目录 02-Properties of NetWorks, Random Graph Models 2 ...
- [论文翻译]A Global Geometric Framework for Nonlinear Dimensionality Reduction
论文题目:A Global Geometric Framework for Nonlinear Dimensionality Reduction 论文来源:Science 290, 2319 (200 ...
- 图的Laplacian矩阵
设G=<V,E>是一个n阶无向简单(无环,无多重边)图,其顶点集和边集分别记为V=V(G)={v1,v2,-vn}和E=E(G)={el,e2,-,en),我们用如下方式刻画图的Lapla ...
- svg配合css3动画_与Sarah Drasner一起使用CSS,JS和SVG进行动画处理,并避免倦怠
svg配合css3动画 In this episode of the Versioning Show, Tim and David are joined by Sarah Drasner, a tea ...
- networkx 例子
以下代码在Jupyter Notebook中运行: ''' draw_networkx_edges(G, pos, edgelist=None, width=1.0, edge_color='k',s ...
最新文章
- mysql统计今日首充用户_电商用户行为MySQL分析
- 导数,微积分,牛顿运动学制作创意地图
- 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
- Wannafly挑战赛18
- java 内省学习笔记
- linux 脚本 变量为空,Shell判断一个变量是否为空
- 腾讯优测-优社区干货精选 |安卓适配之Camera拍照时快门咔嚓声
- 【UNITY3D 游戏开发之三】NGUI HUDTEXT 的练习源码及资源
- 新增SDK 错误解决办法
- 心理测试:DISC性格测试(完整版)
- Unity 安卓打包
- 抢红包案例分析以及代码实现(一) 侵立删
- 如何将华为备忘录转移到小米便签
- 注册表禁用计算机管理,注册表被管理员禁用如何处理 怎么解决注册表被管理员禁用【图文】...
- AndroidStudio项目配置第三方libray库
- 【运动控制】运动控制类实现
- 1.4 NBU配置备份策略(Policy)
- ez_website
- 大数据分析培训课程有哪些?初级阶段学什么?
- Python数据分析与应用----财政收入预测分析、实训(企业所得税预测)
热门文章
- 根的存在定理(零点存在定理)
- 《数据结构》第十篇、线性表中的链式存储结构--双链表
- Python调用华为API实现名人识别
- CNN入门讲解:准确率很高就感觉自己萌萌哒?NONONO,还有一点也重要
- Selenium WebDriver 数据驱动测试框架
- linux tc工具,Linux TC软件系统损坏自助恢复的工具.TC刷机,TC修复,TCPUP,TCP-UP
- 吴军《态度》读书笔记
- 【gitee】解决gitee本地提交但是无法显示贡献度(绿点)的问题
- python古诗词风格分析_鉴赏古诗词语言风格
- 解决Typora图片显示不出来问题