戰地指揮所-資訊傳遞耗時計算
場景:
- 戰場混亂,傳遞資訊不易,『戰地指揮所』傳遞資訊給『前進指揮所』前,因為幅員廣闊,必須經過若干『中繼指揮所』(假設為 M 個),才能將資訊傳遞給『前進指揮所』。
- 『戰地指揮所』在傳遞資訊前,必須確定『前進指揮所』能接收資訊,因此在傳遞真實作戰資訊前,先傳遞『驗證資訊』。
- 『前進指揮所』收到『驗證資訊』後,必須回傳『驗證碼』給『戰地指揮所』。
- 『戰地指揮所』傳遞『驗證資訊』給『中繼指揮所』,『中繼指揮所』轉送給其他『中繼指揮所』,『中繼指揮所』傳遞『驗證資訊』給『前進指揮所』,
- 各段傳遞『驗證資訊』所需時間(Tokentransmit)假定均相同。
- 各『中繼指揮所』收到『驗證資訊』或『驗證碼』需要處理轉送時間(Tokenprocess)假定均相同。
- 『前進指揮所』回傳『驗證碼』給『戰地指揮所』,所經過之路徑,並須與接收時相同,因為『中繼指揮所』要確認『驗證碼』是否正確,也就是必須經過相同之『中繼指揮所』。
- 『前進指揮所』收到『戰地指揮所』之『驗證碼』後,開始傳遞真實作戰資訊。『前進指揮所』將作戰資訊(假設為 N 個單位資料量)切割成若該等分(假設為 Packetsize)資訊包裹,由不同傳訊員同時傳遞。
- 假定傳訊員傳遞至『中繼指揮所』,再從『中繼指揮所』至下一個『中繼指揮所』,直至『前進指揮所』,所需傳遞時間(Datatransmit)均相同。
- 各『中繼指揮所』需要處理作戰資轉送時間(Dataprocess)假定均相同。
- 『前進指揮所』收完最後一個資訊包裹後,必須循原傳遞路徑回傳『已收畢碼』給『戰地指揮所』,假定傳遞時間與『驗證資訊』相同。
問題:
- 『前進指揮所』何時收到第一個作戰資訊包裹?
- 『戰地指揮所』傳遞 N 單位作戰資訊至『前進指揮所』,總需時若干?
分析:
- 因為在『戰地指揮所』與『前進指揮所』之間,有『中繼指揮所數:M』,而『驗證資訊傳遞時間:Tokentransmit』,因此:
- 『總驗證資訊傳遞時間:Totaltoken = Tokentransmit + M * (Tokentransmit + Tokenprocess) = (M + 1) * Tokentransmit + M * Tokenprocess』。
- 『總驗證碼傳遞時間:Totalvalid = Totaltoken』。
- 『總已收畢碼傳遞時間:Totalroger = Totaltoken』。
- 『總非作戰資料傳遞時間:Totaltoken,valid,roger = 3 * Tokentoken = 3 * ((M + 1) * Tokentransmit + M * Tokenprocess)』。
- 因為『作戰資訊量:N』『資訊包裹資訊量:Packetsize』,因此『資訊包裹數:P = RoundUp(N / Packetsize)』,因此:
- 『第 1 個作戰資料包裹到達前進指揮所時間:Data1 = Datatransmit + M * (Datatransmit + Dataprocess) = (M + 1) * Datatransmit + M * Dataprocess』。
- 『前進指揮所』收到第一個作戰資訊包裹時間:TotalData1 = Totaltoken + Totalvalid + Data1 = 2 * ((M + 1) * Tokentransmit + M * Tokenprocess) + (M + 1) * Datatransmit + M * Dataprocess
- 『其餘作戰資料包裹到達前進指揮所時間:Dataothers = (P - 1) * M * (Datatransmit + Dataprocess) = (P - 1) * M * Datatransmit + (P - 1) * M * Dataprocess』。
- 『總作戰資料傳遞時間:Data1,others = Data1 + Dataothers = (P * M + 1) * Datatransmit + (P * M + 1) * Dataprocess = (P * M + 1) * (Datatransmit + Dataprocess)』。
- 『第 1 個作戰資料包裹到達前進指揮所時間:Data1 = Datatransmit + M * (Datatransmit + Dataprocess) = (M + 1) * Datatransmit + M * Dataprocess』。
- 『戰地指揮所』傳遞 N 單位作戰資訊至『前進指揮所』,總需時:Totaltime = Totaltoken,valid,roger + (Data1,others),因此:
- Totaltime = 3 * ((M + 1) * Tokentransmit + M * Tokenprocess) + (P * M + 1) * (Datatransmit + Dataprocess)。
GNU R 程式碼:
tansmisionTimeOfToken <- 2.5
tokenProcessTimeOfMidPoint <- 1.5
numOfMidPoint <- 2
totalDataSize <- 244
PacketDataSize <- 15
timeOfDataPacketTransmission <- 18
dataPacketProcessTimeOfMidPoint <- 3
############################################################################################################################
output <- function(format, val) {
msg <- sprintf(format, val)
print(msg)
}
# 總驗證資訊傳遞時間:前進指揮所 -> 中繼指揮所 -> 戰地指揮所
totalTimeOfTokenTransmission <- tansmisionTimeOfToken + numOfMidPoint * (tansmisionTimeOfToken + tokenProcessTimeOfMidPoint)
output("總驗證資訊傳遞時間=%.2f", totalTimeOfTokenTransmission)
# 總驗證碼傳遞時間:戰地指揮所 -> 中繼指揮所 -> 前進指揮所
totalTimeOfTokenValidation <- tansmisionTimeOfToken + numOfMidPoint * (tansmisionTimeOfToken + tokenProcessTimeOfMidPoint)
output("總驗證碼傳遞時間=%.2f", totalTimeOfTokenValidation)
# 通信建立時間:前進指揮所 -> 中繼指揮所 -> 戰地指揮所
totalTimeOfCommunicationSetup <- totalTimeOfTokenTransmission + totalTimeOfTokenValidation
output("通信建立時間=%.2f", totalTimeOfCommunicationSetup)
# 通信包裹數
numOfPackets <- ceiling(totalDataSize / PacketDataSize)
output("通信包裹數=%.2f", numOfPackets)
# 第一個通信包裹到達時間:前進指揮所 -> 中繼指揮所 -> 戰地指揮所
timeOfFirstDataPacketTransmission <- numOfMidPoint * (timeOfDataPacketTransmission + dataPacketProcessTimeOfMidPoint)
output("第一個通信包裹到達前進指揮所時間=%.2f", totalTimeOfCommunicationSetup + timeOfFirstDataPacketTransmission)
# 最後一個通信包裹到達時間:前進指揮所 -> 中繼指揮所 -> 戰地指揮所
timeOfOtherDataPacketsTransmission <- numOfPackets * numOfMidPoint * (timeOfDataPacketTransmission + dataPacketProcessTimeOfMidPoint)
output("最後一個通信包裹到達前進指揮所時間=%.2f", totalTimeOfCommunicationSetup + timeOfOtherDataPacketsTransmission)
# 總已收畢碼傳遞時間:戰地指揮所 -> 中繼指揮所 -> 前進指揮所
totalTransmissionTimeOfDataACK <- tansmisionTimeOfToken + numOfMidPoint * (tansmisionTimeOfToken + tokenProcessTimeOfMidPoint)
output("總已收畢碼傳遞時間=%.2f", totalTransmissionTimeOfDataACK)
# 所有資料傳遞時間:前進指揮所 -> 中繼指揮所 -> 戰地指揮所
totalTimeOfInformationTransmission <- totalTimeOfCommunicationSetup + timeOfOtherDataPacketsTransmission + totalTransmissionTimeOfDataACK
output("所有資料傳遞時間=%.2f", totalTimeOfInformationTransmission)
- 總驗證資訊傳遞時間=10.50
- 總驗證碼傳遞時間=10.50
- 通信建立時間=21.00
- 通信包裹數=17.00
- 第一個通信包裹到達前進指揮所時間=63.00
- 最後一個通信包裹到達前進指揮所時間=735.00
- 總已收畢碼傳遞時間=10.50
- 所有資料傳遞時間=745.50