QualNet自定義移動模型
技術標籤:qualnet開發
上一篇部落格https://blog.csdn.net/zhang1806618/article/details/108033074已經就節點放置與移動模型進行了介紹。因為專案需要,qualnet自帶模型並不能很好的實現目的,此篇部落格將進一步研究移動模型的完整執行過程。
一、節點放置與移動模型簡要回顧
1.MOBILITY_AllocateNodePositions()------>MOBILITY_PreInitialize(),初始化NodePositions和MobilityData資料結構。
2.組移動模型MOBILITY_SetNodePositions()------>SetNodePositionsInGroup()------>MOBILITY_GroupMobilityInit()
其他移動模型MOBILITY_SetNodePositions()------>SetNodePositionWithFileInputs()
------>SetNodePositionsRandomly()
------>SetNodePositionsUniformly()
------>SetNodePositionsInGrid()
------>SetNodePositionsExternal()------>SetRandomMobility()
新增節點移動的各位置點。
3.PARTITION_InitializePartition()將所有節點的NodePositions資料結構指標賦予分割槽資料結構partitionData
partitionData->nodePositions = nodePositions
4.PARTITION_InitializeNodes()建立節點,並將partitionData資料結構的NodePositions資料賦值到各個節點資料結構。
NodePositions* nodePos = partitionData->nodePositions; for (i = 0; i < partitionData->numNodes; i++) { Node* node = NODE_CreateNode(partitionData, nodePos[i].nodeId, nodePos[i].partitionId, i); ...... }
二、自定義移動模型
1.建立移動模型myMbolitiy.h標頭檔案和myMbolitiy.cpp原始檔。
2.在myMbolitiy.h檔案中包含標頭檔案partition.h,在partition.h中已包含移動模型標頭檔案mobility.h。
myMbolitiy.cpp中包含標頭檔案myMbolitiy.h。
3.在mobility.h檔案中MobilityType列舉末尾新增新移動模型名稱,如“MY_MOBILITY”。
4.在mobility.cpp函式MOBILITY_PreInitialize()中新增以下內容,以讀取使用者檔案,配置新模型。
else if (strcmp(buf, "MY-MOBILITY") == 0)
{
mobilityData->mobilityType = MY_MOBILITY;
}
5.在mobility_placement.cpp函式SetRandomMobility()中新增新移動模型位置點的初始化函式(讀取使用者配置引數)。
else if (mobilityData->mobilityType == MY_MOBILITY) {
MOBILITY_PreInit(
numNodes, nodeId, mobilityData, nodeInput);
}
6.在myMbolitiy.h中宣告,在myMbolitiy.cpp中定義新移動模型的初始化和移動函式。
7.在需要移動的應用中呼叫移動函式。Qualnet自帶模型的移動都是在初始化階段就已經計算好、儲存好的,不能在模擬過程中更改中間位置點。可以在初始化時預設為不移動,即不新增中間位置點,在移動函式中,根據設定的速度實時計算位置,通過控制速度向量實現移動的控制。