如何加载带有 Netlogo NW 扩展名的 graphml 文件
How to load a graphml file with Netlogo NW extension
我认为 nw:load-graphml 的工作方式存在错误。
使用此 graphml 文件,其中包含 3 个节点和 3 个无向类型的链接 "parentals" 和 2 个有向类型的链接 "diffusions" :
<?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 加载文件时,会创建所有 "parentals" 个链接,而 "diffusions" 仅部分创建:仅 "diffusions" 个链接涉及尚未通过父母链接链接的节点被创建,而其他节点被跳过...这是 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 代码中,"diffusion" 链接是定向的。将 directed = "true" 属性添加到 prova.graphml 文件中的扩散链接:
<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?
记者为每个 "directed" 链接面包,还计算链接并比较预期的链接数。
我认为 nw:load-graphml 的工作方式存在错误。
使用此 graphml 文件,其中包含 3 个节点和 3 个无向类型的链接 "parentals" 和 2 个有向类型的链接 "diffusions" :
<?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 加载文件时,会创建所有 "parentals" 个链接,而 "diffusions" 仅部分创建:仅 "diffusions" 个链接涉及尚未通过父母链接链接的节点被创建,而其他节点被跳过...这是 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 代码中,"diffusion" 链接是定向的。将 directed = "true" 属性添加到 prova.graphml 文件中的扩散链接:
<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?
记者为每个 "directed" 链接面包,还计算链接并比较预期的链接数。