aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulia McCauley <skurvyj@gmail.com>2021-04-16 12:30:09 -0400
committerJulia McCauley <skurvyj@gmail.com>2021-04-16 12:30:09 -0400
commit6feeaca9f4c12ee90bbf86fe21a45b64cfc4983d (patch)
treec2d52baee5ca69af5227ad9f780553239a1d8684
parent6aa7726c63373f81aa8c83b1da2a8c6d9a21fae3 (diff)
need to pull profit map changes
-rw-r--r--src/main/java/edu/brown/cs/student/term/hub/Holder.java24
-rw-r--r--src/main/java/edu/brown/cs/student/term/hub/HubSearch.java3
-rw-r--r--src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java23
-rw-r--r--src/test/java/edu/brown/cs/student/HubRankTest.java43
-rw-r--r--src/test/java/edu/brown/cs/student/SuspicionRankerTest.java7
5 files changed, 88 insertions, 12 deletions
diff --git a/src/main/java/edu/brown/cs/student/term/hub/Holder.java b/src/main/java/edu/brown/cs/student/term/hub/Holder.java
index 66def5e..47a20ae 100644
--- a/src/main/java/edu/brown/cs/student/term/hub/Holder.java
+++ b/src/main/java/edu/brown/cs/student/term/hub/Holder.java
@@ -1,15 +1,17 @@
package edu.brown.cs.student.term.hub;
-import java.util.Objects;
+import java.util.*;
public class Holder {
private int id;
private String name;
private double suspicionScore;
+ private Set<Holder> followers;
public Holder(int id, String name){
this.id = id;
this.name = name;
+ followers = new HashSet<>();
}
public int getId() {
@@ -26,11 +28,29 @@ public class Holder {
return name;
}
+ public Set<Holder> getFollowers() {
+ return followers;
+ }
+
+ public void addFollower(Holder follower){
+ followers.add(follower);
+ }
+
@Override
- public String toString() {
+ public String toString() {
return name;
}
+
+ public String toTestString() {
+ return "Holder{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", suspicionScore=" + suspicionScore +
+ ", followers=" + followers +
+ '}';
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java b/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java
index ccefeef..86b883f 100644
--- a/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java
+++ b/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java
@@ -60,9 +60,12 @@ public class HubSearch {
who followed leader or the number of people who follower followed
--- probably the second option ;( */
Set<Holder> peopleFollowed = followerToLeaderMap.get(follower);
+
int numberFollowed = peopleFollowed.size();
if(peopleFollowed.contains(leader)){
+ //constructs the leader to follower links as we go for use later on
+ leader.addFollower(follower);
return ((damp / numHolders) + (1 - damp) * (1.0 / numberFollowed));
} else if(numberFollowed == 0){
return ((damp / numHolders) + (1 - damp) * (1.0 / numHolders));
diff --git a/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java b/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java
index 9f5f9c1..b52a47a 100644
--- a/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java
+++ b/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java
@@ -17,8 +17,11 @@ public class SuspicionRanker {
public <K, V extends Comparable<V>> V getMaxOfMap(Map<K, V> map) {
Map.Entry<K, V> maxEntry = Collections.max(map.entrySet(), Map.Entry.comparingByValue());
- System.out.println(maxEntry);
- System.out.println(maxEntry.getValue());
+ return maxEntry.getValue();
+ }
+
+ public <K, V extends Comparable<V>> V getMinOfMap(Map<K, V> map) {
+ Map.Entry<K, V> maxEntry = Collections.min(map.entrySet(), Map.Entry.comparingByValue());
return maxEntry.getValue();
}
@@ -36,11 +39,27 @@ public class SuspicionRanker {
Map<Integer, Double> profitMap = pc.getProfitMap();
double profitMax = getMaxOfMap(profitMap);
+ /*if all of our values are negative, we need to flip sides so that the
+ * biggest loser doesn't end up being the most suspicious person*/
+ if(profitMax <= 0) {
+ profitMax = Math.abs(getMinOfMap(profitMap));
+ }
+
+ System.out.println("the max: " + profitMax);
+
+ /*if both the min we found and max we found are 0, then we have
+ the special case where all the values are 0, in which case we
+ need to avoid dividing by 0*/
+ if(profitMax == 0){
+ profitMax = 1;
+ }
+
double hubMax = getMaxOfMap(holderToHubScore);
for (Holder guy : holderToHubScore.keySet()) {
double normalizedProfitScore = profitMap.get(guy.getId()) / profitMax;
+
double normalizedHubScore = holderToHubScore.get(guy) / hubMax;
double suspicionScore = normalizedHubScore * 0.6 + normalizedProfitScore * 0.4;
guy.setSuspicionScore(suspicionScore);
diff --git a/src/test/java/edu/brown/cs/student/HubRankTest.java b/src/test/java/edu/brown/cs/student/HubRankTest.java
index 60376dd..07fd282 100644
--- a/src/test/java/edu/brown/cs/student/HubRankTest.java
+++ b/src/test/java/edu/brown/cs/student/HubRankTest.java
@@ -24,6 +24,13 @@ public class HubRankTest {
private DatabaseQuerier db;
+ Holder don = new Holder(1, "Don");
+ Holder mitch = new Holder(2, "Mitch");
+ Holder nancy = new Holder(3, "Nancy");
+ Holder midge = new Holder(4, "Midge");
+ Holder bob = new Holder(5, "Bob");
+ Holder jane = new Holder(6, "Jane");
+
@Before
public void setUp() {
try{
@@ -79,12 +86,6 @@ public class HubRankTest {
LinkMapper lm = new LinkMapper(db);
HubSearch hub = new HubSearch(lm);
Map<Holder, Double> hubRanks = hub.runHubSearch(start, end);
- Holder don = new Holder(1, "Don");
- Holder mitch = new Holder(2, "Mitch");
- Holder nancy = new Holder(3, "Nancy");
- Holder midge = new Holder(4, "Midge");
- Holder bob = new Holder(5, "Bob");
- Holder jane = new Holder(6, "Jane");
System.out.println(hubRanks);
assertTrue(hubRanks.get(mitch) > hubRanks.get(don));
@@ -95,4 +96,34 @@ public class HubRankTest {
tearDown();
}
+
+ @Test
+ public void testFollowersSetsConstructedProperly(){
+ setUp();
+ LinkMapper lm = new LinkMapper(db);
+ HubSearch hub = new HubSearch(lm);
+ Map<Holder, Double> hubRanks = hub.runHubSearch(start, end);
+
+ for(Holder person: hubRanks.keySet()){
+ System.out.println(person.getName() + " " + person.getFollowers());
+ if(person.equals(don)) {
+ assertTrue(person.getFollowers().contains(mitch));
+ assertTrue(person.getFollowers().contains(nancy));
+ assertTrue(person.getFollowers().contains(midge));
+ } else if(person.equals(bob)){
+ assertTrue(person.getFollowers().contains(mitch));
+ assertTrue(person.getFollowers().contains(midge));
+ } else if(person.equals(nancy)){
+ assertTrue(person.getFollowers().contains(midge));
+ } else if(person.equals(mitch)){
+ assertTrue(person.getFollowers().contains(nancy));
+ assertTrue(person.getFollowers().contains(midge));
+ assertTrue(person.getFollowers().contains(bob));
+ } else{
+ assertTrue(person.getFollowers().isEmpty());
+ }
+ }
+
+ tearDown();
+ }
}
diff --git a/src/test/java/edu/brown/cs/student/SuspicionRankerTest.java b/src/test/java/edu/brown/cs/student/SuspicionRankerTest.java
index bc9b339..266eb30 100644
--- a/src/test/java/edu/brown/cs/student/SuspicionRankerTest.java
+++ b/src/test/java/edu/brown/cs/student/SuspicionRankerTest.java
@@ -30,7 +30,7 @@ public class SuspicionRankerTest {
@Before
public void setUp() {
try{
- db = new DatabaseQuerier("data/lil_mock.sqlite3");
+ db = new DatabaseQuerier("data/trades.sqlite3");
} catch(Exception e){
System.out.println("DBQuerier Test, couldn't connect to db???");
}
@@ -46,7 +46,10 @@ public class SuspicionRankerTest {
setUp();
SuspicionRanker r = new SuspicionRanker(db);
List<Holder> him = r.getSuspicionScoreList(start, end);
- assertEquals(6, him.size());
+ //assertEquals(6, him.size());
+ for(Holder p: him){
+ System.out.println(p.toTestString());
+ }
tearDown();
}