亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ns-leach.tcl

?? 對(duì)于LEACH協(xié)議閾值修改進(jìn)行的改進(jìn)
?? TCL
?? 第 1 頁 / 共 2 頁
字號(hào):
############################################################################
#
# This code was developed as part of the MIT uAMPS project. (June, 2000)
#
############################################################################


# Message Constants
set ADV_CH         0
set JOIN_REQ       1
set ADV_SCH        2
set DATA           3
set MAC_BROADCAST  0xffffffff
set LINK_BROADCAST 0xffffffff
set BYTES_ID       2


############################################################################
#
# LEACH Application
#
############################################################################

Class Application/LEACH -superclass Application


Application/LEACH instproc init args {

  global opt

  $self instvar rng_ isch_ hasbeench_ next_change_time_ round_
  $self instvar clusterChoices_ clusterDist_ clusterNodes_ currentCH_ 
  $self instvar xmitTime_ TDMAschedule_ dist_ code_
  $self instvar now_ alive_ frame_time_ end_frm_time_
  $self instvar begin_idle_ begin_sleep_
  $self instvar myADVnum_ receivedFrom_ dataReceived_

  set rng_ [new RNG]
  $rng_ seed 0
  set isch_ 0
  set hasbeench_ 0
  set next_change_time_ 0
  set round_ 0
  set clusterChoices_ ""
  set clusterDist_ ""
  set clusterNodes_ ""
  set currentCH_ ""
  set xmitTime_ ""
  set TDMAschedule_ ""
  set dist_ 0
  set code_ 0
  set now_ 0
  set alive_ 1
  set frame_time_ $opt(frame_time)
  set end_frm_time_ 0
  set begin_idle_ 0
  set begin_sleep_ 0
  set myADVnum_ 0
  set receivedFrom_ ""
  set dataReceived_ ""

  $self next $args

}

Application/LEACH instproc start {} {
  [$self mac] set node_num_ [$self nodeID]
  $self decideClusterHead
  $self checkAlive 
}


############################################################################
#
# Helper Functions
#
############################################################################

Application/LEACH instproc getRandomNumber {llim ulim} {
  $self instvar rng_
  return [$rng_ uniform $llim $ulim]
}

Application/LEACH instproc node {} {
  return [[$self agent] set node_]
}

Application/LEACH instproc nodeID {} {
  return [[$self node] id]
}

Application/LEACH instproc mac {} {
  return [[$self node] set mac_(0)]
}

Application/LEACH instproc getX {} {
  return [[$self node] set X_]
}

Application/LEACH instproc getY {} {
  return [[$self node] set Y_]
}

Application/LEACH instproc getER {} {
  set er [[$self node] getER]
  return $er
}

Application/LEACH instproc GoToSleep {} {
  global opt ns_
  $self instvar begin_idle_ begin_sleep_

  [[$self node] set netif_(0)] set sleep_ 1
  # If node has been awake, remove idle energy (e.g., the amount of energy
  # dissipated while the node is in the idle state).  Otherwise, the node
  # has been asleep and must remove sleep energy (e.g., the amount of
  # energy dissipated while the node is in the sleep state).
  if {$begin_idle_ > $begin_sleep_} {
    set idle_energy [expr $opt(Pidle) * [expr [$ns_ now] - $begin_idle_]]
    [$self getER] remove $idle_energy
  } else {
    set sleep_energy [expr $opt(Psleep) * [expr [$ns_ now] - $begin_sleep_]]
    [$self getER] remove $sleep_energy
  }
  set begin_sleep_ [$ns_ now]
  set begin_idle_ 0
}

Application/LEACH instproc WakeUp {} {
  global opt ns_
  $self instvar begin_idle_ begin_sleep_

  [[$self node] set netif_(0)] set sleep_ 0
  # If node has been asleep, remove sleep energy (e.g., the amount of energy
  # dissipated while the node is in the sleep state).  Otherwise, the node
  # has been idling and must remove idle energy (e.g., the amount of
  # energy dissipated while the node is in the idle state).
  if {$begin_sleep_ > $begin_idle_} {
    set sleep_energy [expr $opt(Psleep) * [expr [$ns_ now] - $begin_sleep_]]
    [$self getER] remove $sleep_energy
  } else {
    set idle_energy [expr $opt(Pidle) * [expr [$ns_ now] - $begin_idle_]]
    [$self getER] remove $idle_energy
  }
  set begin_idle_ [$ns_ now]
  set begin_sleep_ 0
}

