The ONE使用笔记:批量添加静态节点

本文介绍如何在The ONE仿真器批量添加静态节点,方法是将MapRouterMovement的路径设成两个相同的坐标,这样节点就移动了。

1. StationaryMovement

利用The ONE的StationaryMovement移动模型,可以设置固定的节点,如下:

Group2.groupID = B
Group2.nrofHosts = 1
Group2.movementModel = StationaryMovement
Group2.nodeLocation = 216,0

但这种方法一次只能设置一个节点坐标,如果需要批量设置很多不同坐标的节点,创建很多Group显然不现实。

2. 批量添加静态节点

使用MapRouterMovement,将移动路径设成两个相同的坐标,这样就达到了点不移动的目的,从而可以批量添加静态节点。routeFile举例如下:

LINESTRING (100 100, 100.0 100.0)  # 起点和终点的坐标一样
LINESTRING (200 200, 200.0 200.0)
LINESTRING (300 300, 300.0 300.0)
LINESTRING (400 400, 400.0 400.0)
LINESTRING (500 500, 500.0 500.0)

设置文件如下:

Group4.groupID = b
Group4.movementModel = MapRouteMovement # MapRouteMovement
Group4.routeFile = path/routFile.wkt    # routeFile
Group4.routeType = 2
Group4.nrofHosts = 5
Group4.waitTime = 0, 0
Group4.speed = 0, 0

另外,别忘了,将上述坐标做成mapFile,否则会提示地图不连通,相关内容如下:

# 设置文件
MapBasedMovement.nrofMapFiles = 1
MapBasedMovement.mapFile1 = path/mapFile.wkt

# mapFile.wkt
LINESTRING (100 100, 200.0 200.0, 300 300, 400 400, 500.0 500.0)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

