Subject: Abstract representation of mobility in Ad-hoc networks

From: Kimberly King <[email-masked]>
Date: Thu, 3 Dec 1998 14:22:25 -0500

Hello,

I wanted a way to easily specify a mobility scenarios for ad-hoc networks.
I thought about what were the essential characteristics.

Here are some considerations:
How many nodes make up the network?
How many 1-hop neighbors on average does a node have?
How long might a link to a neighbor stay up?
Does the network become partitioned during the simulation?
Can the scenarios be easily described so that they can be shared with other?

I decided to use a function f_k(t) to describe a relative position of node k at time t.

Two nodes k, l are neighbors at time t_0 if
|f_k(t_0) - f_l(t_0)| < epsilon where epsilon is a constant.

I used functions of the form a_k cos (b_k * t) to describe the movement of node k.
Hence, a scenario is basically defined by two vectors of length equal to the number of nodes in the network.

It isn't difficult to create the parameters given whatever network context you wish to create.  Network partitions are view easily by plotting the graphs and covering each function with an epsilon neighborhood.  If the result is connected, the network was never partitioned.  It is also visually easy to detect how long a partition had existed.  

I hope this might be useful.

Kimberly

Kimberly King, Ph.D.
Science Applications International Corporation (SAIC)
1710 Goodridge Drive
MS 1-2-8
McLean, VA 22102
(703) 917-7949

---

From: Miguel Sanchez <[email-masked]>
Date: Fri, 04 Dec 1998 15:43:02 +0100

> I thought about what were the essential characteristics.

I'll enclose the interface I'm currently using to write my Java mobility models, I think it could be useful for you:

begin ------------

abstract class MobModels {

 Hashtable nodeList=new Hashtable(); // where node collection is stored
 Pos start=new Pos (0,0);
 Pos end=new Pos(100,100);  // for limited movement area

 public Pos getCoordsStart() {return start;}

 public Pos getCoordsEnd() {return end;}

 public void addNode(Object node) {
  nodeList.put(node,new Pos(100,100));
 }
 public Pos getLocation(Object node) {
  return (Pos) nodeList.get(node);
 }
//public Pos getTarget(Object node) {} // specific target pos of this node

 //public Pos getTarget() {}      // where a common target is available

 public abstract Pos getNextLocation(Object node); // also refresh nodelist data

 public void setLocation(Object node,Pos loc) {
  nodeList.put(node,new Pos(loc));
 }

 public void setCoords(Pos start, Pos end) {
  this.start=start;
  this.end=end;
 }

 public void clockTick() {   // forces nodes locations calculation
  for(Enumeration e=nodeList.keys();e.hasMoreElements();) {
   Object o=(Object) e.nextElement();
   getNextLocation(o);       // let's move this node
  }
 }

}

end ----------------

You only have to fill-in the holes with your favorite mobility model. As you can see you can request individual node movements using getNextLocation(nod) or move the full node set with clockTick().

Regards,

Miguel Sanchez
Universidad Politecnica de Valencia (SPAIN)