一、简单叙述

这次挑了一个比较复杂的模型进行分析

涉及到了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)相关推荐

  1. 一文读懂Python复杂网络分析库networkx | CSDN博文精选

    作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...

  2. 推荐一本网络科学入门书

    推荐一本网络科学入门书 具体见参考1. 本书是M. E. J. Newman的代表作:<Networks: An Introduction>. 书目录: Table of Contents ...

  3. [python] NetworkX实例

    文章目录 NetworkX实例 1. 基础Basic 2. 绘图Drawing 3. 图标Graph NetworkX实例 代码下载地址 NetworkX 2.4版本的通用示例性示例.本教程介绍了约定 ...

  4. networkx edge 属性_一文读懂Python复杂网络分析库networkx | CSDN博文精选

    作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...

  5. 【CS224W】(task1)图机器学习导论

    note GNN应用场景:社交网络.知识图谱.复杂的文件系统等:节点.链路.子图分类任务等. 图机器学习的编程工具:(Graphgym.pyG.networkx.dgl.Pytorch.AntV.Ec ...

  6. CS224W 02-Properties of NetWorks, Random Graph Models 图网络特征,随机图模型

    02-Properties of NetWorks, Random Graph Models 文章目录 02-Properties of NetWorks, Random Graph Models 2 ...

  7. [论文翻译]A Global Geometric Framework for Nonlinear Dimensionality Reduction

    论文题目:A Global Geometric Framework for Nonlinear Dimensionality Reduction 论文来源:Science 290, 2319 (200 ...

  8. 图的Laplacian矩阵

    设G=<V,E>是一个n阶无向简单(无环,无多重边)图,其顶点集和边集分别记为V=V(G)={v1,v2,-vn}和E=E(G)={el,e2,-,en),我们用如下方式刻画图的Lapla ...

  9. 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 ...

  10. networkx 例子

    以下代码在Jupyter Notebook中运行: ''' draw_networkx_edges(G, pos, edgelist=None, width=1.0, edge_color='k',s ...

最新文章

  1. mysql统计今日首充用户_电商用户行为MySQL分析
  2. 导数,微积分,牛顿运动学制作创意地图
  3. 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
  4. Wannafly挑战赛18
  5. java 内省学习笔记
  6. linux 脚本 变量为空,Shell判断一个变量是否为空
  7. 腾讯优测-优社区干货精选 |安卓适配之Camera拍照时快门咔嚓声
  8. 【UNITY3D 游戏开发之三】NGUI HUDTEXT 的练习源码及资源
  9. 新增SDK 错误解决办法
  10. 心理测试:DISC性格测试(完整版)
  11. Unity 安卓打包
  12. 抢红包案例分析以及代码实现(一) 侵立删
  13. 如何将华为备忘录转移到小米便签
  14. 注册表禁用计算机管理,注册表被管理员禁用如何处理 怎么解决注册表被管理员禁用【图文】...
  15. AndroidStudio项目配置第三方libray库
  16. 【运动控制】运动控制类实现
  17. 1.4 NBU配置备份策略(Policy)
  18. ez_website
  19. 大数据分析培训课程有哪些?初级阶段学什么?
  20. Python数据分析与应用----财政收入预测分析、实训(企业所得税预测)

热门文章

  1. 根的存在定理(零点存在定理)
  2. 《数据结构》第十篇、线性表中的链式存储结构--双链表
  3. Python调用华为API实现名人识别
  4. CNN入门讲解:准确率很高就感觉自己萌萌哒?NONONO,还有一点也重要
  5. Selenium WebDriver 数据驱动测试框架
  6. linux tc工具,Linux TC软件系统损坏自助恢复的工具.TC刷机,TC修复,TCPUP,TCP-UP
  7. 吴军《态度》读书笔记
  8. 【gitee】解决gitee本地提交但是无法显示贡献度(绿点)的问题
  9. python古诗词风格分析_鉴赏古诗词语言风格
  10. 解决Typora图片显示不出来问题