Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
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()