24 thoughts on “The ONE使用笔记:批量添加静态节点

  • 2016年04月16日 星期六 at 04:25下午
    Permalink

    https://github.com/knightcode/the-one-pitt。这篇链接里面的代码的确有bug,修改之后可以仿真,但不知道为什么relayed竟然和delivered大小始终相同,导致没有路由负载率的数据,求帮助。这是仿真时间18700s结果:
    Message stats for scenario default1
    sim_time: 18700.7000
    created: 633 started: 298 relayed: 298 aborted: 0 dropped: 25 removed: 0 delivered: 298 传输成功率: 0.4708 response_prob: 0.0000 路由负载率: Infinity
    latency_avg: 4572.1289 latency_med: 3912.2000 hopcount_avg: 1.0000 hopcount_med: 1 buffertime_avg: 17965.6720 buffertime_med: 17968.6000 rtt_avg: NaN rtt_med: NaN

    Reply
  • 2016年04月16日 星期六 at 04:14下午
    Permalink

    https://github.com/knightcode/the-one-pitt。这篇链接里面的代码的确有bug,修改之后可以仿真,但始终没有路由负载率的数据。但是MessageStatsReport里面负载定义没有错,求帮助。
    Message stats for scenario default1
    sim_time: 1531.4000
    created: 53 started: 467 relayed: 460 aborted: 7 dropped: 0 removed: 0 delivered: 10 传输成功率: 0.6124 response_prob: 路由负载率:
    latency_avg: 504.3600 latency_med: 490.4000 hopcount_avg: 2.6000 hopcount_med: 3 buffertime_avg: NaN buffertime_med: NaN rtt_avg: NaN rtt_med: NaN

    Reply
  • 2016年03月10日 星期四 at 07:59下午
    Permalink

    你好,朋友!你说怎么样在仿真区域内划分几个社区呢?

    Reply
  • Pingback: The ONE使用笔记:目录 | | Spark & Shine

  • 2015年11月05日 星期四 at 07:44下午
    Permalink

    我直接将StationaryMovement改写了
    private static final ArrayList hostAddress=new ArrayList();

    public StationaryMovement(Settings s) {
    super(s);
    this.loc = new Coord(0,0);
    int[] locs=s.getCsvInts(LOCATION_S);
    for(int i=0;i<locs.length;i++)
    hostAddress.add(locs[i]);
    }

    public Coord getInitialLocation() {
    int index=this.host.getAddress()*2;
    int x=hostAddress.get(index);
    int y=hostAddress.get(index+1);
    this.loc = new Coord(x,y);
    return loc;
    }
    配置文件直接
    Group1.nrofHosts = 5
    Group1.nodeLocation = 2071,1287,1000,2000,1300,2400,1600,2800,800,2000
    节点配置是没问题,其他问题暂时没看到

    Reply
    • 2015年11月06日 星期五 at 07:58上午
      Permalink

      没懂你的问题。你确定你的问题是完整的?

      Reply
      • 2015年11月09日 星期一 at 09:31下午
        Permalink

        我只是想分享方法,然后发现回复有篇幅限制。我想说直接修改StationaryMovement也能达到批量添加静态节点

      • 2017年03月05日 星期日 at 12:10上午
        Permalink

        您好,可以分享一下代码吗?527477576@qq.com,谢谢您

    • 2016年02月26日 星期五 at 09:02下午
      Permalink

      完整代码勒

      Reply
      • 2016年02月26日 星期五 at 09:18下午
        Permalink

        你还想怎么完整?

        博文都已经结合例子(包括坐标怎么设置,设置文件怎么配置)给出如何批量设置静态结点了。

      • 2016年02月26日 星期五 at 09:24下午
        Permalink

        我指修改StationaryMovement的方法的具体代码,我的场景是randomwaypoint,没有按地图走的,博文里的方法我弄出问题了额

      • 2016年02月26日 星期五 at 09:30下午
        Permalink

        建议你联系@角鸮,修改StationaryMovement是他的方法。

      • 2016年02月26日 星期五 at 09:27下午
        Permalink

        现在做仿真遇到点问题,希望得到您的指教额,不知您什么时候有空啊

    • 2017年12月25日 星期一 at 04:19下午
      Permalink

      您好,请问能分享一下您修改stationary movement后的全部代码吗,我按照您的提示修改了一下发现会有异常,查了一下大概是数组越界的问题但是没有修改好,刚刚接触这方面而且毕业论文要用到,希望您能发一下源码,谢谢您!

      Reply
    • 2015年10月15日 星期四 at 04:29上午
      Permalink

      是的,default_settings.txt定义的worldSize是用米,如下:

      # World’s size for Movement Models without implicit size (width, height; meters)
      MovementModel.worldSize = 4500, 3400

      Reply
    • 2015年05月05日 星期二 at 05:38上午
      Permalink

      there must be something wrong with your settings file.I received your wechat messages and knew what is going on.The following lines should be grouped into a single file, which is named “mapFile.wkt”, instead of putting anything in your settings file. How cute you are!#mapFile.wktLINESTRING (100 100, 200.0 200.0, 300 300, 400 400, 500.0 500.0)

      Reply
      • 2015年05月07日 星期四 at 03:48下午
        Permalink

        把routeFile 、mapFile 分别都放在DATA文件夹里面,运行之后还是报错,也是提示地图不连通,完全不知道为什么如果只有一个MapBasedMovement.mapFile的话,静态节点是可以出来,但是不知道为什么要是加入了one本身自带的MapBasedMovement.mapFile文件之后就会报错,说地图不连通

      • 2015年05月07日 星期四 at 05:09下午
        Permalink

        我也是醉了。出错的原因已经很清楚了:地图不连通。LINESTRING (100 100, 200.0 200.0, 300 300, 400 400, 500.0 500.0)相当于一条新的path,这里面的坐标没有一个是跟其他mapFile是重叠的,也就是说该path没有接入之前的交通网,而仿真器要求map是连通的。不晓得,你这样做的意义是什么?

  • Pingback: 请教The ONE仿真器相关的一些问题 | Spark & Shine