改进版的 setdest

2024-04-04 23:08
文章标签 改进版 setdest

本文主要是介绍改进版的 setdest,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ns自带setdest函数只能针对所有节点设置移动速度。如果我想让其中的10个节点移动速度较快,而另外40个节点较慢,自带的setdest就无能为力了。

为了克服这个问题,自己写了个setdest。贴上来大家一起讨论。
# ======================================================================
# default value
# ======================================================================
set opt(nn)        50        ;# number of normal nodes
set opt(fn)        0        ;# number of fast nodes
set opt(ns1)        1.0        ;# min speed of normal nodes
set opt(ns2)        3.0        ;# max speed of normal nodes
set opt(fs1)        20.0        ;# min speed of fast nodes
set opt(fs2)        30.0        ;# max speed of fast nodes
set opt(t)        300.0        ;# simulation time
set opt(x)        1000.0        ;# x dimension of space
set opt(y)        1000.0        ;# y dimension of space
set opt(seed)        1.0        ;# seed for random

# ======================================================================

proc getopt {argc argv} {        ;# get cmd line opt
    global opt
    for {set i 0} {$i < $argc} {incr i} {
        set arg [lindex $argv $i]
        if {[string range $arg 0 0] != "-"} continue

        set name [string range $arg 1 end]
        set opt($name) [lindex $argv [expr $i+1]]
    }
}

proc distance {x1 y1 x2 y2} {
    global d
    set x1 [expr $x1 - $x2 ]
    set x1 [expr pow($x1, 2) ]
    set y1 [expr $y1 - $y2 ]
    set y1 [expr pow($y1, 2) ]
    set x1 [expr $x1 + $x2 ]
    set x1 [expr pow($x1, 0.5) ]
    set d $x1
}

# ======================================================================

getopt $argc $argv

puts "#/n# normal nodes: $opt(nn), fast nodes: $opt(fn), speed: $opt(ns1)~$opt(ns2), fast speed: $opt(fs1)~$opt(fs2), time: $opt(t), x: $opt(x) y: $opt(y), seed:$opt(seed) /n#"


set rng [new RNG]
$rng seed $opt(seed)
set u [new RandomVariable/Uniform]

# 产生普通节点
for {set i 0} {$i < $opt(nn) } {incr i} {

    $u set min_ 0.000001
    $u set max_ $opt(x)
    $u use-rng $rng
    set x [$u value]    ;# x coordinate of node

    $u set min_ 0.000001
    $u set max_ $opt(y)
    $u use-rng $rng
    set y [$u value]    ;# y coordinate of node

    puts [format "/$node_(%d) set X_ %f" $i $x ]
    puts [format "/$node_(%d) set Y_ %f" $i $y ]
    puts [format "/$node_(%d) set Z_ 0.000000" $i ]

    set t 0.0

    while { $t < $opt(t) } {
        $u set min_ 0.000001
        $u set max_ $opt(x)
        $u use-rng $rng
        set xd [$u value]    ;# x coordinate of node

        $u set min_ 0.000001
        $u set max_ $opt(y)
        $u use-rng $rng
        set yd [$u value]    ;# y coordinate of node

        $u set min_ [expr $opt(ns1) + 0.000001 ]
        $u set max_ $opt(ns2)
        $u use-rng $rng
        set s [$u value]    ;# speed of node

        puts [format "/$ns_ at %f /"/$node_(%d) setdest %f %f %f/"" $t $i $xd $yd $s ]

        distance $x $y $xd $yd
        global d
        set t [expr $t + $d/$s]
    }
}

# 产生快速节点
for {set i $opt(nn)} {$i < [ expr $opt(nn) + $opt(fn) ] } {incr i} {

    $u set min_ 0.000001
    $u set max_ $opt(x)
    $u use-rng $rng
    set x [$u value]    ;# x coordinate of node

    $u set min_ 0.000001
    $u set max_ $opt(y)
    $u use-rng $rng
    set y [$u value]    ;# y coordinate of node

    puts [format "/$node_(%d) set X_ %f" $i $x ]
    puts [format "/$node_(%d) set Y_ %f" $i $y ]
    puts [format "/$node_(%d) set Z_ 0.000000" $i ]
    puts [format "/$node_(%d) set nodeType_ 1" $i ]

    set t 0.0

    while { $t < $opt(t) } {
        $u set min_ 0.000001
        $u set max_ $opt(x)
        $u use-rng $rng
        set xd [$u value]    ;# x coordinate of node

        $u set min_ 0.000001
        $u set max_ $opt(y)
        $u use-rng $rng
        set yd [$u value]    ;# y coordinate of node

        $u set min_ [expr $opt(fs1) + 0.000001 ]
        $u set max_ $opt(fs2)
        $u use-rng $rng
        set s [$u value]    ;# speed of node

        puts [format "/$ns_ at %f /"/$node_(%d) setdest %f %f %f/"" $t $i $xd $yd $s ]

        distance $x $y $xd $yd
        global d
        set t [expr $t + $d/$s]
    }
}



