Network programming 在netlogo中双向终止随机定向链接

Network programming 在netlogo中双向终止随机定向链接,network-programming,netlogo,Network Programming,Netlogo,问候, 我对netlogo非常陌生,对netlogo中的GIS和网络功能非常感兴趣 目前,我已经构建了一个有向图网络。 我想实现一个函数来终止两个方向上的定向链接路径 我已经找到了在两个方向上杀死一个链接的方法,如果你知道哪一个是要杀死的2节点的链接。下面是代码(由Seth Tisue在一个问题线程中提供): 我想在两个方向上消除一个随机链接。我假设我需要使用“ask-one-of-links[die]”和代码的另一部分来终止相应的链接的另一个方向 我想我的问题是“其中之一”的机制是如何工作的,

问候,

我对netlogo非常陌生,对netlogo中的GIS和网络功能非常感兴趣

目前,我已经构建了一个有向图网络。 我想实现一个函数来终止两个方向上的定向链接路径

我已经找到了在两个方向上杀死一个链接的方法,如果你知道哪一个是要杀死的2节点的链接。下面是代码(由Seth Tisue在一个问题线程中提供):

我想在两个方向上消除一个随机链接。我假设我需要使用“ask-one-of-links[die]”和代码的另一部分来终止相应的链接的另一个方向

我想我的问题是“其中之一”的机制是如何工作的,这样我就可以先存储这个随机链接,然后使用上面的第一个代码消除两个方向。

作为一个旁侧,我也对NETLogo如何使用变量而感到困惑,这与普通C++程序(我的基本是C++编码)完全不同。我为我的网络和GIS shapefile做了很多导入工作,目前我还没有使用netlogo引擎作为我的计算引擎(对我来说是一种浪费)

如何将简单的“x=1+1”存储到netlogo中的全局变量中?
如果这个问题对大多数人来说太简单,我真的很抱歉。

全局变量应该在程序开始时声明:

globals [
   my-global-link; this will be my global variable 
   my-another-one-link; another one 
]
要“存储”随机链接,请按如下方式使用:

to do-something
   set my-global-link one-of links
end
对于局部变量(在过程中),只需先使用let do declare:

to do-something
   let tmp-global-link one-of links
end

就像一般的stackoverflow惯例一样,如果你有两个问题,请分别提问。这是为了使stackoverflow成为程序员有用的资源,这样标题和问答就可以一起轻松找到

  • 首先,你怎么知道两个方向都有联系?通常有向图有许多对节点,其中有A到B或B到A,但不是两者都有。下面的代码测试另一个方向,并杀死这两个方向

  • 我已经在设置中包含了将变量x设置为1+1的示例

  • 我确信有一种更好的方法可以做到这一点,因为NetLogo代码通常不那么难看,但我找不到它。下面的代码是一个完整的可运行示例,它创建一组节点和链接,然后在kill-link过程运行时终止一个链接(包括倒数链接,如果它存在的话)

    globals [x tonode fromnode]
    
    to setup
      clear-all
      create-turtles 20
      [ setxy random-xcor random-ycor]
      repeat 100
      [ ask one-of turtles
        [ create-link-to one-of other turtles  ; will not be created if already link
        ]
      ]
    
      set x 1 + 1
    end
    
    to kill-link
      ask one-of links
      [ set fromnode end1
        set tonode end2
        die
      ]
      ask tonode
      [ if out-link-neighbor? fromnode
        [ ask out-link-to fromnode [die]
        ]
      ]
    end
    

    要了解NetLogo中的变量,请参阅如何
    终止链接let dead1 dead1 ask(link set dead1 dead2)[die]end的链接let dead2[[out link to other end]of end2]中的一个链接let dead2](链接集dead1 dead2)[die]end
    ,感谢JenB和Seth Tisue!我是stackoverflow的新手,将来我会坚持每个线程一个问题。至于“杀死一个链接(如果它存在的话,包括倒数链接)”的方式,我个人认为JenB版本更容易阅读,而Seth Tisue版本则可能更短。然而,这两种方法都有效!再次感谢!谢谢你的评论,虽然这不是我想要的,但无论如何,我还是要感谢你花时间来帮助我!
    globals [x tonode fromnode]
    
    to setup
      clear-all
      create-turtles 20
      [ setxy random-xcor random-ycor]
      repeat 100
      [ ask one-of turtles
        [ create-link-to one-of other turtles  ; will not be created if already link
        ]
      ]
    
      set x 1 + 1
    end
    
    to kill-link
      ask one-of links
      [ set fromnode end1
        set tonode end2
        die
      ]
      ask tonode
      [ if out-link-neighbor? fromnode
        [ ask out-link-to fromnode [die]
        ]
      ]
    end