戰地指揮所-資訊傳遞耗時計算

場景

    1. 戰場混亂,傳遞資訊不易,『戰地指揮所』傳遞資訊給『前進指揮所』前,因為幅員廣闊,必須經過若干『中繼指揮所』(假設為 M 個),才能將資訊傳遞給『前進指揮所』。
    2. 『戰地指揮所』在傳遞資訊前,必須確定『前進指揮所』能接收資訊,因此在傳遞真實作戰資訊前,先傳遞『驗證資訊』。
    3. 『前進指揮所』收到『驗證資訊』後,必須回傳『驗證碼』給『戰地指揮所』。
    4. 『戰地指揮所』傳遞『驗證資訊』給『中繼指揮所』,『中繼指揮所』轉送給其他『中繼指揮所』,『中繼指揮所』傳遞『驗證資訊』給『前進指揮所』,
    5. 各段傳遞『驗證資訊』所需時間(Tokentransmit)假定均相同。
    6. 各『中繼指揮所』收到『驗證資訊』或『驗證碼』需要處理轉送時間(Tokenprocess)假定均相同。
    7. 『前進指揮所』回傳『驗證碼』給『戰地指揮所』,所經過之路徑,並須與接收時相同,因為『中繼指揮所』要確認『驗證碼』是否正確,也就是必須經過相同之『中繼指揮所』。
    8. 『前進指揮所』收到『戰地指揮所』之『驗證碼』後,開始傳遞真實作戰資訊。『前進指揮所』將作戰資訊(假設為 N 個單位資料量)切割成若該等分(假設為 Packetsize)資訊包裹,由不同傳訊員同時傳遞。
    9. 假定傳訊員傳遞至『中繼指揮所』,再從『中繼指揮所』至下一個『中繼指揮所』,直至『前進指揮所』,所需傳遞時間(Datatransmit)均相同。
    10. 各『中繼指揮所』需要處理作戰資轉送時間(Dataprocess)假定均相同。
    11. 『前進指揮所』收完最後一個資訊包裹後,必須循原傳遞路徑回傳『已收畢碼』給『戰地指揮所』,假定傳遞時間與『驗證資訊』相同。

問題

    1. 『前進指揮所』何時收到第一個作戰資訊包裹?
    2. 『戰地指揮所』傳遞 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)』。
    • 『戰地指揮所』傳遞 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