From de37399992fe3d365d549ba7ca25ab7c8a5fa74e Mon Sep 17 00:00:00 2001 From: iMoHax Date: Sat, 30 Aug 2014 13:20:04 +0400 Subject: [PATCH] fix limit on refill in findPaths --- core/src/main/java/ru/trader/graph/Graph.java | 2 +- .../main/java/ru/trader/graph/PathRoute.java | 11 ++++- .../ru/trader/core/MarketAnalyzerTest.java | 2 +- .../ru/trader/core/MarketAnalyzerTest2.java | 42 +++++++++++++++++++ core/src/test/resources/world.xml | 1 + 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 core/src/test/java/ru/trader/core/MarketAnalyzerTest2.java create mode 100644 core/src/test/resources/world.xml diff --git a/core/src/main/java/ru/trader/graph/Graph.java b/core/src/main/java/ru/trader/graph/Graph.java index 8b5ab85..c9bb1dc 100644 --- a/core/src/main/java/ru/trader/graph/Graph.java +++ b/core/src/main/java/ru/trader/graph/Graph.java @@ -132,7 +132,7 @@ public class Graph> { Path path = head.connectTo(next.getTarget(), limit < next.getLength()); double nextLimit = withRefill ? limit - next.getLength(): stock; // refill - if (nextLimit < 0 ) nextLimit = maxDistance - next.getLength(); + if (nextLimit < 0 ) nextLimit = stock - next.getLength(); if (findPaths(paths, max, path, target, deep - 1, nextLimit)) return true; } } diff --git a/core/src/main/java/ru/trader/graph/PathRoute.java b/core/src/main/java/ru/trader/graph/PathRoute.java index 1680b25..c6d6706 100644 --- a/core/src/main/java/ru/trader/graph/PathRoute.java +++ b/core/src/main/java/ru/trader/graph/PathRoute.java @@ -317,7 +317,7 @@ public class PathRoute extends Path { if (o == null){ o = p.getBest(); if (o!= null){ - LOG.trace("{} is lands for by by order {}", p, o); + LOG.trace("{} is lands for buy by order {}", p, o); res++; } } else { @@ -343,4 +343,13 @@ public class PathRoute extends Path { return p; } + public static PathRoute toPathRoute(Vendor... items){ + Vendor t = items[0]; + PathRoute path = new PathRoute(new Vertex<>(t)); + for (int i = 1; i < items.length; i++) { + t = items[i]; + path = new PathRoute(path, new Vertex<>(t), false); + } + return path; + } } diff --git a/core/src/test/java/ru/trader/core/MarketAnalyzerTest.java b/core/src/test/java/ru/trader/core/MarketAnalyzerTest.java index 4dc54b0..4888d84 100644 --- a/core/src/test/java/ru/trader/core/MarketAnalyzerTest.java +++ b/core/src/test/java/ru/trader/core/MarketAnalyzerTest.java @@ -180,7 +180,7 @@ public class MarketAnalyzerTest extends Assert { TestUtil.assertCollectionContainAll(paths, Path.toPath(v10, v11, v10), Path.toPath(v10, v6, v10), Path.toPath(v10, v11, v6, v10), Path.toPath(v10, v6, v11, v10), Path.toPath(v10, v8, v10), Path.toPath(v10, v8, v11, v10), - Path.toPath(v10, v8, v6, v10)); + Path.toPath(v10, v8, v6, v10), Path.toPath(v10, v8, v6, v10)); } diff --git a/core/src/test/java/ru/trader/core/MarketAnalyzerTest2.java b/core/src/test/java/ru/trader/core/MarketAnalyzerTest2.java new file mode 100644 index 0000000..eb135d3 --- /dev/null +++ b/core/src/test/java/ru/trader/core/MarketAnalyzerTest2.java @@ -0,0 +1,42 @@ +package ru.trader.core; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import ru.trader.TestUtil; +import ru.trader.graph.PathRoute; +import ru.trader.store.Store; +import java.io.InputStream; +import java.util.Collection; + +public class MarketAnalyzerTest2 extends Assert { + private static MarketAnalyzer analyzer; + private static Market market; + + @Before + public void setUp() throws Exception { + InputStream is = getClass().getResourceAsStream("/world.xml"); + market = Store.loadFromFile(is); + analyzer = new MarketAnalyzer(market); + } + + @Test + public void testRoutes() throws Exception { + // Balance: 6000000, cargo: 440, tank: 40, distance: 13.4, jumps: 6 + // Ithaca (Palladium to LHS 3262) -> Morgor -> LHS 3006 -> LHS 3262 (Consumer Technology to Ithaca) -> LHS 3006 -> Morgor -> Ithaca + // Profit: 981200, avg: 490600, distance: 67.5, lands: 2 + Vendor ithaca = market.get().stream().filter((v)->v.getName().equals("Ithaca")).findFirst().get(); + Vendor morgor = market.get().stream().filter((v)->v.getName().equals("Morgor")).findFirst().get(); + Vendor lhs3006 = market.get().stream().filter((v)->v.getName().equals("LHS 3006")).findFirst().get(); + Vendor lhs3262 = market.get().stream().filter((v)->v.getName().equals("LHS 3262")).findFirst().get(); + analyzer.setCargo(440);analyzer.setTank(40);analyzer.setMaxDistance(13.4);analyzer.setJumps(6); + Collection paths = analyzer.getPaths(ithaca, ithaca, 6000000); + PathRoute expect = PathRoute.toPathRoute(ithaca, morgor, lhs3006, lhs3262, lhs3006, morgor, ithaca); + PathRoute actual = paths.stream().filter((p)->p.equals(expect)).findFirst().get().getRoot(); + TestUtil.assertCollectionContain(paths, expect); + assertEquals(981200, actual.getProfit(), 0.00001); + assertEquals(72.42, actual.getDistance(), 0.01); + assertEquals(2, actual.getLandsCount()); + assertEquals(490600, actual.getProfit()/actual.getLandsCount() , 0.00001); + } +} diff --git a/core/src/test/resources/world.xml b/core/src/test/resources/world.xml new file mode 100644 index 0000000..2a2e4a1 --- /dev/null +++ b/core/src/test/resources/world.xml @@ -0,0 +1 @@ + \ No newline at end of file