def opmap_stat(): movdata = 'data/hcl_mesos0825' bsmap = 'data/hcl_mesos0825_bm' bsmap = BaseStationMap(bsmap) opgraph = load_oppmap(bsmap) opnodes = opgraph.nodes(data=True) for person in movement_reader(open(movdata, 'rb'), bsmap): if person.distinct_loc_num() < 2: continue rg = person.radius_of_gyration() alpha = 1 delta = 0.05 locs = person.coordinates home = person.coordinates[0] max_trd = np.max([ greate_circle_distance(home[0], home[1], i[0], i[1]) for i in person.coordinates ]) for i in range(0, len(locs) - 1): j = i + 1 dist = greate_circle_distance(locs[i][0], locs[i][1], locs[j][0], locs[j][1]) # all opportunities for current location with radius rg person_opnodes = [] for nn, vv in opnodes: if greate_circle_distance(nn[0], nn[1], locs[i][0], locs[i][1]) <= rg * alpha: person_opnodes.append((nn, vv['weight'])) aops = [] iops = [] for nn, value in person_opnodes: gcd = greate_circle_distance(locs[i][0], locs[i][1], nn[0], nn[1]) if gcd < dist * (1 - delta): iops.append((nn, value)) elif gcd >= dist * (1 - delta) and gcd <= dist * (1 + delta): aops.append((nn, value)) print aops, iops avops_total = np.sum([p[1] for p in aops]) avops_max = np.max([p[1] for p in aops]) inops_total = np.sum([p[1] for p in iops]) inops_max = np.max([p[1] for p in iops]) print person.id, rg, avops_total, inops_total, avops_max, inops_max break
def opmap_stat(): movdata = 'data/hcl_mesos0825' bsmap = 'data/hcl_mesos0825_bm' bsmap = BaseStationMap(bsmap) opgraph = load_oppmap(bsmap) opnodes = opgraph.nodes(data=True) for person in movement_reader(open(movdata, 'rb'), bsmap): if person.distinct_loc_num() < 2: continue rg = person.radius_of_gyration() alpha = 1 delta = 0.05 locs = person.coordinates home = person.coordinates[0] max_trd = np.max([greate_circle_distance(home[0], home[1], i[0], i[1]) for i in person.coordinates]) for i in range(0, len(locs) - 1): j = i + 1 dist = greate_circle_distance(locs[i][0], locs[i][1], locs[j][0], locs[j][1]) # all opportunities for current location with radius rg person_opnodes = [] for nn, vv in opnodes: if greate_circle_distance(nn[0], nn[1], locs[i][0], locs[i][1]) <= rg * alpha: person_opnodes.append((nn, vv['weight'])) aops = [] iops = [] for nn, value in person_opnodes: gcd = greate_circle_distance(locs[i][0], locs[i][1], nn[0], nn[1]) if gcd < dist * (1 - delta): iops.append((nn, value)) elif gcd >= dist * (1 - delta) and gcd <= dist * (1 + delta): aops.append((nn, value)) print aops, iops avops_total = np.sum([p[1] for p in aops]) avops_max = np.max([p[1] for p in aops]) inops_total = np.sum([p[1] for p in iops]) inops_max = np.max([p[1] for p in iops]) print person.id, rg, avops_total, inops_total, avops_max, inops_max break
def empirical_data(): ifname = 'data/hcl_mesos0822_sample0.2' bsmap = bsmap = BaseStationMap('data/hcl_mesos0822_bm') ofile = open('data/mesos_model_emp_stat2', 'wb') for person in movement_reader(open(ifname), bsmap): if len(person) < 2: continue uid = person.id rg = person.radius_of_gyration() totloc = len(set(person.locations)) traj = person.coordinates trvdist = [greate_circle_distance(traj[i][0], traj[i][1], traj[i+1][0], traj[i+1][1]) for i in range(len(traj)-1)] totdist = np.sum(trvdist) ofile.write('%d\t%.3f\t%d\t%.3f\t%s\n' % ( uid, rg, totloc, totdist, ','.join(['%.3f' % i for i in trvdist]), )) ofile.close()
def model_maxoppo(): ofname = 'data/mesos_model_mom_stat' ofile = open(ofname, 'wb') bsmap = BaseStationMap('data/hcl_mesos0825_bm') opmap = load_oppmap(bsmap) dtmodel = load_dtmodels() nmodel = len(dtmodel) TIMEBOUND = 18 for j in range(1, 1000): # User profile uid = j dtm = dtmodel[np.random.random_integers(nmodel)] rhome = gen_random_home(opmap) rg = gen_rg.rvs() print '%d: %.3f' % (uid, rg) traj = [rhome] traj_dts = [6] acctime = 0 isvalid = True while acctime < TIMEBOUND: print acctime # determine dwelling time dt = random_dt(dtm[0], dtm[1], dtm[2], dtm[3], dtm[4]) if acctime + dt > TIMEBOUND: dt = TIMEBOUND - acctime traj_dts.append(dt) acctime += dt # determine location try: iops = person_map(traj, rg, opmap) maxloc = rhome maxdist = 0 for i in iops: if i != traj[-1]: dist = greate_circle_distance(i[0], i[1], traj[-1][0], traj[-1][1]) if dist > maxdist: maxloc = i maxdist = dist traj.append(maxloc) except: isvalid = False if not isvalid: print isvalid continue traj.append(rhome) traj_dts.append(0) # stat totloc = len(set(traj)) dtloc = {} for l in range(len(traj)): if traj[l] not in dtloc: dtloc[traj[l]] = 0 dtloc[traj[l]] += traj_dts[l] trvdist = [greate_circle_distance(traj[i][0], traj[i][1], traj[i+1][0], traj[i+1][1]) for i in range(len(traj)-1)] totdist = np.sum(trvdist) print trvdist ofile.write('%d\t%.3f\t%d\t%.3f\t%s\n' % ( uid, rg, totloc, totdist, ','.join(['%.3f' % i for i in trvdist]), )) ofile.close()