def init_few_fix_evenly_user():       # Scenario : User reports are very few and reports are evenly distributed in fixed-distant interval.
    mylist = []
    for x in range(0, pr.map_size[0], 5):
        for y in range(0, pr.map_size[1], 5):            
            print x, y
            mylist.append( User(getID('user'), x, y) )
    return mylist     
def init_user():
    mylist = []
    with open(pr.fn_pos_random, 'rb') as f:
        pos = pk.load(f)
        pos_um = pos[1]
    for i in range(pr.user_no):
        x = pos_um[i][0]
        y = pos_um[i][1]
        mylist.append(User(getID('user'), x, y))
    return mylist
def init_cell():
    mylist = []
    fn_opened = pr.fn_pos_fixed if pr.fix_cell_pos else pr.fn_pos_random
    with open(fn_opened, 'rb') as f:
        pos = pk.load(f)  # include [cm, um]
        pos_cm = pos[0]
    for i in range(pr.cell_no):
        x = pos_cm[i][0]
        y = pos_cm[i][1]
        power = pos_cm[i][2]
        mylist.append(Cell(getID('cell'), x, y, power))
    return mylist
def init_nonuniform_user():  # non-uniform spatial distribution of user report
    mylist = []
    n_room = 4
    n_per_room = [120, 120, 120, 119]
    center = [[28, 6], [30, 19], [70, 6],
              [79,
               19]]  #room1~4 : left-bottom, left-up, right-bottom, right-up.
    variance = [[8, 2.2], [9, 2.2], [9.5, 2.2], [7, 2.2]]
    for i in range(n_room):
        x = np.random.normal(loc=center[i][0],
                             scale=variance[i][0],
                             size=n_per_room[i])
        y = np.random.normal(loc=center[i][1],
                             scale=variance[i][1],
                             size=n_per_room[i])
        for j in range(n_per_room[i]):
            mylist.append(User(getID('user'), x[j], y[j]))
    return mylist
def init_nonuniform_user():   # non-uniform spatial distribution of user report
    mylist = []
    n_report = 500
    n_room = 4
    center = [[27, 6], [30, 19], [70, 6], [79, 19]]   #room1~4 : left-bottom, left-up, right-bottom, right-up.
    variance = [[9, 2.2], [8, 2.2], [9.5, 2.2], [7, 2.2]]
    distribution = 'gaussian'    # non-uniform distribution : gaussian/ laplace/ triangular
    if distribution == 'gaussian':
        # Naive Method:
        # x = np.random.normal(loc=rd.uniform(35, 70), scale=rd.uniform(18, 23), size=n_report) 
        # y = np.random.normal(loc=rd.uniform(8, 17), scale=rd.uniform(4, 8), size=n_report) 
        for i in range(n_room):
            n_per_room = n_report/ n_room
            x = np.random.normal(loc=center[i][0], scale=variance[i][0], size=n_per_room)  
            y = np.random.normal(loc=center[i][1], scale=variance[i][1], size=n_per_room)
            for j in range(n_per_room):
                mylist.append( User(getID('user'), x[j], y[j]) )
    return mylist