diff options
Diffstat (limited to 'src/main/java/edu')
3 files changed, 71 insertions, 5 deletions
diff --git a/src/main/java/edu/brown/cs/student/term/Main.java b/src/main/java/edu/brown/cs/student/term/Main.java index 5c7497f..1c9b1f7 100644 --- a/src/main/java/edu/brown/cs/student/term/Main.java +++ b/src/main/java/edu/brown/cs/student/term/Main.java @@ -8,6 +8,7 @@ import edu.brown.cs.student.term.hub.SuspicionRanker; import edu.brown.cs.student.term.repl.Command; import edu.brown.cs.student.term.repl.REPL; import edu.brown.cs.student.term.repl.commands.LoadCommand; +import edu.brown.cs.student.term.repl.commands.RankCommand; import edu.brown.cs.student.term.repl.commands.SetupCommand; import edu.brown.cs.student.term.trade.Trade; import joptsimple.OptionParser; @@ -88,6 +89,7 @@ public final class Main { HashMap<String, Command> commandHashMap = new HashMap<>(); commandHashMap.put("setup", new SetupCommand()); commandHashMap.put("load", new LoadCommand()); + commandHashMap.put("rank", new RankCommand()); /** add commands to map here! */ REPL repl = new REPL(commandHashMap); repl.runREPL(); 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 2b567c2..74628aa 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 @@ -15,23 +15,36 @@ public class SuspicionRanker { this.querier = db; } - public <K, V extends Comparable<V>> V getMaxOfMap(Map<K, V> map) { + private <K, V extends Comparable<V>> V getMaxOfMap(Map<K, V> map) { Map.Entry<K, V> maxEntry = Collections.max(map.entrySet(), Map.Entry.comparingByValue()); return maxEntry.getValue(); } - public <K, V extends Comparable<V>> V getMinOfMap(Map<K, V> map) { + private <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(); } + private class SuspicionComparator implements Comparator<Holder> { + @Override + public int compare(Holder o1, Holder o2) { + if (o1.getSuspicionScore() > o2.getSuspicionScore()) { + return -1; + } else if (o1.getSuspicionScore() < o2.getSuspicionScore()) { + return 1; + } else { + return 0; + } + } + } + public List<Holder> getSuspicionScoreList(Instant start, Instant end) { + PriorityQueue<Holder> orderedSuspicion = new PriorityQueue<>(new SuspicionComparator()); List<Holder> suspicionList = new ArrayList<>(); try { LinkMapper lm = new LinkMapper(querier); HubSearch hub = new HubSearch(lm); Map<Holder, Double> holderToHubScore = hub.runHubSearch(start, end); - System.out.println(holderToHubScore); ProfitCalculation pc = new ProfitCalculation(DatabaseQuerier.getConn(), "", new Date(start.toEpochMilli()), @@ -58,7 +71,6 @@ public class SuspicionRanker { profitMax = 1; } - double hubMax = getMaxOfMap(holderToHubScore); for (Holder guy : holderToHubScore.keySet()) { @@ -67,12 +79,16 @@ public class SuspicionRanker { double normalizedHubScore = holderToHubScore.get(guy) / hubMax; double suspicionScore = normalizedHubScore * 0.6 + normalizedProfitScore * 0.4; guy.setSuspicionScore(suspicionScore); - suspicionList.add(guy); + orderedSuspicion.add(guy); } } catch (Exception e) { e.printStackTrace(); System.out.println("ERROR: Could not connect to database querier"); } + int size = orderedSuspicion.size(); + for(int i = 0; i < size; i++){ + suspicionList.add(orderedSuspicion.poll()); + } return suspicionList; } } diff --git a/src/main/java/edu/brown/cs/student/term/repl/commands/RankCommand.java b/src/main/java/edu/brown/cs/student/term/repl/commands/RankCommand.java new file mode 100644 index 0000000..2005f19 --- /dev/null +++ b/src/main/java/edu/brown/cs/student/term/repl/commands/RankCommand.java @@ -0,0 +1,48 @@ +package edu.brown.cs.student.term.repl.commands; + +import edu.brown.cs.student.term.DatabaseQuerier; +import edu.brown.cs.student.term.hub.Holder; +import edu.brown.cs.student.term.hub.SuspicionRanker; +import edu.brown.cs.student.term.repl.Command; +import org.json.JSONObject; + +import java.time.Instant; +import java.util.List; + +public class RankCommand implements Command { + + private String error; + + @Override + public String run(String[] args) { + + error = ""; + if(args.length == 2){ + try{ + DatabaseQuerier dq = SetupCommand.getDq(); + DatabaseQuerier db = SetupCommand.getDq(); + SuspicionRanker ranker = new SuspicionRanker(db); + + long startMilli = Long.parseLong(args[0]); + long endMilli = Long.parseLong(args[1]); + Instant start = Instant.ofEpochMilli(startMilli); + Instant end = Instant.ofEpochMilli(endMilli); + List<Holder> suspiciousHolders = ranker.getSuspicionScoreList(start, end); + for(Holder h: suspiciousHolders){ + System.out.println(h.toString()); + } + } catch (Exception e) { + error = "ERROR: Could not connect to database. Ensure this is a valid database."; + System.out.println(error); + return error; + } + } else { + error = "ERROR: Incorrect number of arguments for suspicion rank command:" + + " rank [start date in epoch milliseconds] [end date in epoch milliseconds]"; + System.out.println(error); + return error; + } + return error; + + } +} |