Application/LEACH instproc setCode code {
  $self instvar code_
  set code_ $code
  [$self mac] set code_ $code
}

Application/LEACH instproc checkAlive {} {

  global ns_ chan opt node_
  $self instvar alive_ TDMAschedule_
  $self instvar begin_idle_ begin_sleep_

  # Check the alive status of the node.  If the node has run out of
  # energy, it no longer functions in the network.
  set ISalive [[[$self node] set netif_(0)] set alive_]
  if {$alive_ == 1} {
    if {$ISalive == 0} {
      puts "Node [$self nodeID] is DEAD!!!!"
      $chan removeif [[$self node] set netif_(0)]
      set alive_ 0
      set opt(nn_) [expr $opt(nn_) - 1]

      if {$opt(rcapp) == "LEACH-C/StatClustering" && \
          [$self isClusterHead?]} {
        foreach element $TDMAschedule_ {
          if {$element != [$self nodeID]} {
            puts "Node $element is effectively DEAD!!!!"
            $chan removeif [$node_($element) set netif_(0)]
            [$node_($element) set netif_(0)] set alive_ 0
            [$node_($element) set rca_app_] set alive_ 0
            set opt(nn_) [expr $opt(nn_) - 1]
          }
        }
      }
    	$self GoToSleep
    } else {
      $ns_ at [expr [$ns_ now] + 0.1] "$self checkAlive"
      if {$begin_idle_ >= $begin_sleep_} {
        set idle_energy [expr $opt(Pidle) * [expr [$ns_ now] - $begin_idle_]]
        [$self getER] remove $idle_energy
        set begin_idle_ [$ns_ now]
      } else {
        set sleep_energy [expr $opt(Psleep) * [expr [$ns_ now] - $begin_sleep_]]
        [$self getER] remove $sleep_energy
        set begin_sleep_ [$ns_ now]
      }
    }
  }
  if {$opt(nn_) < $opt(num_clusters)} "sens_finish"
}

############################################################################
#
# Cluster Head Functions
#
############################################################################

Application/LEACH instproc isClusterHead? {} {
  $self instvar isch_
  return $isch_
}

Application/LEACH instproc hasbeenClusterHead? {} {
  $self instvar hasbeench_
  return $hasbeench_
}

Application/LEACH instproc hasnotbeenClusterHead {} {
  $self instvar hasbeench_
  set hasbeench_ 0
}

Application/LEACH instproc setClusterHead {} {
  $self instvar isch_ hasbeench_
  set isch_ 1
  set hasbeench_ 1
  return 
}

Application/LEACH instproc unsetClusterHead {} {
  $self instvar isch_
  set isch_ 0
  return 
}


############################################################################
#
# Distributed Cluster Set-up Functions
#
############################################################################

