Как я могу изменить код гибридной энергоэффективной распределенной кластеризации для систем IOT в сценарии 5G? - PullRequest
0 голосов
/ 18 мая 2019

Я в основном использую MATLAB Code для HEED и хочу изменить код таким образом, чтобы было пять интерфейсов (NAI1, NAI2 .... NAI5) с различными свойствами.Рассмотрим эти интерфейсы как WiFi, Bluetooth, ZigBee, LTE и т. Д. Каждый узел должен выбрать интерфейс связи и CH с самым высоким значением QoE.Если в диапазоне нет CH, узел будет передавать данные обратно в BS с интерфейсом по умолчанию NAI5.

Я изменил код HEED для WSN в соответствии с моими требованиями, но не могу понять, как я могу его реализоватьв сценариях 5G, как описано выше.

для раундов = 1: MaxInteral

  % the Setup phase of cluster 
  % beginning of a round
  Node.CHprob=max(Cprob.*((Node.EnNode)./MaxEn), Pmin); 
  Node.InitCHprob=Node.CHprob; 

  Node.IsaddDummyRound=0.*(Node.IsaddDummyRound);  %clear 
  Node.n_finalCH=linspace(0,0,NodeNums); %Node.n_finalCH-Node.n_finalCH;  
  Node.IsCovered=linspace(0,0,NodeNums);   

  Node.ListfinalCH=Node.ListfinalCH-Node.ListfinalCH;
  Node.ListfinalCH_Cost=Node.ListfinalCH_Cost-Node.ListfinalCH_Cost+9999; 
  Node.my_finalCH=Node.my_finalCH-Node.my_finalCH; 
  Node.my_final_CH_Cost=(Node.my_final_CH_Cost-Node.my_final_CH_Cost)+9999; 
  Node.n_tentCH=Node.n_tentCH-Node.n_tentCH;  
  Node.ListtentCH=Node.ListtentCH-Node.ListtentCH; 
  Node.ListtentCH_Cost=Node.ListtentCH_Cost-Node.ListtentCH_Cost+9999; 
  Node.csize=Node.csize-Node.csize;
  Node.Isstop = Node.StateNode ;
  % Node.Isstop is different from Node.StateNode
  Node.tent_CH=Node.tent_CH-Node.tent_CH+NON_CH; 
  Node.tent_CH_Cost=Node.tent_CH_Cost-Node.tent_CH_Cost+9999; 

  Node.c=Node.c-Node.c; 
  Node.d=Node.d-Node.d; 
  %ClusterHeadNum=0; 
  Node.IsClusterHeads=Node.IsClusterHeads-Node.IsClusterHeads+NON_CH; 
  iteration(Rounds)=0; 

  %update alive nodes
  for i =1:NodeNums  
     if Node.StateNode(i)==1
         AliveNode(Rounds)=AliveNode(Rounds)+1;% calculate the number of alive nodes for this interation
         Node_Energy(Rounds,i) = Node.EnNode(i);
     end

  end

  %update neighbours
  Node.Nbr=zeros(NodeNums);                    
  Node.NumNbr=linspace(0,0,NodeNums);
  for i=1:NodeNums 
    count =0 ; 
    if(Node.StateNode(i)==1)
    for j=1:NodeNums 

        if(j~=i && Node.StateNode(j)==1)  
        dist = ((Node.x(i)-Node.x(j)).^2)+((Node.y(i)-Node.y(j)).^2);  % the distance.^2 
               if dist < (Tr.^2) % original dist < (Tr.^2)
                   count=count+1; 
                   Node.Nbr(i,count)=j; 

               end 

         end 
         if j== NodeNums  
                Node.NumNbr(i) = count ; 
         end   
    end  
    end
  end 
 % while sum(Node.CHprob)~=NodeNums
  while sum(Node.Isstop)~=0
     iteration(Rounds)=iteration(Rounds)+1;    

  for i =1:NodeNums          
   if Node.Isstop(i)==1 
     if Node.IsCovered(i) == 1 
       for j=1:Node.NumNbr(i)    
            if Node.IsClusterHeads(Node.Nbr(i,j)) ~= NON_CH  
              if Node.my_final_CH_Cost(i) > Node.NumNbr(Node.Nbr(i,j));
                 Node.my_finalCH(i)= Node.Nbr(i,j); 
                 Node.my_final_CH_Cost(i)=Node.NumNbr(Node.Nbr(i,j)); 
              end
            end   
       end
       if Node.my_finalCH(i) == i

           if Node.CHprob(i)==1
             Node.IsClusterHeads(i)= FINAL_CH;  
             Node.my_final_CH_Cost(i)= Node.NumNbr(i);%computeDegree(i);   
             ClusterHeadNum(Rounds)=ClusterHeadNum(Rounds)+1;
             %broadcast 
             dist =Tr.^2;
             EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
             Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
             if Node.EnNode(i) <= 0 
                Node.StateNode(i)=0; 
                Node.EnNode(i)=0; 
             end 
             for k=1:Node.NumNbr(i)
                Node.IsCovered(Node.Nbr(i,k)) = 1;
                Node.IsCoveredByFinal(Node.Nbr(i,k)) = 1;
                EnRecP=EnRec(Elec,BroadcastKbit); 
                Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
                if Node.EnNode(Node.Nbr(i,k)) <= 0 
                   Node.StateNode(Node.Nbr(i,k))=0; 
                   Node.EnNode(Node.Nbr(i,k))=0; 
                end 
             end 

          else
             Node.IsClusterHeads(i)=TENTATIVE_CH;  
             Node.my_finalCH(i) = i;
             Node.my_final_CH_Cost(i) = Node.NumNbr(i);
             Node.c(i) =TOS_LOCAL_ADDRESS;
             Node.tent_CH(i)=TOS_LOCAL_ADDRESS; 
             Node.tent_CH_Cost(i)=Node.NumNbr(i); 

             %broadcast 
             dist =Tr.^2;
             EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
             Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
             if Node.EnNode(i) <= 0 
                   Node.StateNode(i)=0; 
                   Node.EnNode(i)=0; 
             end 
             for k=1:Node.NumNbr(i)
                Node.IsCovered(Node.Nbr(i,k)) = 1;
                EnRecP=EnRec(Elec,BroadcastKbit); 
                Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
                if Node.EnNode(Node.Nbr(i,k)) <= 0 
                   Node.StateNode(Node.Nbr(i,k))=0;  
                   Node.EnNode(Node.Nbr(i,k))=0; 
                end 
             end
           end
       end
     elseif Node.CHprob(i)==1
             Node.IsClusterHeads(i)= FINAL_CH; 
             Node.my_finalCH(i)=i; 
             Node.my_final_CH_Cost(i)= Node.NumNbr(i);%computeDegree(i);  
             Node.d(i)=((Node.x(i)-Bx).^2)+((Node.y(i)-By).^2);  % the distance.^2 
             ClusterHeadNum(Rounds)=ClusterHeadNum(Rounds)+1;
             %broadcast 
             dist =Tr.^2;
             EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
             Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
             if Node.EnNode(i) <= 0 
               Node.StateNode(i)=0; 
               Node.EnNode(i)=0; 
             end 
             for k=1:Node.NumNbr(i)
                Node.IsCovered(Node.Nbr(i,k)) = 1;
                Node.IsCoveredByFinal(Node.Nbr(i,k)) = 1;
                EnRecP=EnRec(Elec,BroadcastKbit); 
                Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
                if Node.EnNode(Node.Nbr(i,k)) <= 0 
                   Node.StateNode(Node.Nbr(i,k))=0;  
                   Node.EnNode(Node.Nbr(i,k))=0; 
                end 
             end
     elseif rand(1,1)<Node.CHprob(i)
             Node.IsClusterHeads(i)=TENTATIVE_CH;  
             Node.my_finalCH(i) = i;
             Node.my_final_CH_Cost(i) = Node.NumNbr(i);
             Node.c(i) =TOS_LOCAL_ADDRESS;
             Node.tent_CH(i)=TOS_LOCAL_ADDRESS; 
             Node.tent_CH_Cost(i)=Node.NumNbr(i);

             %broadcast 
             dist =Tr.^2;
             EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
             Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
             if Node.EnNode(i) <= 0 
               Node.StateNode(i)=0; 
               Node.EnNode(i)=0; 
             end 
             for k=1:Node.NumNbr(i)
                Node.IsCovered(Node.Nbr(i,k)) = 1;
                EnRecP=EnRec(Elec,BroadcastKbit); 
                Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
                if Node.EnNode(Node.Nbr(i,k)) <= 0 
                   Node.StateNode(Node.Nbr(i,k))=0; 
                   Node.EnNode(Node.Nbr(i,k))=0; 
                end 
             end 
     end
     CHprevious = Node.CHprob(i);
     Node.CHprob(i)=min(Node.CHprob(i).*2,1); 
     if CHprevious ==1
         Node.Isstop(i) =0;
     end
   end
  end



  end



  %join a cluster
  for i=1:NodeNums        
    if Node.StateNode(i)==1      
     if Node.IsClusterHeads(i)~= FINAL_CH
      if Node.IsCoveredByFinal(i) == 1
       for j=1:Node.NumNbr(i)    
            if Node.IsClusterHeads(Node.Nbr(i,j)) == FINAL_CH % covered by final CH
              if Node.my_final_CH_Cost(i) > Node.my_final_CH_Cost(Node.Nbr(i,j));
                 Node.my_finalCH(i)= Node.Nbr(i,j); 
                 Node.my_final_CH_Cost(i)=Node.my_final_CH_Cost(Node.Nbr(i,j));
              end 
            else
            end 
       end
       dist =Tr.^2;
       EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
       Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
       if Node.EnNode(i) <= 0 
         Node.StateNode(i)=0; 
         Node.EnNode(i)=0; 
       end

       %corresponding CH cost
       Node.csize(Node.my_finalCH(i)) = Node.csize(Node.my_finalCH(i))+1;
       EnRecP=EnRec(Elec,BroadcastKbit);
       Node.EnNode(Node.my_finalCH(i)) = Node.EnNode(Node.my_finalCH(i))-EnRecP;
       Node.csize(Node.my_finalCH(i))= Node.csize(Node.my_finalCH(i)) +1;
       if Node.EnNode(Node.my_finalCH(i)) <= 0 
         Node.StateNode(Node.my_finalCH(i))=0; 
         Node.Isstop(Node.my_finalCH(i))=0; 
         Node.EnNode(Node.my_finalCH(i))=0; 
       end
    else 
             Node.IsClusterHeads(i)= FINAL_CH; 
             Node.my_finalCH(i)=i; 
             Node.my_final_CH_Cost(i)= Node.NumNbr(i);%computeDegree(i); 
             ClusterHeadNum(Rounds)=ClusterHeadNum(Rounds)+1;
             for k=1:Node.NumNbr(i)
                Node.IsCovered(Node.Nbr(i,k)) = 1; 
                Node.IsCoveredByFinal(Node.Nbr(i,k)) = 1;
             end

             dist =Tr.^2;
             EntranPCH=EnTran(Elec,Eamp,BroadcastKbit,dist) ;
             Node.EnNode(i)=Node.EnNode(i)-EntranPCH;
             if Node.EnNode(i) <= 0 
               Node.StateNode(i)=0; 
               Node.EnNode(i)=0; 
             end

             for k=1:Node.NumNbr(i)
             Node.IsCovered(Node.Nbr(i,k)) = 1;
             Node.IsCoveredByFinal(Node.Nbr(i,k)) = 1;
             EnRecP=EnRec(Elec,Kbit); 
             Node.EnNode(Node.Nbr(i,k)) = Node.EnNode(Node.Nbr(i,k))-EnRecP;
             if Node.EnNode(Node.Nbr(i,k)) <= 0 
               Node.StateNode(Node.Nbr(i,k))=0; 
               Node.EnNode(Node.Nbr(i,k))=0; 
             end 
             end
    end
   end
  end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...