1

我看过这里:示例代码 说明

带有矢量地图数据的 NetLogo 项目

我正在使用矢量地图,道路在哪里。然后我在道路所在的地方绘制链接。在起点所在的图像中,那是拉脱维亚的首都(里加)。左侧是文茨皮尔斯市,女巫距离里加约200公里。到顶部是拉脱维亚/爱沙尼亚边境,也大约 200 公里。到底部约100公里。

我想要的是计算我需要在哪里放置汽车充电站。普通的绿色汽车可以在充满电的情况下行驶 50 公里。所以。我知道到文茨皮尔斯大约有 200 公里。在那条路上我们需要 4 个充电站。

Idea No 1 是从起点到各个方向的充电站每隔 50 公里。(图片上的树符号)。此时充电站(树)我放置在随机位置:

to setup-stacijas
  set-default-shape boats "tree"
  create-boats num-boats [
    set speed 0 ; min-speed + random-float (max-speed - min-speed)
    let l one-of links
    set size 18
    set-next-stacija-link l [end1] of l
  ]
end 

to set-next-stacija-link [l n] ;; boat proc
  set cur-link l
  move-to n
  ifelse n = [end1] of l [set to-node [end2] of l] [set to-node [end1] of l]
  face to-node
end

问题:

我如何计算到各个方向的距离 xx 公里?

带有链接和随机充电站的矢量图

4

1 回答 1

1

代理(补丁或海龟)可以使用 DISTANCE 原语和 MOD 运算符来查找其他 50“英里”以外的代理。

我假设在我们的模拟中 1 个补丁 = 1 英里。
我假设“链接”连接到品种“节点”的海龟。
我假设 START 是一个包含“节点”的变量。

;; get all nodes that are multiples of 50 miles from start
let stations no-turtles
ask start [ set stations nodes with [ (floor distance myself) MOD 50 = 0 ]

由于许多原因,这并不完美。

  • 它假定所有链接的长度为 1 个单位或更短。
  • 跨越或沿 50 英里的弧线的道路都将包括在内,因此它们都将有车站。
  • 其他我没有想到的奇怪的东西。

其他一些迭代方法建议自己:

  1. 在道路上设置“旅行者”,每 50 英里(左右)“放下”充电站。

    • 在十字路口,旅行者分成新的旅行者前往每个分支
    • 当旅行者遇到旅行者时,如果每个旅行者到其最后一个“车站”的总距离超过 50 英里,则创建一个车站。无论如何,两个旅行者都会死。
    • 当一个旅行者发现一个现有的车站时,它就死了。

    这样,所有的道路都将设置车站。

  2. 用六角网格填充补丁,半径为 25 英里或几英里。让他们迁移。

    • 使不在道路上的车站向最近的道路移动。
    • 一个所有车站都找到了一条道路,使车站远离<50英里外的车站,沿着道路移动(通过远离地图中心来打破平局)。
    • 撞到边缘的车站将“脱落”(死亡)
    • 所以,车站会自己间隔开,额外的车站会从地图的边缘掉下来。

    这可能真的有效。

  3. 站满,然后销毁,直到只有足够的空间

    • 在每英里的道路上创建一个车站。
    • 选一站
    • ## 要求 49 英里半径内的所有其他站点死亡 - 标记它
    • 选择 50 英里外的车站之一。
    • 从 ## 开始重复,直到所有电台都被标记。

    那一个可能不是最佳的。

  4. 在您的道路上模拟汽车——在它们死亡的地方创建车站。

    • 将汽车随机上路(从城市开始)。汽车在需要充电之前可以行驶大约 50 英里(死亡)
    • 没有车站
    • 模拟汽车在道路上随机行驶。
    • 当汽车撞到车站时,它会充满电
    • 如果汽车没电了,它就会死掉,并且该补丁/节点/位置的计数器会增加
    • 重复
    • 当补丁中的计数器超过某个值时,在此处放置一个站点。
    • 创建站点时,半径 50 英里内的所有补丁的计数器都会减少 - 最接近站点的值为 0,最远的值为 0,以渐变的方式。

    最终,站点将在需要的地方弹出。这个会很有趣。

~~詹姆斯

于 2013-02-04T21:26:31.193 回答