NetWork Modles(网络模型)

  Jiggle 示范模型(repast/demo/jiggle)是一个简单的细网络模型例子, JinGirNew 网络模型(repast/demo/jinGirNew)是一个较复杂和现实的例子。

Contents

  • Network Overview
  • Displaying Networks
  • Importing and Exporting Network Data
  • Predefind Network Structures

Network Overview

  在Repast中网络模型是围绕两个基本界面构建的: Node和 Edge。所有关于显示、输出和输出网络机制都使用这两个界面,并且它们应成为你自己的网络的基础。Repast提供这些界面缺省执行,DefaultNode和DefaultEdge可以当作你自己网络的node 和 edge类或为这些类的基础来使用。

  Node 和 Edge 界面利用网络节点和连线为运行提供一些简单的方法。API 文档应该清晰,但其意图当 Edge 保持它所连接的节点的轨迹时,Node 保持它的流入和流出到连线的轨迹如同可选标签。此外,Edge 也有方法取得和设置连线强度,如同一个可选标签和类型。连线的类型参考连线所定义的网络类型。

  在两个节点间建立一条线(一条连线)可以有两种方法。第一种:

// this sets up the Nodes 
DefaultNode nodeA = new DefaultNode("A"); 
DefaultNode nodeB = new DefaultNode("B"); 
// constructs a DefaultEdge from nodeA to nodeB 
// with a default strength of 1 
// nodeA --> nodeB 
DefaultEdge edge = new DefaultEdge(nodeA, nodeB); 
nodeA.addOutEdge(edge); 
nodeB.addInEdge(edge);

  这里生成两个节点,并生成连线来连接节点 A 到节点 B。这个增加的连线对于节点 A 是流出连线,对节点 B 是流入连线。   

  第二种也是首选的方法是使用EdgeFactory类去自动操作生成连线。例如:

// this sets up the Nodes 
DefaultNode nodeA = new DefaultNode("A"); 
DefaultNode nodeB = new DefaultNode("B"); 
// creates a DefaultEdge and links nodeA to nodeB 
EdgeFactory.createEdge(nodeA, nodeB);

  这里 EdgeFactory 生成了一条缺省连线,并恰当地连接节点 A 和节点 B。EdgeFactory 也可以在连线生成之前,作为设置连线强度标签的方法。此外,你也可以提供你自己的连线执行类,并且 EdgeFactory 可以使用。例如:

// this sets up the Nodes 
DefaultNode nodeA = new DefaultNode("A"); 
DefaultNode nodeB = new DefaultNode("B"); 
// creates a DefaultEdge and links nodeA to nodeB 
EdgeFactory.linkNodes(nodeA, nodeB, new MyEdge());

  在这,EdgeFactory使用MyEdge来连接节点A到节点B。从APIdocs可以看到更多的关于EdgeFactory信息。

      一个节点能通过连线的连接涉及到另一个节点。例如:

   

// this sets up the Nodes 
DefaultNode nodeA = new DefaultNode("A"); 
DefaultNode nodeB = new DefaultNode("B"); 
EdgeFactory.createEdge(nodeA, nodeB); 
// set up is complete. The following shows 
// how to get a reference to nodeB given only 
// nodeA. 
ArrayList outEdges = nodeA.getOutEdges(); 
// we know there is only a single edge from nodeA 
// because we only added one. Typically you'd 
// iterate through or choose a specific edge based 
// on some criteria. 
DefaultEdge someEdge = (DefaultEdge)outEdges.get(0); 
// the getToNode() method returns a Node so we need to 
// cast to a DefaultNode. This someNode is in fact 
// nodeB. 
DefaultNode someNode = (DefaultNode)someEdge.getToNode(); 
// label = "B" 
String label = someNode.getLabel();

  DefaultNode也提供了许多便利的方法,可以象上述那样简短地编译一些东西。可以在DefaultNode's APIdocs中看到详细说明。例如:

// this sets up the Nodes 
DefaultNode nodeA = new DefaultNode("A"); 
DefaultNode nodeB = new DefaultNode("B"); 
// constructs a DefaultEdge from nodeA to nodeB 
// with a default strength of 1 
// nodeA --> nodeB 
DefaultEdge edge = new DefaultEdge(nodeA, nodeB); 
nodeA.addOutEdge(edge); 
nodeB.addInEdge(edge); 
// set up is complete. The following shows 
// how to get a reference to nodeB given only 
// nodeA. 
// we know there is only a single edge from nodeA 
// because we only added one, and thus only a single 
// ToNode. 
DefaultNode = (DefaultNode)nodeA.getToNodes().get(0); 
// label = "B" 
String label = someNode.getLabel();

  这里 getToNodes()方法允许我们从第一个例子中移去一些编码。DefaultNode包含许多这样的方法

  DefaultNode 提供许多网络类型功能你可能会需要。因此,通过继承或组合,你可以用这些 DefaultNodes 来组成你自己的主体。

  一个典型的网络模型将视网络节点为主体,并构建这些节点和一些必要的连线作为 buildModel()模板方法的一部分。例如:

public class MyModel extends SimModelImpl { 
ArrayList agentList = new ArrayList(); 
... 
private void buildModel() { 
// creates DefaultNodes and adds them to a list 
for (int i = 0; i < numAgents; i++) { 
DefaultNode node = new DefaultNode(String.valueOf(i)); 
agentList.add(node); 
} 
// iterate through the agentList creating edges between 
// the current node and the previous node. 
for (int i = 0; i < agentList.size(); i++) { 
Node node = (Node)agentList.get(i); 
Node prevNode = null; 
if (i == 0) { 
// current node is first node in list so 
// create an edge between it and the last node in 
// the list. 
prevNode = (Node)agentList.get(agentList.size() - 1); 
} else { 
prevNode = (Node)agentList.get(i - 1); 
} 
EdgeFactory.createEdge(node, prevNode); 
} 
} 
}

  这是初始网络结构怎样去构建的一个简单的例子。实际的网络模型将使用一些编码去生成和添加连线,但添加连线的规则不尽相同。节点与它们的连线一起组成一个网络,并且所有的节点放置在一个排序中。因此,这个排序代表了整个网络。许多在NetUtilities类中的方法运行在一个完整网络上,并且期望取得象一个自变量一样的节点排序。

posted @ 2014-12-25 15:32  Buller Lee  阅读(396)  评论(0)    收藏  举报