Application/LEACH instproc decideClusterHead {} {

  global chan ns_ opt node_

  $self instvar next_change_time_ round_ clusterNodes_ 
  $self instvar now_ TDMAschedule_ beginningE_ alive_
  $self instvar myADVnum_ CHheard_

  set CHheard_ 0
  [$self mac] set CHheard_ $CHheard_
  set myADVnum_ 0
  [$self mac] set myADVnum_ $myADVnum_

  # Check the alive status of the node.  If the node has run out of
  # energy, it no longer functions in the network.
  set ISalive [[[$self node] set netif_(0)] set alive_]
  if {$alive_ == 1 && $ISalive == 0} {
    puts "Node [$self nodeID] is DEAD!!!! Energy = [[$self getER] query]"
    $chan removeif [[$self node] set netif_(0)]
    set alive_ 0
    set opt(nn_) [expr $opt(nn_) - 1]
  }
  if {$alive_ == 0} {return}

  set now_ [$ns_ now]
  set nodeID [$self nodeID]
  set beginningE_ [[$self getER] query]

  $self setCode 0
  $self WakeUp 

  set tot_rounds [expr int([expr $opt(nn_) / $opt(num_clusters)])]
  if {$round_ >= $tot_rounds} {
    set round_ 0
  }

  if {$opt(eq_energy) == 1} {
    #
    # Pi(t) = k / (N - k mod(r,N/k))
    # where k is the expected number of clusters per round
    # N is the total number of sensor nodes in the network
    # and r is the number of rounds that have already passed.
    #
    set nn $opt(nn_)
    set Etotal 0
    for {set id 0} {$id < [expr $opt(nn)-1]} {incr id} {
      set app [$node_($id) set rca_app_]
      set E [[$app getER] query]
      set Etotal [expr $Etotal + $E]
    }
    set aveE [expr $Etotal / $opt(nn)]
    set E [[$self getER] query]
    if {[expr $nn - $opt(num_clusters) * $round_] < 1} {
      set thresh 1
    } else {
      set thresh [expr double($opt(num_clusters)) /  \
        [expr $nn - $opt(num_clusters) * $round_]]	
      # Whenever round_ is 0, all nodes are eligible to be cluster-head.
      if {$round_ == 0} {
        $self hasnotbeenClusterHead
      }
    }
    # If node has been cluster-head in this group of rounds, it will not
    # act as a cluster-head for this round.
    if {[$self hasbeenClusterHead?]} {
      set thresh 0
    }
  } else {
    #
    # Pi(t) = Ei(t) / Etotal(t) * k
    # where k is the expected number of clusters per round,
    # Ei(t) is the node's current energy, and Etotal(t) is the total 
    # energy from all nodes in the network.
    #
    set Etotal 0
    # Note!  In a real network, would need a routing protocol to get this
    # information.  Alternatively, each node could estimate Etotal(t) from 
    # the energy of nodes in its cluster.
    for {set id 0} {$id < [expr $opt(nn)-1]} {incr id} {
      set app [$node_($id) set rca_app_]
      set E [[$app getER] query]
      set Etotal [expr $Etotal + $E]
    }
    set E [[$self getER] query]
    set thresh [expr double([expr $E * $opt(num_clusters)]) / $Etotal] 
  }

  puts "THRESH = $thresh"
  set clusterNodes_ ""
  set TDMAschedule_ ""

  if {[$self getRandomNumber 0 1] < $thresh && $E >= $aveE} {
    puts "$nodeID: *******************************************"
    puts "$nodeID: Is a cluster head at time [$ns_ now]"
    $self setClusterHead
    set random_access [$self getRandomNumber 0 $opt(ra_adv)]
    $ns_ at [expr $now_ + $random_access] "$self advertiseClusterHead"
  } else {
    puts "$nodeID: *******************************************"
    $self unsetClusterHead
  }

  incr round_ 
  set next_change_time_ [expr $now_ + $opt(ch_change)] 
  $ns_ at $next_change_time_ "$self decideClusterHead"
  $ns_ at [expr $now_ + $opt(ra_adv_total)] "$self findBestCluster"
}

