From f18e007c63f7d5c15721af14a47f85ad533bcab7 Mon Sep 17 00:00:00 2001 From: Mo Date: Mon, 25 Apr 2016 15:48:07 +0300 Subject: [PATCH] improve compute min lands --- .../analysis/MutableRouteSpecification.java | 4 ++-- .../analysis/NullRouteSpecification.java | 2 +- .../trader/analysis/RouteSpecification.java | 19 ++++++++++--------- .../analysis/RouteSpecificationAndMixer.java | 15 ++++++++++++--- .../analysis/RouteSpecificationByPair.java | 7 +++++-- .../analysis/RouteSpecificationByTargets.java | 8 +++++--- .../analysis/RouteSpecificationOrMixer.java | 16 +++++++++++++--- .../analysis/graph/CrawlerSpecification.java | 15 +++++++++------ 8 files changed, 57 insertions(+), 29 deletions(-) diff --git a/core/src/main/java/ru/trader/analysis/MutableRouteSpecification.java b/core/src/main/java/ru/trader/analysis/MutableRouteSpecification.java index e2fe973..6102ced 100644 --- a/core/src/main/java/ru/trader/analysis/MutableRouteSpecification.java +++ b/core/src/main/java/ru/trader/analysis/MutableRouteSpecification.java @@ -3,8 +3,8 @@ package ru.trader.analysis; public interface MutableRouteSpecification extends RouteSpecification { @Override - public default boolean updateMutated(){return true;} + default boolean updateMutated(){return true;} @Override - public default boolean mutable(){return true;} + default boolean mutable(){return true;} } diff --git a/core/src/main/java/ru/trader/analysis/NullRouteSpecification.java b/core/src/main/java/ru/trader/analysis/NullRouteSpecification.java index 27565cd..f60fe06 100644 --- a/core/src/main/java/ru/trader/analysis/NullRouteSpecification.java +++ b/core/src/main/java/ru/trader/analysis/NullRouteSpecification.java @@ -21,7 +21,7 @@ public class NullRouteSpecification implements RouteSpecification { } @Override - public int matchCount() { + public int maxMatches() { return 1; } } diff --git a/core/src/main/java/ru/trader/analysis/RouteSpecification.java b/core/src/main/java/ru/trader/analysis/RouteSpecification.java index 427e985..f30af65 100644 --- a/core/src/main/java/ru/trader/analysis/RouteSpecification.java +++ b/core/src/main/java/ru/trader/analysis/RouteSpecification.java @@ -5,17 +5,18 @@ import ru.trader.analysis.graph.Traversal; public interface RouteSpecification { - public boolean specified(Edge edge, Traversal entry); + boolean specified(Edge edge, Traversal entry); default boolean content(Edge edge, Traversal entry){return specified(edge, entry);} - public default int lastFound(Edge edge, Traversal entry){ - return specified(edge, entry) ? 0 : matchCount(); + default int lastFound(Edge edge, Traversal entry){ + return specified(edge, entry) ? 0 : minMatches(); } - public default int matchCount(){return 1;} - public default boolean updateMutated(){return false;} - public default boolean mutable(){return false;} - public default void update(Traversal entry){} - public default long getStart(){return 0;} - public default long getEnd(){return Long.MAX_VALUE;} + default int maxMatches(){return 1;} + default int minMatches(){return maxMatches();} + default boolean updateMutated(){return false;} + default boolean mutable(){return false;} + default void update(Traversal entry){} + default long getStart(){return 0;} + default long getEnd(){return Long.MAX_VALUE;} default RouteSpecification and(final RouteSpecification other){ if (other instanceof RouteSpecificationAndMixer){ diff --git a/core/src/main/java/ru/trader/analysis/RouteSpecificationAndMixer.java b/core/src/main/java/ru/trader/analysis/RouteSpecificationAndMixer.java index 3ac6f76..cc5ec19 100644 --- a/core/src/main/java/ru/trader/analysis/RouteSpecificationAndMixer.java +++ b/core/src/main/java/ru/trader/analysis/RouteSpecificationAndMixer.java @@ -53,10 +53,19 @@ public class RouteSpecificationAndMixer implements RouteSpecificationMixer } @Override - public int matchCount() { + public int maxMatches() { int res = 0; for (RouteSpecification specification : specifications) { - res += specification.matchCount(); + res += specification.maxMatches(); + } + return res; + } + + @Override + public int minMatches() { + int res = 0; + for (RouteSpecification specification : specifications) { + res += specification.minMatches(); } return res; } @@ -112,7 +121,7 @@ public class RouteSpecificationAndMixer implements RouteSpecificationMixer private int getMinHope(Collection> specifications){ if (specifications.isEmpty()) return -1; - return specifications.stream().mapToInt(RouteSpecification::matchCount).sum(); + return specifications.stream().mapToInt(RouteSpecification::minMatches).sum(); } private void collapse(RouteSpecification specification){ diff --git a/core/src/main/java/ru/trader/analysis/RouteSpecificationByPair.java b/core/src/main/java/ru/trader/analysis/RouteSpecificationByPair.java index b391208..49d8148 100644 --- a/core/src/main/java/ru/trader/analysis/RouteSpecificationByPair.java +++ b/core/src/main/java/ru/trader/analysis/RouteSpecificationByPair.java @@ -3,7 +3,10 @@ package ru.trader.analysis; import ru.trader.analysis.graph.Edge; import ru.trader.analysis.graph.Traversal; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Optional; public class RouteSpecificationByPair implements RouteSpecification { private final Collection first; @@ -78,7 +81,7 @@ public class RouteSpecificationByPair implements RouteSpecification { } @Override - public int matchCount() { + public int maxMatches() { return 2; } diff --git a/core/src/main/java/ru/trader/analysis/RouteSpecificationByTargets.java b/core/src/main/java/ru/trader/analysis/RouteSpecificationByTargets.java index 51a558d..948444e 100644 --- a/core/src/main/java/ru/trader/analysis/RouteSpecificationByTargets.java +++ b/core/src/main/java/ru/trader/analysis/RouteSpecificationByTargets.java @@ -3,7 +3,9 @@ package ru.trader.analysis; import ru.trader.analysis.graph.Edge; import ru.trader.analysis.graph.Traversal; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.Optional; public class RouteSpecificationByTargets implements RouteSpecification { private final Collection targets; @@ -74,13 +76,13 @@ public class RouteSpecificationByTargets implements RouteSpecification { if (targets.isEmpty()) return 0; if (checkTime()){ long time = edge.getTime(); - if (targetOnly && (time < start || time > end)) return matchCount(); + if (targetOnly && (time < start || time > end)) return maxMatches(); } return all ? containsAll(edge, entry) : containsAny(edge, entry); } @Override - public int matchCount() { + public int maxMatches() { if (targets.isEmpty()) return 0; return all ? targets.size() : 1; } diff --git a/core/src/main/java/ru/trader/analysis/RouteSpecificationOrMixer.java b/core/src/main/java/ru/trader/analysis/RouteSpecificationOrMixer.java index 6283c97..5e19519 100644 --- a/core/src/main/java/ru/trader/analysis/RouteSpecificationOrMixer.java +++ b/core/src/main/java/ru/trader/analysis/RouteSpecificationOrMixer.java @@ -49,10 +49,20 @@ public class RouteSpecificationOrMixer implements RouteSpecificationMixer, } @Override - public int matchCount() { + public int maxMatches() { + int res = 0; + for (RouteSpecification specification : specifications) { + res = Math.max(res, specification.maxMatches()); + } + return res; + } + + @Override + public int minMatches() { + if (specifications.isEmpty()) return 0; int res = Integer.MAX_VALUE; for (RouteSpecification specification : specifications) { - res = Math.min(res, specification.matchCount()); + res = Math.min(res, specification.minMatches()); } return res; } @@ -146,7 +156,7 @@ public class RouteSpecificationOrMixer implements RouteSpecificationMixer, int hard2 = getHard(o2); int cmp = Integer.compare(hard1, hard2); if (cmp != 0) return cmp; - return Integer.compare(o1.matchCount(), o2.matchCount()); + return Integer.compare(o1.minMatches(), o2.minMatches()); } } } \ No newline at end of file diff --git a/core/src/main/java/ru/trader/analysis/graph/CrawlerSpecification.java b/core/src/main/java/ru/trader/analysis/graph/CrawlerSpecification.java index 08b2ac2..8f95ffa 100644 --- a/core/src/main/java/ru/trader/analysis/graph/CrawlerSpecification.java +++ b/core/src/main/java/ru/trader/analysis/graph/CrawlerSpecification.java @@ -7,16 +7,19 @@ import java.util.function.Consumer; import java.util.function.Function; public interface CrawlerSpecification { - public RouteSpecification routeSpecification(); + RouteSpecification routeSpecification(); - public Consumer>> onFoundFunc(); + Consumer>> onFoundFunc(); - public Function, Object> getGroupGetter(boolean target); + Function, Object> getGroupGetter(boolean target); - public int getGroupCount(); + int getGroupCount(); - public default int getMinLands(){ - return routeSpecification() != null ? routeSpecification().matchCount() : 1; + default int getMinLands(){ + return routeSpecification() != null ? routeSpecification().minMatches() : 1; } + default int getMaxLands(){ + return routeSpecification() != null ? routeSpecification().maxMatches() : 1; + } }