January 2012 Archives

Here, I present the result of simulating the check-in process in a location-based social network. To this end, I have written a python script using SimPy, a Python-based simulation tool, the script is given below:


#!/usr/bin/env python
""" Simulate the Users visits to spatial locations in a social network
"""
from __future__ import generators # not needed for Python 2.3+
from SimPy.Simulation
import * from random
import gauss,shuffle,randint,choice,seed,random,Random,expovariate

class Generator(Process):
""" generates a set of users """
def __init__(self, maxNumberOfUsers):
Process.__init__(self)
self.name = "generator"
self.maxNumberOfUsers = maxNumberOfUsers

def execute(self):
users = []
userscopy = []
for i in range(self.maxNumberOfUsers):
j = User(i)
users.append(j)
userscopy.append(j)

for user in users:
shuffle(userscopy)
numoffriends = gauss(numoffriends_mean,numoffriends_sd)
for k in range(int(numoffriends)):
if userscopy[k] != user:
user.addfriend(userscopy[k])

for user in users:
activate(user,user.execute())
yield hold,self,1.0
self.trace("WARNING generator finished -- ran out of Users")

def trace(self,message):
if GTRACING: print "%7.4f \t%s"%(self.time(), message)


class User(Process):
def __init__(self,i):
Process.__init__(self)
self.i = i
self.name = "User"+`i`
self.friends = []
self.visits = []

def getID(self):
return self.i

def addfriend(self,friend):
self.friends.append(friend)

def getvisits(self):
return self.visits

def getfriendsvisits(self):
allvisits = []
for f in self.friends:
allvisits.extend(f.getvisits())
return allvisits

def getrandomfriendsvisit(self,allvisits):
randomvisit = ""
if len(allvisits) == 0:
randomvisit = randint(0,maxnumvisits)
else:
self.trace("list is not empty")
randomvisit = choice(allvisits)
return randomvisit

def execute(self):
global busyStartTime,totalBusyVisits,totalBusyTime
global Nfree,busyEndTime,Jrv
self.trace("User "+`self.i`+" started")
while now()<= simulationtime:
visitedlocation = ""
Y = random()
if Y <= correlation:
allvisits = self.getfriendsvisits()
visitedlocation =
self.getrandomfriendsvisit(allvisits)
self.trace("A friend visit "+`visitedlocation`)
else:
visitedlocation = randint(0,maxnumvisits)
self.trace("A random visit "+`visitedlocation`)

visitshist[visitedlocation]+=1
self.visits.append(visitedlocation)
"""visitsrate = gauss(visitsrate_mean,visitsrate_sd)"""
visitsrate = visitsrate_mean
yield hold,self,1/visitsrate

def trace(self,message):
if TRACING: print "%7.4f \t%s %s "%(now(), message , self.name)


""" Begin Main"""
simulationtime = 1000
correlation = 0.5
maxnumvisits = 1023
visitshist = []
for i in range(maxnumvisits+1):
visitshist.append(0)
numoffriends_mean = 100
numoffriends_sd = 30
maxNumberOfUsers = 10000
visitsrate_mean = 8.0
visitsrate_sd = 0.2
TRACING = 0
GTRACING =0

g = Generator(maxNumberOfUsers)
activate(g,g.execute())
simulate(until=simulationtime)

visitshist.sort()
print visitshist
print "Simulation ended"

In the simulation, we have six main independent (inputs); explained below as follows: (1) Number of spatial locations (NSL): it represents the total number of spatial locations that any user can visit at any time. (2) Average User Popularity (AUP): it represents the average number of friends per user (i.e., following a Gaussian distribution) for the population of all users in the social network. (3) Number of Users (NU): it represents the total number of users in the social network. (4) Average Visit Rate (AVR): it represents the average rate (i.e., following a Gaussian distribution) at which each user visits (check-ins) at any random spatial location. It is measured in number of visits per day. (5) Mobility-Friendship Correlation ratio (MFC): it is a value from 0 to 1 that determines the amount of correlation between being friends and visiting the same places. (6) Simulation time (ST): It represents the total time (i.e., number of days) over which we run the simulation.

