【问题标题】:Importing link breed in netlogo using nw:load-graphml使用 nw:load-graphml 在 netlogo 中导入链接品种
【发布时间】:2019-01-21 22:45:31
【问题描述】:

如何让 NetLogo 在导入 graphml 文件时识别链接品种?

我在 graphml 文件中指定了品种属性,并在 NetLogo 中命名了品种。当使用nw:load-graphml 导入NetLogo 时,我相信NetLogo 应该通过读取graphml 文件中的breed 属性将breed 分配给links。如NetLogo documentation中所述:

...nw:load-graphml 将尝试将 GraphML 文件中定义的属性值分配给同名的 NetLogo 代理变量(这不区分大小写)。它尝试设置的第一个是breed(如果存在),因此海龟或链接将获得正确的品种,从而获得正确的品种变量。

然而,尽管在 NetLogo 和 graphml 文件中指定了链接品种,链接在导入时被分配了通用的“链接”品种。

graphml 文件示例:

<?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">
  <key id="v_name" for="node" attr.name="name" attr.type="string"/>
  <key id="e_breed" for="edge" attr.name="breed" attr.type="string"/>
  <graph id="G" edgedefault="undirected">
    <node id="n0">
      <data key="v_name">1</data>
    </node>
    <node id="n1">
      <data key="v_name">2</data>
    </node>
    <node id="n2">
      <data key="v_name">3</data>
    </node>
    <node id="n3">
      <data key="v_name">4</data>
    </node>
    <node id="n4">
      <data key="v_name">5</data>
    </node>
    <edge source="n1" target="n2">
      <data key="e_breed">ftf-tie</data>
    </edge>
    <edge source="n0" target="n3">
      <data key="e_breed">ftf-tie</data>
    </edge>
    <edge source="n0" target="n4">
      <data key="e_breed">ftf-tie</data>
    </edge>
    <edge source="n1" target="n4">
      <data key="e_breed">ftf-tie</data>
    </edge>
    <edge source="n1" target="n4">
      <data key="e_breed">sns-tie</data>
    </edge>
  </graph>
</graphml>

NetLogo 导入代码:

extensions [ nw ]

undirected-link-breed [ ftf-ties ftf-tie ]
undirected-link-breed [ sns-ties sns-tie ]

to setup
  clear-all
  nw:load-graphml "test.graphml"
  repeat 30 [ layout-spring turtles links 0.2 5 1 ]
end

谢谢!

【问题讨论】:

  • 您的链接品种是否具有相同数量的变量?您可以使用声明 set breed &lt;new-breed&gt; 更改品种,但如果品种具有不同的变量集,这将无济于事。可能您需要做一些丑陋的事情,例如在 graphml 中读取通用链接品种并具有诸如“var1”、“var2”之类的变量。阅读后,您可以同时更改品种和属性变量。
  • @JenB 值得庆幸的是,所有链接品种都具有相同的变量!我一直无法阅读非繁殖链接,然后是set breed &lt;link-breed&gt;,因为 NetLogo 不允许在同一个世界中出现繁殖和非繁殖链接。我错过了什么吗?
  • 更新:在文件中从单数更改为复数(例如,从 ftf-tieftf-ties)解决了这个问题。见:github.com/NetLogo/NW-Extension/issues/189

标签: netlogo graphml


【解决方案1】:

在 graphml 文件中从单一品种更改为复数品种(例如,从 ftf-tieftf-ties)完全解决了这个问题。

见:https://github.com/NetLogo/NW-Extension/issues/189

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多