1. 程式人生 > 其它 >QualNet自定義移動模型

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自帶模型的移動都是在初始化階段就已經計算好、儲存好的,不能在模擬過程中更改中間位置點。可以在初始化時預設為不移動,即不新增中間位置點,在移動函式中,根據設定的速度實時計算位置,通過控制速度向量實現移動的控制。