Commit 23328613d26d61d3a9f20ef54f1c75f4677e97d6

Authored by Anthex
1 parent 8e9d77cf

fix return value of resolve_barycenter

Showing 2 changed files with 22 additions and 16 deletions   Show diff stats
@@ -3,8 +3,13 @@ from structure import * @@ -3,8 +3,13 @@ from structure import *
3 import sys 3 import sys
4 4
5 Tf = [] #cells table 5 Tf = [] #cells table
  6 +
6 testSample = RSSVector(-26, -42, -13, -46) 7 testSample = RSSVector(-26, -42, -13, -46)
  8 +testSample2 = RSSVector(-26, -42, -13, -46)
  9 +testSample3 = RSSVector(-26, -42, -13, -46)
7 10
  11 +testSamples = []
  12 +testSamples.extend([testSample, testSample2, testSample3])
8 13
9 #cells Table initialization 14 #cells Table initialization
10 for i in range (0, 3): 15 for i in range (0, 3):
@@ -12,6 +17,7 @@ for i in range (0, 3): @@ -12,6 +17,7 @@ for i in range (0, 3):
12 for k in range (0,3): 17 for k in range (0,3):
13 Tf[i].append([]) 18 Tf[i].append([])
14 19
  20 +#known fingerprints
15 Tf[0][0] = Cell(RSSVector(-38,-27,-54,-13), Location(2,2)) 21 Tf[0][0] = Cell(RSSVector(-38,-27,-54,-13), Location(2,2))
16 Tf[0][1] = Cell(RSSVector(-74,-62,-48,-33), Location(2,6)) 22 Tf[0][1] = Cell(RSSVector(-74,-62,-48,-33), Location(2,6))
17 Tf[0][2] = Cell(RSSVector(-13,-28,-12,-40), Location(2,10)) 23 Tf[0][2] = Cell(RSSVector(-13,-28,-12,-40), Location(2,10))
@@ -23,24 +29,20 @@ Tf[2][1] = Cell(RSSVector(-27,-28,-32,-45), Location(10,6)) @@ -23,24 +29,20 @@ Tf[2][1] = Cell(RSSVector(-27,-28,-32,-45), Location(10,6))
23 Tf[2][2] = Cell(RSSVector(-30,-20,-60,-40), Location(10,10)) 29 Tf[2][2] = Cell(RSSVector(-30,-20,-60,-40), Location(10,10))
24 30
25 def main(args): 31 def main(args):
26 -  
27 - print(Tf[1][1].v.n2)  
28 -  
29 - 32 + #### K neighbours ####
30 print("\nk neighbors of test sample : ") 33 print("\nk neighbors of test sample : ")
31 neighborsCells = KNeighbors(Tf, testSample) 34 neighborsCells = KNeighbors(Tf, testSample)
32 for k in neighborsCells: 35 for k in neighborsCells:
33 print("(", k.location.x, ";", k.location.y, ")") 36 print("(", k.location.x, ";", k.location.y, ")")
34 37
  38 + #### Distances ####
35 print ("\ndistances : " + str(testSample.distances)) 39 print ("\ndistances : " + str(testSample.distances))
36 40
37 - testLoc = Location(3,4,5)  
38 - loc2 = Location(1,2,3)  
39 - print((testLoc+loc2).toString())  
40 - 41 + #### Barycenter ####
41 a = resolve_barycenter(neighborsCells, testSample) 42 a = resolve_barycenter(neighborsCells, testSample)
42 - print(a.toString)  
43 - return 0; 43 + print(a.toString())
44 44
  45 + #### Markov ####
45 46
  47 + return 0;
46 main(sys.argv) 48 main(sys.argv)
47 \ No newline at end of file 49 \ No newline at end of file
1 -from operator import itemgetter 1 +from operator import itemgetter as ig
2 2
3 class RSSVector(): 3 class RSSVector():
4 distances = [] 4 distances = []
@@ -41,7 +41,8 @@ class Cell(): @@ -41,7 +41,8 @@ class Cell():
41 def __init__(self, v_, loc): 41 def __init__(self, v_, loc):
42 self.v = v_ 42 self.v = v_
43 self.location = loc 43 self.location = loc
44 - 44 + self.Likeliness = .0 # Probability of Markov model
  45 + self.pastCount = 1
45 46
46 def KNeighbors(fingerprints, sample): 47 def KNeighbors(fingerprints, sample):
47 ''' 48 '''
@@ -58,7 +59,7 @@ def KNeighbors(fingerprints, sample): @@ -58,7 +59,7 @@ def KNeighbors(fingerprints, sample):
58 + abs(currentItem.v.n3 - sample.n3) \ 59 + abs(currentItem.v.n3 - sample.n3) \
59 + abs(currentItem.v.n4 - sample.n4) 60 + abs(currentItem.v.n4 - sample.n4)
60 distances.append((dist, currentItem)) 61 distances.append((dist, currentItem))
61 - distances = sorted(distances, key=itemgetter(0)) 62 + distances = sorted(distances, key=ig(0))
62 neighbours = [] 63 neighbours = []
63 for k in range (0,4): 64 for k in range (0,4):
64 neighbours.append(distances[k][1]) 65 neighbours.append(distances[k][1])
@@ -72,9 +73,12 @@ def resolve_barycenter(neighbourCells, sample): @@ -72,9 +73,12 @@ def resolve_barycenter(neighbourCells, sample):
72 Returns the weighted barycenter of the 4 neighbouring cells 73 Returns the weighted barycenter of the 4 neighbouring cells
73 :param Cell[4] neighbourCells: Array containing the 4 closest cells 74 :param Cell[4] neighbourCells: Array containing the 4 closest cells
74 :param RSSIVector sample: Sample of the mobile terminal 75 :param RSSIVector sample: Sample of the mobile terminal
75 - :return Location: Estimated location of the mobile terminal 76 + :return Location: Estimated location of the mobile terminal (return None if error)
76 ''' 77 '''
77 d = sample.distances #shorter notation 78 d = sample.distances #shorter notation
78 - a1,a2,a3,a4 = 1 / (1+d[0]/d[1]+d[0]/d[2]+d[0]/d[3]), 1 / (1+d[1]/d[0]+d[1]/d[2]+d[1]/d[3]), 1 / (1+d[2]/d[1]+d[2]/d[0]+d[2]/d[3]), 1 / (1+d[3]/d[1]+d[3]/d[2]+d[3]/d[0])  
79 - return a1*neighbourCells[0].location + a2*neighbourCells[1].location + a3*neighbourCells[1].location + a4*neighbourCells[1].location 79 + a1,a2,a3,a4 = 1 / (1+d[0]/d[1]+d[0]/d[2]+d[0]/d[3]),\
  80 + 1 / (1+d[1]/d[0]+d[1]/d[2]+d[1]/d[3]),\
  81 + 1 / (1+d[2]/d[1]+d[2]/d[0]+d[2]/d[3]),\
  82 + 1 / (1+d[3]/d[1]+d[3]/d[2]+d[3]/d[0])
  83 + return None if a1+a2+a3+a4 != 1.0 else a1*neighbourCells[0].location + a2*neighbourCells[1].location + a3*neighbourCells[2].location + a4*neighbourCells[3].location
80 84
81 \ No newline at end of file 85 \ No newline at end of file