Application/LEACH instproc advertiseClusterHead {} {

  global ns_ opt ADV_CH MAC_BROADCAST LINK_BROADCAST BYTES_ID
  $self instvar currentCH_ code_ 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品入口麻豆88视频| 夜夜精品视频一区二区 | 国产伦精品一区二区三区在线观看| 欧美午夜精品理论片a级按摩| 国产精品欧美精品| 国产乱一区二区| 欧美国产禁国产网站cc| av不卡在线观看| 日韩伦理免费电影| 色哟哟欧美精品| 亚洲线精品一区二区三区| 欧美色男人天堂| 美女诱惑一区二区| 精品奇米国产一区二区三区| 色素色在线综合| 高清shemale亚洲人妖| 中文字幕一区二区三区色视频| 91在线码无精品| 日韩精品久久久久久| 欧美一区二区三区视频免费播放| 日本不卡视频在线| 久久精品人人做人人爽人人| gogo大胆日本视频一区| 国产毛片一区二区| 麻豆专区一区二区三区四区五区| 午夜在线成人av| 久久精品日产第一区二区三区高清版 | 欧美日本国产一区| 久久99久国产精品黄毛片色诱| 久久精品一区蜜桃臀影院| 日韩午夜激情免费电影| 成人午夜av在线| 日韩在线一二三区| 午夜欧美2019年伦理| 久久久久久久久97黄色工厂| 99久久综合色| 99v久久综合狠狠综合久久| av中文一区二区三区| 成人免费看黄yyy456| 丰满白嫩尤物一区二区| 国产69精品久久777的优势| 国产精品一级在线| 成人性生交大片| av亚洲精华国产精华精| 99免费精品视频| 在线观看视频91| 丁香婷婷综合激情五月色| 国产成人午夜精品5599| 日韩专区在线视频| 蜜桃视频免费观看一区| 精品一区二区综合| 国产电影一区二区三区| 国产精品99久久久| 97久久精品人人澡人人爽| 91丝袜美女网| 国产露脸91国语对白| 成人午夜精品在线| 91美女在线视频| 欧美日韩一级二级| 日韩精品在线看片z| 欧美日韩久久久久久| 日韩无一区二区| 久久久精品中文字幕麻豆发布| 中文字幕av一区二区三区高 | 欧美日韩情趣电影| 日韩亚洲欧美高清| 国产午夜精品美女毛片视频| 中文一区二区在线观看| 亚洲国产美国国产综合一区二区 | 成人99免费视频| 九九九精品视频| 懂色一区二区三区免费观看| 在线免费精品视频| 日韩一级免费观看| 国产精品女上位| 婷婷综合在线观看| 国产老肥熟一区二区三区| 99国产麻豆精品| 欧美成人福利视频| 亚洲欧洲性图库| 秋霞成人午夜伦在线观看| 国产成人av一区二区三区在线观看| 91在线视频免费91| 日韩久久久精品| 亚洲免费观看在线视频| 亚洲乱码中文字幕| 亚洲综合无码一区二区| 亚洲影视在线播放| 国产一区在线看| 欧美三级中文字| 国产欧美日韩在线看| 欧美国产精品久久| 日韩高清电影一区| 久久99在线观看| 国产乱理伦片在线观看夜一区| 在线亚洲高清视频| 亚洲国产激情av| 日韩二区三区在线观看| 色综合久久九月婷婷色综合| 久久先锋资源网| 国产精品久久久久影院老司| 亚洲乱码国产乱码精品精可以看| 欧美日韩亚洲另类| 国产精品无人区| 久久99精品久久久久婷婷| 色94色欧美sute亚洲线路一ni| 色88888久久久久久影院按摩 | 亚洲国产成人私人影院tom| 三级久久三级久久| 色哟哟日韩精品| 亚洲国产经典视频| 国产精品综合二区| 日韩欧美中文字幕一区| 亚洲v日本v欧美v久久精品| 99久久精品免费精品国产| xfplay精品久久| 麻豆成人综合网| 在线播放视频一区| 精品久久一区二区| 五月天久久比比资源色| 91久久久免费一区二区| 国产欧美久久久精品影院| 狠狠色丁香九九婷婷综合五月| av色综合久久天堂av综合| 久久精品欧美日韩精品| 国产在线精品免费| 欧美精品一区二区精品网| 亚洲免费在线看| 97久久精品人人澡人人爽| 亚洲欧洲日产国码二区| 国产99久久久国产精品| 久久精品欧美一区二区三区不卡| 精彩视频一区二区三区| 欧美成人官网二区| 精品一区二区三区免费毛片爱| 欧美成人女星排行榜| 老司机午夜精品99久久| 日韩精品一区在线| 久久国产夜色精品鲁鲁99| 日韩精品最新网址| 极品美女销魂一区二区三区免费| 欧美大度的电影原声| 国产在线视频不卡二| 久久久久久久久久久久久夜| 国产成人高清在线| 国产精品高潮久久久久无| 91麻豆精品一区二区三区| 亚洲乱码国产乱码精品精的特点| 在线免费观看不卡av| 亚洲成年人网站在线观看| 欧美日韩1234| 久久成人免费网| 国产欧美日本一区视频| 一道本成人在线| 香蕉久久一区二区不卡无毒影院| 欧美日韩国产另类一区| 美女被吸乳得到大胸91| 中文欧美字幕免费| 日本久久一区二区三区| 日韩精品三区四区| 久久丁香综合五月国产三级网站| 亚洲精品一区二区三区四区高清 | 激情成人综合网| 国产精品视频免费看| 91成人看片片| 免播放器亚洲一区| 国产精品久久久久天堂| 欧美少妇一区二区| 国内精品久久久久影院色| 1024国产精品| 欧美一区二区三区小说| 懂色av中文字幕一区二区三区| 一区二区理论电影在线观看| 日韩视频免费观看高清完整版 | 制服丝袜激情欧洲亚洲| 亚洲综合无码一区二区| 精品国产乱码久久久久久久| yourporn久久国产精品| 天天色综合成人网| 国产精品午夜久久| 91精品在线免费观看| 成人午夜激情影院| 免费成人深夜小野草| 中文字幕一区二区视频| 日韩一区二区麻豆国产| 91在线观看视频| 国内精品国产成人国产三级粉色| 亚洲欧美一区二区三区孕妇| 精品国产91九色蝌蚪| 欧美自拍偷拍午夜视频| 国产成人综合在线| 日本中文字幕一区二区视频| 一区在线观看免费| 精品久久久久99| 欧美日韩在线三级| 成人app下载| 国产剧情一区在线| 免费看欧美女人艹b| 一卡二卡三卡日韩欧美| 国产日韩欧美a|