下面是我习惯使用的批量产生场景的脚本:
#!/bin/sh

#====================================================================================

i=0;
while [ $i -le 15 ]
do
    j=`expr 50 - $i`
    echo generating secen $i/15
    ns my-setdest.tcl -nn $j -fn $i -ns1 1 -ns2 3 -fs1 20 -fs2 30 -t 300 -x 1000 -y 1000 > scene-${j}n-${i}f-300t-1000-1000
    i=`expr $i + 1`
done

 

转自:http://blog.baisi.net/?110511/viewspace-1261

这篇关于改进版的 setdest的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877052

相关文章

Python爬虫-贝壳二手房“改进版”

前言 本文是该专栏的第31篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前的文章《Python爬虫-贝壳二手房》中,笔者有详细介绍,基于python爬虫采集对应城市的二手房数据。 而在本文,笔者将基于该项目案例的基础上,进行一个项目代码的“改进版”。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。废话不多说,跟着笔者直接往下看正文详细内容。(附带完

详解FedProx:FedAvg的改进版 Federated optimization in heterogeneous networks

FedProx:2020 FedAvg的改进 论文:《Federated Optimization in Heterogeneous Networks》 引用量:4445 源码地址: 官方实现(tensorflow)https://github.com/litian96/FedProx 几个pytorch实现:https://github.com/ki-ljl/FedProx-PyTorch ,

android Listview分批加载+自动加载(改进版)(附源码下载)

这次在代码上比上一次改进了一些,并且加载完全部数据后会在lisview底部显示一个“已加载全部“的textview。大家可以对比我的上一篇博客 android Listview分批加载+自动加载(附源码下载)看看代码有啥不同 直接上代码: public class TestForListviewActivity extends Activity implementsOnScroll

关于怎么用Cubemx生成的USBHID设备实现读取一体的鼠标键盘设备(改进版)

主要最近做了一个要用STM32实现读取鼠标键盘一体的那种USB设备,STM32的界面上要和电脑一样的能通过这个USB接口实现鼠标移动,键盘的按键。然后我就很自然的去参考了正点原子的例程,可是找了一圈,发现正点原子好像用的库函数,还是自己实现的,然后看了半天都看晕了,感觉自己实现不了,然后就主攻Cubemx实现的USB设备读取了。 在网上找了一圈,终于让我发现了一个可以用的博主的,而且实现了USB

JAVA——实现字符流的练习之复制Java文件改进版

* 字符流的练习之复制Java文件改进版  *   * InputStreamReader --> FileReader  * OutputStreamWriter --> FileWriter  *   *   * FileReader : 字符输入流  *         public FileReader(String fileName) :   *   * FileWriter : 字符输

第十一周项目五:当年第几天(改进版)

问题及代码: /**Copyright (c) 2014,烟台大学计算机学院*ALL right reserved*文件名;当年第几天.cpp*作者;童宇*完成日期2014年11月11*版本号v1.0*问题描述:输入一个年月日,输出这一天为该年的第几天。*输入描述:输入一个年月日。*程序输出:输出这一天为该年的第几天。*/#include <iostream>using

sqlites数据库读取,仅适用于数据少的数据库查询【改进版】

直接使用运行程序时加入数据库名和表明,直接完成查询 如:编译后的可执行程序为test,则在命令行输入 ./test test.db name 代码如下: #include <stdio.h>#include <sqlite3.h>static int callback(void *data, int argc, char **argv, char **azColName) {int

C语言钟表【改进版】

改进版源代码: #include<stdio.h>#include<graphics.h>#include<math.h>#include<dos.h>#define PI 3.1415926#define x 320#define y 240int main(){ int gdriver = DETECT,gmode,i,l; float th_hour,th_min,th_sec,m,n,

c语言扫雷改进版

目录 文章目录 主体 整体架构流程 技术名词解释 技术细节 测试情况   文章目录 概要整体架构流程技术名词解释技术细节测试情况   主体  主体包括菜单,游戏规则简绍,选择进行与否 int main(){int input;srand((unsigned int)time(NULL));do{ menu();scanf("%d", &input);switc

C++ 小鱼的航程(改进版)

文章目录 一、题目描述小鱼的航程(改进版)题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 二、参考代码 一、题目描述 小鱼的航程(改进版) 题目背景 题目描述 有一只小鱼,它平日每天游泳 250 250 250 公里,周末休息(实行双休日),假设从周 x x x 开始算起,过了 n n n 天以后,小鱼一共累计游泳了多少公里呢? 输