Given the aforementioned independent variables, four dependent variables are measured: (1) Number of Visits (NV [i]): It represents the number of visits per a single spatial location. In other words, each spatial location i (i.e., such that i takes the value from 1 to Number of Spatial Locations (NSL)) has number of visits (users check-ins) NV[i]. (2) Minimum Location Visits (Min): it represents the number of visits (check-ins) in the spatial location that has the lowest number of user visits. (3) Maximum Location Visits (Max): it represents the number of visits (check-ins) in the spatial location that has the highest number of visits. (4) Location Visits Range (Range): It represents the absolute value of the di erence between the Maximum Location Visits (Max) and the Minimum Location Visits (Min).

In the simulation, three main independent variables are taken into account: (1) Average User Popularity(AUP), (2) Average Visit Rate (AV R), and (3) Mobility-Friendship Correlation ratio (MFC). Each of the three independent variables are varied, while keeping the other variables constant. We have run three main simulation experiments, measuring the e ect of each independent variable as follows:

Experiment 1 (Eff ect of varying Average User Popularity (AUP)): In this experiment, we assign the constant values of 0.5 and 0.6667 to Mobility-Friendship Correlation ratio (MFC) and Average Visit Rate (AV R), respectively. We then measure the effect of Average User Popularity (AUP) taking the values of 140, 80, 160, 320, 640, 1280, 2560 on the Number of Visits (NV [i]) for each spatial location i such that 1  i  NSL. I have also measured the e ffect of AUP on both Minimum Location Visits (Min) and Maximum Location Visits (Max). The following figure shows the values of both Minimum Location Visits (Min) and Maximum Location Visits (Max when varying AUP. From the gure, we can see that the Min is slightly decreasing and Max is substantially increasing. This trend is explained by the fact that the popularity of the users that visits a certain place increases the probability that the friends of this user and the friend of his friends and all the way through the social graph) will visit the same place.



popularity.png

Experiment 2 (E ffect of varying Average Visit Rate (AVR)): In this experiment, we assign the values of 0.5 and 100 to Mobility-Friendship Correlation ratio (MFC) and Average User Popularity (AUP), respectively. Therefore, we measure the e ffect of Average Visit Rate (AV R) taking values of 0.5, 1.0, 2.0, 4.0, 8.0 on the same dependent variables measured in Experiment 1 (i.e., NV [i], Min, and Max). The following figure shows the values of both Minimum Location Visits (Min) and Maximum Location Visits (Max) when varying AVR. In the figure, It turns out that Min and Max are increasing approximately the same proportion which is intuitive as the total number of visits in each place increases in the same simulation time period.

visitrate.png




Experiment 3 (Eff ect of varying Mobility-Friendship Correlation ratio (MFC)): In this experiment, we assign the values of 0.5 and 100 to Average Visit Rate (AV R) and Average User Popularity (AUP), receptively. Then, we measure the e ect of varying Mobility-Friendship Correlation ratio (MFC) taking the values of 0.0, 0.2, 0.4, 0.8, 1.0 on the same dependent variables measured in both Experiment 1 and Experiment 2 (i.e., NV [i], Min, and Max). The following figure shows both Minimum Location Visits (Min) and Maximum Location Visits (Max) when varying MFC. The impact is quite intuitive; Max is substantially increasing when increasing MFC as some place are getting more and more attention (visits). Also, Min is slightly decreasing as some places were not initially visited by most of the users, which lead to less people interested to visit those place as their friends did not visit these places before. The results of applying this experiment show how the e ffect of Friendship-to-Mobility correlation could be manipulated to influence the users to visiting specific places.

correlation.png

About this Archive

This page is an archive of entries from January 2012 listed from newest to oldest.

November 2011 is the previous archive.

March 2012 is the next archive.

Find recent content on the main index or look in the archives to find all content.

Categories

Powered by Movable Type 4.31-en