Skip to main content
. 2019 May 9;19(9):2157. doi: 10.3390/s19092157
Algorithm 1 Heuristic for efficient drone placement.
  • 1:

    Inputs: N,M,γmax,γmin,β,R,dmax

  • 2:

    Initialization: n{1,,N},m{1,,M}

  • 3:

    Ynm0, xm0, cm0, tn0

  • 4:

    Wnm1,ifRnm<dmax0,otherwise

  • 5:

    Step I: Allocation to users with single

    connection option

  • 6:

    tnn=1NWn,m,m{1,,M}

  • 7:

    for i{1,,N} do

  • 8:

    if ti==1 then

  • 9:

      kfind(Wi,:==1)

  • 10:

      Yi,k1,xk1,ckck+1

  • 11:

    end if

  • 12:

    end for

  • 13:

    Step II: Allocation of users with connections

    options to multiple drones

  • 14:

    for i{1,,N} do

  • 15:

    if ti>1 then

  • 16:

      flag0

  • 17:

      kfind(Wi,:==1),jfind(x==1)

  • 18:

      [I,λ]sort(c)

  • 19:

      for j=1:len(I) do

  • 20:

       aj1,ifIjk0,otherwise

  • 21:

      end for

  • 22:

      if j=1len(a)aj>0 then

  • 23:

       Ifind(a==1)

  • 24:

       for q1:len(I) do

  • 25:

        sIq

  • 26:

        if cIs<γmax then

  • 27:

         Yi,Is1,xIs1,cIscIs+1

  • 28:

         flag1

  • 29:

         break

  • 30:

        end if

  • 31:

       end for

  • 32:

       if flag==0 then

  • 33:

        kkI

  • 34:

        if k== then

  • 35:

         W(i,:)0

  • 36:

         flag1

  • 37:

        end if

  • 38:

       end if

  • 39:

      end if

  • 40:

      if flag==0 then

  • 41:

       Yi,k11,xk11,ck1ck1+1

  • 42:

      end if

  • 43:

    end if

  • 44:

    end for

  • 45:

    Step III: Check for under utilized drones

  • 46:

    find(((c<γmin)·x)==1)

  • 47:

    Y:,0,x0,c0

  • 48:

    pi=1NYi,:

  • 49:

    ufind(p==0)

  • 50:

    bround(β·N)

  • 51:

    ti=1Nj=1MYi,j

  • 52:

    for i1:len(u) do

  • 53:

    if t<b then

  • 54:

    flag0

  • 55:

      [I,λ]sort(c)

  • 56:

      for j1:M do

  • 57:

       if flag==0 then

  • 58:

        if cλj<γmaxandWui,λj==1 then

  • 59:

         Yui,λj1,xλj1,cλjcλj+1

  • 60:

         flag1

  • 61:

         tii=1Njj=1MYii,jj

  • 62:

        end if

  • 63:

       end if

  • 64:

      end for

  • 65:

    end if

  • 66:

    end for

  • 67:

    Step IV: Connect all unconnected users

  • 68:

    ti=1Nj=1MYi,j

  • 69:

    pi=1NYi,:

  • 70:

    ufind(p==0)

  • 71:

    for i1:len(u) do

  • 72:

    if t<b then

  • 73:

      rR(i,:)

  • 74:

      flag0

  • 75:

      kWui,:

  • 76:

      for j1:len(k) do

  • 77:

       if flag==0 then

  • 78:

        [lv,li]min(r)

  • 79:

        rliinf

  • 80:

        [lv,li]min(r)

  • 81:

        if Wui,li>0 then

  • 82:

         Yui,li1,xli1,clicli+1

  • 83:

        end if

  • 84:

       end if

  • 85:

      end for

  • 86:

    end if

  • 87:

    end for

  • 88:

    Step V: Remove all under-utilized drones

  • 89:

    dufind((c<γmin)·x==1)

  • 90:

    Y:,du0,xdu0,cdu0

  • 91:

    ti=1Nj=1MYi,j

  • 92:

    Outputs: Y,x