zoukankan      html  css  js  c++  java
  • NS Simulation: Scheduling Events (examples inside)

    NS Simulation: Scheduling Events



    • Simulation time
      • A similation system (such as NS) must have a built-in simulation clock - it represents the "clock" in the real world.
      • You can examine (read) the value of the simulation clock by using the now command in the Simulator class
      • Example::
          set  ns  [new Simulator]
        
          $ns  now   // Returns the current simulation time   
        


    • Events
      • An event is an action made by a simulation entity
      • An event (action) in a simulation is represented a OTcl command !!!
      • Each event happens at a certain time and therefore, each event has an associated event time which is the time when the event will happen
      • In simulation, events are scheduled (to happen at some future time)
      • To schedule an event, use the at command in the Simulator class
      • Example::
          set  ns  [new Simulator]
        
          $ns  at  1.0  {puts "Point 1: Now = [$ns now]"}  
          $ns  at  8.0  {puts "Point 2: Now = [$ns now]"}
          $ns  at  4.0  {puts "Point 3: Now = [$ns now]"}
        
          $ns run  // Run simulation !
        
      • You will see the following output:
          Point 1: Now = 1
          Point 3: Now = 4      
          Point 2: Now = 8
        
        

        Notice that Point 3 happens before Point 2

      • This is what is happening:
          set  ns  [new Simulator]
        
          $ns  at  1.0  {puts "Point 1: ..."}  // Schedule event at time 1.0   
          $ns  at  8.0  {puts "Point 2: ..."}  // Schedule event at time 8.0   
          $ns  at  4.0  {puts "Point 3: ..."}  // Schedule event at time 4.0   
        
          $ns run  // Run simulation !
        

        So when the simulation is run, the events are "fired" in chronological order



    • Running the NS simulation
      • The run command in the Simulation class is used to run the network simuation.
      • Example:
            set  ns  [new Simulator]
        
            ... (set up simulation network)
        
            $ns run  // run simulation       
        


    • Stopping an NS simulation
      • There is no "stop" command available.
      • To stop a running simulation, you must schedule a termination command before you start running the simulation.
      • The termination command is usually a Tcl procedure (to wrap up things)
      • Example:
            set  ns  [new Simulator]
        
            #Define the 'finish' procedure
            proc finish {} {
               exit 0
            }
        
        
            ... (set up simulation network)
        
            
            #Set simulation end time
            $ns at 100.0 "finish"
        
            $ns run           // run simulation       
        



    • A simple simulation....
      • To give you a taste of simulation, here is a NS script that simulates 2 person "talking" to each other:
          proc person1 {x} {
            global ns
        
            puts "Person 1:"
            puts " Hey, $x, time is [$ns now], it's your turn to say something"    
        
            $ns  at  [expr [$ns now] + 0.4]  "$x person1"
          }
        
          proc person2 {x} {
            global ns
        
            puts "Person 2:"
            puts " Hey, $x, time is [$ns now], it's your turn to say something"
        
            $ns  at  [expr [$ns now] + 0.6]  "$x person2"
          }
        
          set  ns  [new Simulator]
        
          $ns  at  0  "person1 person2"
        
          $ns  at  4.5  "exit 0"
        
          $ns run
        
        

      • Example Program: (Demo above code)                                                
      • Output when you run this simulation:
        Person 1:
         Hey, person2, time is 0, it's your turn to say something
        Person 2:
         Hey, person1, time is 0.4, it's your turn to say something  
        Person 1:
         Hey, person2, time is 1, it's your turn to say something
        Person 2:
         Hey, person1, time is 1.4, it's your turn to say something
        Person 1:
         Hey, person2, time is 2, it's your turn to say something
        Person 2:
         Hey, person1, time is 2.4, it's your turn to say something
        Person 1:
         Hey, person2, time is 3, it's your turn to say something
        Person 2:
         Hey, person1, time is 3.4, it's your turn to say something
        Person 1:
         Hey, person2, time is 4, it's your turn to say something
        Person 2:
         Hey, person1, time is 4.4, it's your turn to say something     
        



    • Example NS Simulation Script
      • We will construct an NS simulation script that simulate the following network:
      • The following figure is a break down of the NS components that make up the above network:
      • Here is the NS (OTcl) Script that creates the above simulation:
          #Make a NS simulator   
          set ns [new Simulator]	
        
          # Define a 'finish' procedure
          proc finish {} {
             exit 0
          }
        
          # Create the nodes:
          set n0 [$ns node]
          set n1 [$ns node]
          set n2 [$ns node]
          set n3 [$ns node]
          set n4 [$ns node]
          set n5 [$ns node]
        
          # Create the links:
          $ns duplex-link $n0 $n2   2Mb  10ms DropTail
          $ns duplex-link $n1 $n2   2Mb  10ms DropTail
          $ns duplex-link $n2 $n3 0.3Mb 200ms DropTail
          $ns duplex-link $n3 $n4 0.5Mb  40ms DropTail
          $ns duplex-link $n3 $n5 0.5Mb  30ms DropTail
        
          # Add a TCP sending module to node n0
          set tcp1 [new Agent/TCP/Reno]
          $ns attach-agent $n0 $tcp1
        
          # Add a TCP receiving module to node n4
          set sink1 [new Agent/TCPSink]
          $ns attach-agent $n4 $sink1
        
          # Direct traffic from "tcp1" to "sink1"
          $ns connect $tcp1 $sink1
        
          # Setup a FTP traffic generator on "tcp1"
          set ftp1 [new Application/FTP]
          $ftp1 attach-agent $tcp1
          $ftp1 set type_ FTP               (no necessary)
        
          # Schedule start/stop times
          $ns at 0.1   "$ftp1 start"
          $ns at 100.0 "$ftp1 stop"
        
          # Set simulation end time
          $ns at 125.0 "finish"		    (Will invoke "exit 0")   
        
          # Run simulation !!!!
          $ns run
        
        

      • Example Program: (Demo above code)                                                


    • Problems with the above simulation
      • It simulates alright...
      • But without producing any data that we can examine !!!
      • What we still need to learn is how to add commands in the simulation program to output state variables that we are interested in !!!

     http://www.mathcs.emory.edu/~cheung/Courses/558-old/Syllabus/90-NS/2-NS-Prog/events.html






  • 相关阅读:
    电路维修 (广搜变形-双端队列bfs)
    靶形数独 (dfs+预处理+状态压缩)
    埃及分数问题(带乐观估计函数的迭代加深搜索算法-IDA*)
    weight (搜索对象的选取)
    Codeforces Round #506 (Div. 3)
    生日蛋糕 (poj1190) (dfs剪枝)
    校内模拟赛题面
    NOIP2013 D1T3 货车运输 zz耻辱记
    NOIP2011 D2T3 观光公交 做题笔记
    ARC 103
  • 原文地址:https://www.cnblogs.com/forcheryl/p/4053022.html
Copyright © 2011-2022 走看看