refactoring searcher
This commit is contained in:
@@ -61,41 +61,6 @@ public class RouteSearcher {
|
|||||||
return paths;
|
return paths;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Route> getRoutes(Collection<Vendor> fVendors, Collection<Vendor> vendors){
|
|
||||||
return getRoutes(fVendors, vendors, vendors);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Route> getRoutes(Collection<Vendor> fVendors, Collection<Vendor> toVendors, Collection<Vendor> vendors){
|
|
||||||
List<Route> res = new LimitedQueue<>(scorer.getProfile().getRoutesCount());
|
|
||||||
int count = (int) Math.ceil(scorer.getProfile().getRoutesCount() / fVendors.size());
|
|
||||||
CrawlerSpecificator specificator = new CrawlerSpecificator();
|
|
||||||
specificator.any(toVendors);
|
|
||||||
for (Vendor fromVendor : fVendors) {
|
|
||||||
Collection<Route> routes = search(fromVendor, fromVendor, vendors, count, specificator);
|
|
||||||
res.addAll(routes);
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Route> getRoutes(Vendor from, Collection<Vendor> vendors){
|
|
||||||
CrawlerSpecificator specificator = new CrawlerSpecificator();
|
|
||||||
specificator.any(vendors);
|
|
||||||
return search(from, from, vendors, scorer.getProfile().getRoutesCount(), specificator);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Route> getRoutes(Vendor from, Vendor to, Collection<Vendor> vendors){
|
|
||||||
return getRoutes(from, to, vendors, scorer.getProfile().getRoutesCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Route> getRoutes(Vendor source, Vendor target, Collection<Vendor> vendors, int count){
|
|
||||||
return search(source, target, vendors, count, new CrawlerSpecificator());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public List<Route> getLoops(Vendor source, Collection<Vendor> vendors, int count){
|
|
||||||
return searchLoops(source, vendors, count, new CrawlerSpecificator());
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Route> search(Vendor source, Vendor target, Collection<Vendor> vendors, int count, CrawlerSpecificator specificator){
|
public List<Route> search(Vendor source, Vendor target, Collection<Vendor> vendors, int count, CrawlerSpecificator specificator){
|
||||||
LOG.trace("Start search route from {} to {}", source, target);
|
LOG.trace("Start search route from {} to {}", source, target);
|
||||||
VendorsGraph vGraph = new VendorsGraph(scorer, callback);
|
VendorsGraph vGraph = new VendorsGraph(scorer, callback);
|
||||||
@@ -109,7 +74,7 @@ public class RouteSearcher {
|
|||||||
return collector.get();
|
return collector.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Route> searchLoops(Vendor source, Collection<Vendor> vendors, int count, CrawlerSpecificator specificator){
|
public List<Route> searchLoops(Vendor source, Collection<Vendor> vendors, CrawlerSpecificator specificator){
|
||||||
LOG.trace("Start search loops from {}", source);
|
LOG.trace("Start search loops from {}", source);
|
||||||
VendorsGraph vGraph = new VendorsGraph(scorer, callback);
|
VendorsGraph vGraph = new VendorsGraph(scorer, callback);
|
||||||
LOG.trace("Build vendors graph");
|
LOG.trace("Build vendors graph");
|
||||||
|
|||||||
@@ -192,7 +192,9 @@ public class MarketAnalyzer {
|
|||||||
while (iterator.hasNext()){
|
while (iterator.hasNext()){
|
||||||
Vendor vendor = iterator.next();
|
Vendor vendor = iterator.next();
|
||||||
if (callback.isCancel()) break;
|
if (callback.isCancel()) break;
|
||||||
Collection<Route> paths = searcher.getRoutes(vendor, vendor, vendors, 3);
|
CrawlerSpecificator specificator = new CrawlerSpecificator();
|
||||||
|
specificator.target(vendor);
|
||||||
|
Collection<Route> paths = searcher.search(vendor, vendor, vendors, 3, specificator);
|
||||||
top.addAll(paths);
|
top.addAll(paths);
|
||||||
callback.inc();
|
callback.inc();
|
||||||
}
|
}
|
||||||
@@ -200,44 +202,66 @@ public class MarketAnalyzer {
|
|||||||
return top;
|
return top;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Route> getLoops(Vendor vendor, int limit){
|
public Collection<Route> getLoops(Vendor vendor, CrawlerSpecificator specificator){
|
||||||
return searcher.getLoops(vendor, getVendors(), limit);
|
return searcher.searchLoops(vendor, getVendors(), specificator);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Route> getRoutes(Place from){
|
public Collection<Route> getRoutes(Place from, CrawlerSpecificator specificator){
|
||||||
return searcher.getRoutes(getVendors(from), getVendors());
|
return getRoutes(getVendors(from), getVendors(), specificator);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Route> getRoutes(Place from, Place to){
|
public Collection<Route> getRoutes(Place from, Place to){
|
||||||
return searcher.getRoutes(getVendors(from), getVendors(to), getVendors());
|
return getRoutes(from, to, new CrawlerSpecificator());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Route> getRoutes(Place from, Vendor to){
|
public Collection<Route> getRoutes(Place from, Place to, CrawlerSpecificator specificator){
|
||||||
return searcher.getRoutes(getVendors(from), Collections.singleton(to), getVendors());
|
specificator.any(getVendors(to));
|
||||||
|
return getRoutes(from, specificator);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Route> getRoutes(Vendor from){
|
public Collection<Route> getRoutes(Vendor from, CrawlerSpecificator specificator){
|
||||||
return searcher.getRoutes(from, getVendors());
|
specificator.any(getVendors());
|
||||||
|
return searcher.search(from, from, getVendors(), profile.getRoutesCount(), specificator);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Route> getRoutes(Vendor from, Place to){
|
public Collection<Route> getRoutes(Vendor from, Place to, CrawlerSpecificator specificator){
|
||||||
return searcher.getRoutes(Collections.singleton(from), getVendors(to), getVendors());
|
specificator.any(getVendors(to));
|
||||||
|
return searcher.search(from, from, getVendors(), profile.getRoutesCount(), specificator);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Route> getRoutes(Vendor from, Vendor to){
|
public Collection<Route> getRoutes(Vendor from, Vendor to){
|
||||||
return searcher.getRoutes(from, to, getVendors());
|
CrawlerSpecificator specificator = new CrawlerSpecificator();
|
||||||
|
specificator.target(to);
|
||||||
|
return getRoutes(from, to, specificator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<Route> getRoutes(Vendor from, Vendor to, CrawlerSpecificator specificator){
|
||||||
|
return searcher.search(from, to, getVendors(), profile.getRoutesCount(), specificator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Route> getRoutes(Collection<Vendor> fVendors, Collection<Vendor> vendors, CrawlerSpecificator specificator){
|
||||||
|
List<Route> res = new LimitedQueue<>(profile.getRoutesCount());
|
||||||
|
int count = (int) Math.ceil(profile.getRoutesCount() / fVendors.size());
|
||||||
|
for (Vendor fromVendor : fVendors) {
|
||||||
|
Collection<Route> routes = searcher.search(fromVendor, fromVendor, vendors, count, specificator);
|
||||||
|
res.addAll(routes);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Route getRoute(Collection<Vendor> vendors) {
|
public Route getRoute(Collection<Vendor> vendors) {
|
||||||
Route res = null;
|
Route res = null;
|
||||||
callback.start(vendors.size());
|
callback.start(vendors.size());
|
||||||
|
CrawlerSpecificator specificator = new CrawlerSpecificator();
|
||||||
|
specificator.all(vendors);
|
||||||
for (Vendor from : vendors) {
|
for (Vendor from : vendors) {
|
||||||
//TODO: implement search with constant length
|
Collection<Route> routes = searcher.search(from, from, vendors, 1, specificator);
|
||||||
Collection<Route> paths = searcher.getRoutes(from, vendors);
|
if (!routes.isEmpty()){
|
||||||
Optional<Route> route = paths.stream().filter(p -> p.contains(vendors)).findFirst();
|
Route route = routes.iterator().next();
|
||||||
if (route.isPresent() && (res == null || res.compareTo(route.get()) > 0)){
|
if (res == null || res.compareTo(route) < 0){
|
||||||
res = route.get();
|
res = route;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
callback.inc();
|
callback.inc();
|
||||||
}
|
}
|
||||||
@@ -271,7 +295,12 @@ public class MarketAnalyzer {
|
|||||||
return vendors;
|
return vendors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MarketAnalyzer changeCallBack(AnalysisCallBack callback){
|
public MarketAnalyzer newInstance(Profile profile, AnalysisCallBack callback){
|
||||||
return new MarketAnalyzer(market, profile, callback);
|
return new MarketAnalyzer(market, profile, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MarketAnalyzer newInstance(AnalysisCallBack callback){
|
||||||
|
return new MarketAnalyzer(market, profile, callback);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,7 +83,9 @@ public class RouteSearcherTest extends Assert{
|
|||||||
assertEquals(72.42, route.getDistance(), 0.01);
|
assertEquals(72.42, route.getDistance(), 0.01);
|
||||||
|
|
||||||
Collection<Vendor> world = fWorld.getMarkets(true).collect(Collectors.toList());
|
Collection<Vendor> world = fWorld.getMarkets(true).collect(Collectors.toList());
|
||||||
List<Route> apaths = searcher.getRoutes(ithaca_st, ithaca_st, world);
|
CrawlerSpecificator specificator = new CrawlerSpecificator();
|
||||||
|
specificator.target(ithaca_st);
|
||||||
|
List<Route> apaths = searcher.search(ithaca_st, ithaca_st, world, 10, specificator);
|
||||||
/* List<Route> apaths = searcher.getRoutes(ithaca_st, ithaca_st, Arrays.asList(ithaca_st, lhs3262_st,
|
/* List<Route> apaths = searcher.getRoutes(ithaca_st, ithaca_st, Arrays.asList(ithaca_st, lhs3262_st,
|
||||||
morgor_st, lhs3006_st, ithaca.asTransit(), lhs3262.asTransit(),
|
morgor_st, lhs3006_st, ithaca.asTransit(), lhs3262.asTransit(),
|
||||||
morgor.asTransit(), lhs3006.asTransit()));
|
morgor.asTransit(), lhs3006.asTransit()));
|
||||||
@@ -111,7 +113,7 @@ public class RouteSearcherTest extends Assert{
|
|||||||
assertEquals(4, route.getLands());
|
assertEquals(4, route.getLands());
|
||||||
assertEquals(109.51, route.getDistance(), 0.01);
|
assertEquals(109.51, route.getDistance(), 0.01);
|
||||||
|
|
||||||
apaths = searcher.getRoutes(ithaca_st, ithaca_st, world);
|
apaths = searcher.search(ithaca_st, ithaca_st, world, 10, specificator);
|
||||||
actual = apaths.stream().findFirst().get();
|
actual = apaths.stream().findFirst().get();
|
||||||
assertEquals(route, actual);
|
assertEquals(route, actual);
|
||||||
|
|
||||||
@@ -170,7 +172,7 @@ public class RouteSearcherTest extends Assert{
|
|||||||
Vendor ithaca_st = ithaca.get().iterator().next();
|
Vendor ithaca_st = ithaca.get().iterator().next();
|
||||||
Collection<Vendor> world = fWorld.getMarkets(true).collect(Collectors.toList());
|
Collection<Vendor> world = fWorld.getMarkets(true).collect(Collectors.toList());
|
||||||
|
|
||||||
List<Route> apaths = searcher.getLoops(ithaca_st, world, profile.getRoutesCount());
|
List<Route> apaths = searcher.searchLoops(ithaca_st, world, new CrawlerSpecificator());
|
||||||
assertEquals(39, apaths.size());
|
assertEquals(39, apaths.size());
|
||||||
Collection<Vendor> vendors = new ArrayList<>(40);
|
Collection<Vendor> vendors = new ArrayList<>(40);
|
||||||
apaths.forEach(route -> {
|
apaths.forEach(route -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user