我认为nw:load-graphml的工作方式存在错误。
采取这个graphml文件,其中包含3个节点和3个非定向品种“父母”的链接和2个定向品种“扩散”的链接:
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<!-- Created by igraph -->
<key id="e_breed" for="edge" attr.name="breed" attr.type="string"/>
<graph id="G" edgedefault="undirected">
<node id="n0">
</node>
<node id="n1">
</node>
<node id="n2">
</node>
<edge source="n0" target="n1">
<data key="e_breed">parentals</data>
</edge>
<edge source="n0" target="n2">
<data key="e_breed">parentals</data>
</edge>
<edge source="n1" target="n2">
<data key="e_breed">diffusions</data>
</edge>
<edge source="n0" target="n1">
<data key="e_breed">diffusions</data>
</edge>
</graph>
</graphml>
当使用nw:load-graphml加载文件时,会发生的是创建了所有“父母”链接,而仅部分创建了“扩散”链接:仅创建了涉及尚未由父母链接链接的节点的“扩散”链接,而其他的都被跳过了...这是load-graphml原语中的错误还是预期的行为?
这是一个简短的网络徽标代码,用于演示:
extensions [nw]
undirected-link-breed [parentals parental]
directed-link-breed [diffusions diffusion]
to setup
ca
nw:load-graphml "prova.graphml"
layout-circle turtles 10
end
最佳答案
在您的NetLogo代码中,指向“扩散”链接。在prova.graphml文件的扩散链接中添加directed =“ true”属性:
<edge source="n0" target="n1">
<data key="e_breed">parentals</data>
</edge>
<edge source="n0" target="n2">
<data key="e_breed">parentals</data>
</edge>
<edge directed="true" source="n1" target="n2">
<data key="e_breed">diffusions</data>
</edge>
<edge directed="true" source="n0" target="n1">
<data key="e_breed">diffusions</data>
</edge>
我尝试了更正的文件,我认为链接现在可以了:
ask links [show self]
结果:
(diffusion 2 1): (diffusion 2 1)
(diffusion 0 2): (diffusion 0 2)
(parental 0 1): (parental 0 1)
(parental 0 2): (parental 0 2)
编辑:
在当前版本的NW扩展中,
load-graphml
函数中有一些open issues。我认为在导入文件以检查链接的一致性之后添加一些验证是个好主意。也许与is-directed-link?
记者一起为每个“定向”链接面包做准备,并计算链接数并比较预期的链接数。关于netlogo - 如何使用Netlogo NW扩展名加载graphml文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28517208/