来自Omnet ++网络的柠檬图
我想从omnet ++中提取网络图并将节点和链接的信息提供给柠檬图。问题的一部分很容易处理。使用代码:来自Omnet ++网络的柠檬图
cTopology *topo = new cTopology("topo");
std::vector<std::string> nedTypes;
nedTypes.push_back("inet.node.inet.StandardHost");
topo->extractByNedTypeName(nedTypes);
int numNodes = topo->getNumNodes();
EV << "cTopology found " << topo->getNumNodes() << " nodes\n";
ListDigraph g;
ListDigraph::NodeMap<std::string> nodeName(g);
for (ListDigraph::NodeIt n(g); n != INVALID; ++n)
{
int i = 0;//counter
int numOutLinks = topo->getNode(i)->getNumOutLinks();
g.addNode();
std::vector<std::string> nodeList;
nodeName[n] = topo->getNode(i)->getModule()->getName();
nodeList.push_back(nodeName[n]);
for(int j = 0; j<numOutLinks; j++)
{
cTopology::LinkOut* lOut = topo->getNode(i)->getLinkOut(j);
cTopology::Node *rNode = lOut->getRemoteNode();
for (auto& nlist : nodeList)
{
auto nodeFound = std::find(std::begin(nlist), std::end(nlist), rNode);
if(nodeFound != std::end(nlist)){
g.addNode();
g.addArc(g.nodeFromId(i), g.nodeFromId(i+1));
}
}
} i++;
不知怎的,我得到的节点列表,现在我想获得的链接信息,以及。也就是说,节点以及它们之间的链接也是如此。我如何获取链接信息并将其提供给柠檬图,以及我在代码中使用的方法有哪些错误?
方法extractByNedTypeName()
需要完全合格的NED类型名称,即包括该包。在INET
的StandardHost
通常在包装inet.node.inet
,因此,你应该写:
nedTypes.push_back("inet.node.inet.StandardHost");
编辑
循环for (ListDigraph::NodeIt n(g); n != INVALID; ++n)
,因为图g
已经刚刚创建永远不会执行,它是空的。外环应该是这样的:for(int j = 0; j<numOutLinks; j++)
。
EDIT2
由于缺乏find
为NodeMap
一个有写自己的功能,例如:
ListDigraph::NodeIt::Node findNodeMap(const ListDigraph::NodeMap<std::string> & map, const ListDigraph & g,
std::string txt) {
ListDigraph::NodeIt it(g);
for (; it != INVALID; ++it) {
if (map[it] == txt)
break;
}
return it;
}
使用它的一个例子:
ListDigraph::NodeMap<std::string> nodeName(g);
// ... filling nodeName
std::string str = "node1";
ListDigraph::NodeIt::Node node = findNodeMap(nodeName, g, str);
if (node != INVALID) {
// node with name from str was found
}
哦,你是对的! –
但同时我也希望提取链接。我通过解析节点列表并检查其远程节点(如果有)并将其添加到Lemon Graph(使用g.addarc(u,v))来试用代码,但仍然无效。一些提示会很好。 –
你能解释一下你写的“无效”是什么意思?是否有编译时或运行时错误? 'extractByNedTypeName()'方法是否可以识别您所期望的所有节点?你使用哪种类型的网络 - 有线还是无线? –
什么是这里的问题? – user4786271
如何提取链接信息并将其提供给空图“ListGraph g;”与相应的节点?基本上我试图提取给定网络的拓扑结构,然后将这些信息提供给柠檬库图。 –