From 5893c99b715535607df3b447ea0858bb3d03ad69 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Mon, 20 Jul 2015 17:10:46 +0300 Subject: [PATCH] compute route score as time/profit --- .../main/java/ru/trader/analysis/Scorer.java | 70 ++++++++-------- .../java/ru/trader/analysis/VendorsGraph.java | 77 ++++++++++++++---- .../src/main/java/ru/trader/core/Profile.java | 80 ++++++++++++------- .../ru/trader/analysis/RouteFillerTest.java | 26 +++--- .../ru/trader/analysis/RouteSearcherTest.java | 43 +++++++--- .../java/ru/trader/analysis/ScorerTest.java | 33 ++------ .../ru/trader/core/MarketAnalyzerTest2.java | 27 ++----- 7 files changed, 210 insertions(+), 146 deletions(-) diff --git a/core/src/main/java/ru/trader/analysis/Scorer.java b/core/src/main/java/ru/trader/analysis/Scorer.java index fe86d43..0e293dc 100644 --- a/core/src/main/java/ru/trader/analysis/Scorer.java +++ b/core/src/main/java/ru/trader/analysis/Scorer.java @@ -8,16 +8,15 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; -/*TODO: change to compute profit for seocnd -* times: -* 26810 - 7:15 -* 1980 - 3:46 -* 1330 - 2:47 -* 1380 - 2:32 -* 780 - 2:10 -* 430 - 2:04 -* 306 - 1:54 -* 88 - 1:25 +/* times: +* 26810 - 7:15 - 435 +* 1980 - 3:46 - 226 +* 1330 - 2:47 - 167 +* 1380 - 2:32 - 152 +* 780 - 2:10 - 130 +* 430 - 2:04 - 124 +* 306 - 1:54 - 116 +* 88 - 1:25 - 85 * * launch_to_start_jmp - 0:40, 0:43, 0:40 * jmp - 0:33, 0:33, 0:30, 0:32, 0:32, 0:32 @@ -84,6 +83,10 @@ public class Scorer { return avgProfit * profile.getShip().getCargo(); } + public double getMaxProfit() { + return maxProfit; + } + public double getMaxScore() { return maxScore; } @@ -101,38 +104,33 @@ public class Scorer { return getScore(vendor.getDistance(), profit, jumps, lands, fuel); } - public double getTransitScore(double fuel){ - LOG.trace("Compute transit score fuel={}", fuel); - double profit = maxProfit; - profit -= profile.getFuelPrice() * fuel / profile.getShip().getCargo(); - if (avgDistance > 0) { - profit -= - avgProfit * profile.getDistanceMult(); + private double getTime(double distance){ + double a = 6000; + double b = 673; + double c = 1670; + return Math.log(distance + a)*b*profile.getDistanceTime() - c; + } + + public double getProfit(double profit, double fuel){ + profit -= profile.getFuelPrice() * fuel; + profit = profit / profile.getShip().getCargo(); + return profit; + } + + public double getTime(double distance, int jumps, int lands){ + double time = profile.getTakeoffTime(); + if (jumps > 0){ + time += profile.getJumpTime() + (jumps-1) * (profile.getRechargeTime() + profile.getJumpTime()); } - if (profile.getLandMult() > 0){ - profit = profit / profile.getLandMult(); + if (profile.getLandingTime() > 0){ + time += (lands-1)*(getTime(avgDistance) + profile.getLandingTime() + profile.getTakeoffTime()) + getTime(distance) + profile.getLandingTime(); } - double score = profit * (1 - profile.getJumpMult()/profile.getJumps()); - LOG.trace("score={}", score); - return score; + return time; } public double getScore(double distance, double profit, int jumps, int lands, double fuel){ LOG.trace("Compute score distance={}, profit={}, jumps={}, lands={}, fuel={}", distance, profit, jumps, lands, fuel); - profit -= profile.getFuelPrice() * fuel; - profit = profit / profile.getShip().getCargo(); - if (avgDistance > 0) { - profit -= avgProfit * profile.getDistanceMult() * (distance - avgDistance) / avgDistance; - } - double score = profit; - if (profit > 0){ - if (lands > 0 && profile.getLandMult() > 0){ - score = profit / (lands * profile.getLandMult()); - } - if (profile.getPathPriority() == Profile.PATH_PRIORITY.ECO){ - jumps = 1; - } - score -= profile.getJumpMult()/profile.getJumps() * score * jumps; - } + double score = getProfit(profit, fuel)/getTime(distance, jumps, lands); LOG.trace("score={}", score); return score; } diff --git a/core/src/main/java/ru/trader/analysis/VendorsGraph.java b/core/src/main/java/ru/trader/analysis/VendorsGraph.java index aa788b3..28a1084 100644 --- a/core/src/main/java/ru/trader/analysis/VendorsGraph.java +++ b/core/src/main/java/ru/trader/analysis/VendorsGraph.java @@ -1,5 +1,6 @@ package ru.trader.analysis; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.analysis.graph.*; @@ -397,6 +398,8 @@ public class VendorsGraph extends ConnectibleGraph { public class VendorsEdge extends ConnectibleEdge { private TransitPath path; private List orders; + private Double profitByTonne; + private Double time; protected VendorsEdge(Vertex source, Vertex target, TransitPath path) { super(source, target); @@ -433,19 +436,54 @@ public class VendorsGraph extends ConnectibleGraph { return path; } + public double getProfitByTonne() { + if (profitByTonne == null){ + profitByTonne = computeProfit(); + } + return profitByTonne; + } + + public double getTime() { + if (time == null){ + time = computeTime(); + } + return time; + } + + @Override + public int compareTo(@NotNull Edge other) { + double w = getWeight(); + double ow = other.getWeight(); + if (ow >= 0 && w >= 0) return super.compareTo(other); + if (w < 0 && ow < 0) return Double.compare(Math.abs(w), Math.abs(ow)); + return w < 0 ? 1 : -1; + } + + protected double computeProfit(){ + double fuel = fuelCost; + if (path != null){ + fuel = path.getFuelCost(); + } + return scorer.getProfit(getProfit(), fuel); + } + + protected double computeTime(){ + int jumps = source.getEntry().getPlace().equals(target.getEntry().getPlace())? 0 : 1; + int lands = 1; + if (path != null){ + jumps = path.size()-1; + lands += path.getRefillCount(); + //not lands if refuel on this station + if (path.isRefill()) lands--; + } else { + lands += isRefill() ? 1 :0; + } + return scorer.getTime(target.getEntry().getDistance(), jumps, lands); + } + @Override protected double computeWeight() { - int jumps = source.getEntry().getPlace().equals(target.getEntry().getPlace())? 0 : 1; - int lands = 1; double fuel = fuelCost; - if (path != null){ - jumps = path.size()-1; fuel = getFuelCost(); - lands += path.getRefillCount(); - } - double profit = getProfit(); - double score = scorer.getScore(target.getEntry(), profit, jumps, lands, fuel); - score = scorer.getMaxScore() - score; - if (score < 0) score = 0; - return score; + return getTime()/getProfitByTonne(); } @Override @@ -536,12 +574,23 @@ public class VendorsGraph extends ConnectibleGraph { @Override public double getWeight() { if (weight == null){ - Edge edge = getEdge(); + VendorsEdge edge = (VendorsEdge) getEdge(); Optional> head = getHead(); - weight = (head.isPresent() ? ((VendorsTraversalEntry)head.get()).getWeight() : 0) + (edge != null ? edge.getWeight() : 0); + double profit = 0; double time = 0; if (edge != null){ - weight = weight / (1+Math.floorDiv(profile.getLands() - this.size(),this.size())); + profit = edge.getProfitByTonne(); + time = edge.getTime(); } + while (head.isPresent()){ + VendorsTraversalEntry hEntry = (VendorsTraversalEntry) head.get(); + edge = (VendorsEdge) hEntry.getEdge(); + if (edge != null){ + profit += edge.getProfitByTonne(); + time += edge.getTime(); + } + head = hEntry.getHead(); + } + weight = profit > 1 ? time / profit : time; } return weight; } diff --git a/core/src/main/java/ru/trader/core/Profile.java b/core/src/main/java/ru/trader/core/Profile.java index d9635d8..00ff47c 100644 --- a/core/src/main/java/ru/trader/core/Profile.java +++ b/core/src/main/java/ru/trader/core/Profile.java @@ -12,9 +12,11 @@ public class Profile { private boolean refill; private int routesCount; //Scorer multipliers - private double distanceMult; - private double jumpMult; - private double landMult; + private double distanceTime; + private double jumpTime; + private double landingTime; + private double takeoffTime; + private double rechargeTime; private double fuelPrice; private PATH_PRIORITY pathPriority; @@ -24,10 +26,12 @@ public class Profile { jumps = 6; lands = 4; routesCount = 30; - distanceMult = 0.8; - landMult = 0.95; + distanceTime = 0.3; fuelPrice = 100; - jumpMult = 0.5; + landingTime = 80; + takeoffTime = 40; + jumpTime = 32; + rechargeTime = 12; pathPriority = PATH_PRIORITY.FAST; } @@ -79,28 +83,44 @@ public class Profile { this.routesCount = routesCount; } - public double getDistanceMult() { - return distanceMult; + public double getDistanceTime() { + return distanceTime; } - public void setDistanceMult(double distanceMult) { - this.distanceMult = distanceMult; + public void setDistanceTime(double distanceTime) { + this.distanceTime = distanceTime; } - public double getJumpMult() { - return jumpMult; + public double getJumpTime() { + return jumpTime; } - public void setJumpMult(double jumpMult) { - this.jumpMult = jumpMult; + public void setJumpTime(double jumpTime) { + this.jumpTime = jumpTime; } - public double getLandMult() { - return landMult; + public double getLandingTime() { + return landingTime; } - public void setLandMult(double landMult) { - this.landMult = landMult; + public void setLandingTime(double landingTime) { + this.landingTime = landingTime; + } + + public double getTakeoffTime() { + return takeoffTime; + } + + public void setTakeoffTime(double takeoffTime) { + this.takeoffTime = takeoffTime; + } + + public double getRechargeTime() { + return rechargeTime; + } + + public void setRechargeTime(double rechargeTime) { + this.rechargeTime = rechargeTime; } public double getFuelPrice() { @@ -124,13 +144,15 @@ public class Profile { Profile profile = new Profile(ship); profile.setBalance(Double.valueOf(values.getProperty("profile.balance","1000"))); profile.setJumps(Integer.valueOf(values.getProperty("profile.jumps", "6"))); - profile.setLands(Integer.valueOf(values.getProperty("profile.lands","4"))); - profile.setPathPriority(PATH_PRIORITY.valueOf(values.getProperty("profile.search.priority","FAST"))); - profile.setRoutesCount(Integer.valueOf(values.getProperty("profile.search.routes","100"))); - profile.setFuelPrice(Double.valueOf(values.getProperty("profile.search.fuel.price","100"))); - profile.setDistanceMult(Double.valueOf(values.getProperty("profile.search.mult.distance","0.8"))); - profile.setLandMult(Double.valueOf(values.getProperty("profile.search.mult.land","0.95"))); - profile.setJumpMult(Double.valueOf(values.getProperty("profile.search.mult.jump","0.5"))); + profile.setLands(Integer.valueOf(values.getProperty("profile.lands", "4"))); + profile.setPathPriority(PATH_PRIORITY.valueOf(values.getProperty("profile.search.priority", "FAST"))); + profile.setRoutesCount(Integer.valueOf(values.getProperty("profile.search.routes", "100"))); + profile.setFuelPrice(Double.valueOf(values.getProperty("profile.search.fuel.price", "100"))); + profile.setDistanceTime(Double.valueOf(values.getProperty("profile.search.times.distance", "0.3"))); + profile.setLandingTime(Double.valueOf(values.getProperty("profile.search.times.landing", "80"))); + profile.setTakeoffTime(Double.valueOf(values.getProperty("profile.search.times.takeoff", "40"))); + profile.setJumpTime(Double.valueOf(values.getProperty("profile.search.times.jump", "32"))); + profile.setRechargeTime(Double.valueOf(values.getProperty("profile.search.times.recharge", "12"))); return profile; } @@ -141,9 +163,11 @@ public class Profile { values.setProperty("profile.search.priority", String.valueOf(pathPriority)); values.setProperty("profile.search.routes", String.valueOf(routesCount)); values.setProperty("profile.search.fuel.price", String.valueOf(fuelPrice)); - values.setProperty("profile.search.mult.distance", String.valueOf(distanceMult)); - values.setProperty("profile.search.mult.land", String.valueOf(landMult)); - values.setProperty("profile.search.mult.jump", String.valueOf(jumpMult)); + values.setProperty("profile.search.times.distance", String.valueOf(distanceTime)); + values.setProperty("profile.search.times.landing", String.valueOf(landingTime)); + values.setProperty("profile.search.times.takeoff", String.valueOf(takeoffTime)); + values.setProperty("profile.search.times.jump", String.valueOf(jumpTime)); + values.setProperty("profile.search.times.recharge", String.valueOf(rechargeTime)); ship.writeTo(values); } diff --git a/core/src/test/java/ru/trader/analysis/RouteFillerTest.java b/core/src/test/java/ru/trader/analysis/RouteFillerTest.java index 1f940ea..8c028c3 100644 --- a/core/src/test/java/ru/trader/analysis/RouteFillerTest.java +++ b/core/src/test/java/ru/trader/analysis/RouteFillerTest.java @@ -24,12 +24,14 @@ public class RouteFillerTest extends Assert { private Vendor v4; private Vendor v5; - private RouteFiller getFillerInstance(double balance, int cargo, double landsMult, Market market){ + private RouteFiller getFillerInstance(double balance, int cargo, boolean skipLandingTime, Market market){ Ship ship = new Ship(); ship.setCargo(cargo); Profile profile = new Profile(ship); profile.setBalance(balance); - profile.setLandMult(landsMult); + if (skipLandingTime){ + profile.setLandingTime(0); + } Scorer scorer = new Scorer(new FilteredMarket(market, new MarketFilter()), profile); return new RouteFiller(scorer); } @@ -60,7 +62,7 @@ public class RouteFillerTest extends Assert { public void testRoute1() throws Exception { LOG.info("Start route test 1"); Route route = initTest1(); - RouteFiller filler = getFillerInstance(10000, 5, 0, market); + RouteFiller filler = getFillerInstance(10000, 5, true, market); filler.fill(route); assertEquals(10000, route.getBalance(), 0.0001); @@ -102,7 +104,7 @@ public class RouteFillerTest extends Assert { public void testPathRoute2() throws Exception { LOG.info("Start route test 2"); Route route = initTest2(); - RouteFiller filler = getFillerInstance(10000, 5, 0, market); + RouteFiller filler = getFillerInstance(10000, 5, true, market); filler.fill(route); assertEquals(1000, route.getProfit(), 0.0001); @@ -152,7 +154,7 @@ public class RouteFillerTest extends Assert { public void testPathRoute3() throws Exception { LOG.info("Start route test 3"); Route route = initTest3(); - RouteFiller filler = getFillerInstance(10000, 5, 0, market); + RouteFiller filler = getFillerInstance(10000, 5, true, market); filler.fill(route); assertEquals(800, route.getProfit(), 0.0001); @@ -179,7 +181,7 @@ public class RouteFillerTest extends Assert { public void testPathRoute3byLands() throws Exception { LOG.info("Start route test 3 by lands"); Route route = initTest3(); - RouteFiller filler = getFillerInstance(10000, 5, 1, market); + RouteFiller filler = getFillerInstance(10000, 5, false, market); filler.fill(route); assertEquals(750, route.getProfit(), 0.0001); @@ -235,7 +237,7 @@ public class RouteFillerTest extends Assert { public void testPathRoute4() throws Exception { LOG.info("Start route test 4"); Route route = initTest4(); - RouteFiller filler = getFillerInstance(10000, 5, 0, market); + RouteFiller filler = getFillerInstance(10000, 5, true, market); filler.fill(route); assertEquals(1000, route.getProfit(), 0.0001); @@ -298,7 +300,7 @@ public class RouteFillerTest extends Assert { public void testPathRoute5() throws Exception { LOG.info("Start route test 5"); Route route = initTest5(); - RouteFiller filler = getFillerInstance(500, 5, 0, market); + RouteFiller filler = getFillerInstance(500, 5, true, market); filler.fill(route); assertEquals(620, route.getProfit(), 0.0001); @@ -325,7 +327,7 @@ public class RouteFillerTest extends Assert { public void testPathRoute5B() throws Exception { LOG.info("Start route test 5B"); Route route = initTest5(); - RouteFiller filler = getFillerInstance(700, 7, 0, market); + RouteFiller filler = getFillerInstance(700, 7, true, market); filler.fill(route); assertEquals(750, route.getProfit(), 0.0001); @@ -397,7 +399,7 @@ public class RouteFillerTest extends Assert { LOG.info("Start join route test"); Route route = initTest6A(); Route routeB = initTest6B(); - RouteFiller filler = getFillerInstance(500, 5, 0, market); + RouteFiller filler = getFillerInstance(500, 5, true, market); filler.fill(route); filler.fill(routeB); @@ -435,9 +437,9 @@ public class RouteFillerTest extends Assert { LOG.info("Start join route test"); Route route = initTest6A(); Route routeB = initTest6B(); - RouteFiller filler = getFillerInstance(500, 5, 0, market); + RouteFiller filler = getFillerInstance(500, 5, true, market); filler.fill(route); - filler = getFillerInstance(550, 5, 0, market); + filler = getFillerInstance(550, 5, true, market); filler.fill(routeB); route.join(routeB); diff --git a/core/src/test/java/ru/trader/analysis/RouteSearcherTest.java b/core/src/test/java/ru/trader/analysis/RouteSearcherTest.java index 56c089d..21d6091 100644 --- a/core/src/test/java/ru/trader/analysis/RouteSearcherTest.java +++ b/core/src/test/java/ru/trader/analysis/RouteSearcherTest.java @@ -22,9 +22,9 @@ public class RouteSearcherTest extends Assert{ private Place lhs3262; private Place morgor; private Place lhs3006; - private Place bd47; + private Place dnDraconis; private Place aulin; - private Place iBootis; + private Place cmDraco; @Before public void setUp() throws Exception { @@ -34,9 +34,9 @@ public class RouteSearcherTest extends Assert{ lhs3262 = world.get("LHS 3262"); morgor = world.get("Morgor"); lhs3006 = world.get("LHS 3006"); - bd47 = world.get("BD+47 2112"); + dnDraconis = world.get("DN Draconis"); aulin = world.get("Aulin"); - iBootis = world.get("i Bootis"); + cmDraco = world.get("CM Draco"); MarketFilter filter = new MarketFilter(); fWorld = new FilteredMarket(world, filter); @@ -52,15 +52,16 @@ public class RouteSearcherTest extends Assert{ Vendor morgor_st = morgor.get().iterator().next(); Vendor lhs3006_st = lhs3006.get().iterator().next(); Vendor aulin_st = aulin.get().iterator().next(); + Vendor cmDraco_st = cmDraco.get().iterator().next(); Ship ship = new Ship(); ship.setCargo(440); ship.setTank(15); ship.setEngine(5, 'A'); ship.setMass(466); Profile profile = new Profile(ship); profile.setBalance(6000000); profile.setJumps(6); - profile.setRoutesCount(100); + profile.setRoutesCount(100); profile.setLands(3); Scorer scorer = new Scorer(fWorld, profile); - LOG.info("Start test routes"); + LOG.info("Start test routes, 3 lands"); RouteSearcher searcher = new RouteSearcher(scorer); Route route = new Route(new RouteEntry(ithaca_st, false, 3.3789702637348586d, 0)); @@ -73,9 +74,9 @@ public class RouteSearcherTest extends Assert{ RouteFiller filler = new RouteFiller(scorer); filler.fill(route); - assertEquals(route.getProfit(), 981200, 0); - assertEquals(route.getLands(), 2); - assertEquals(route.getDistance(), 72.42, 0.01); + assertEquals(981200, route.getProfit(), 0); + assertEquals(2, route.getLands()); + assertEquals(72.42, route.getDistance(), 0.01); List apaths = searcher.getRoutes(ithaca_st, ithaca_st, fWorld.getMarkets(true).collect(Collectors.toList())); /* List apaths = searcher.getRoutes(ithaca_st, ithaca_st, Arrays.asList(ithaca_st, lhs3262_st, @@ -85,5 +86,29 @@ public class RouteSearcherTest extends Assert{ Route actual = apaths.stream().findFirst().get(); assertEquals("Routes is different", route, actual); + LOG.info("Start test routes, 4 lands"); + profile.setLands(4); + route = new Route(new RouteEntry(ithaca_st, false, 3.3789702637348586d, 0)); + route.add(new RouteEntry(morgor.asTransit(), false, 4.137765020523591d, 0)); + route.add(new RouteEntry(lhs3006.asTransit(), false, 4.0674474942172765d, 0)); + route.add(new RouteEntry(lhs3262_st, true, 0.644029909978323d, 0)); + route.add(new RouteEntry(dnDraconis.asTransit(), false, 4.437544442558194d, 0)); + route.add(new RouteEntry(cmDraco_st, false, 4.385307711185104d, 0)); + route.add(new RouteEntry(dnDraconis.asTransit(), false, 0.6279317619086441d, 0)); + route.add(new RouteEntry(lhs3262_st, true, 4.149937831634785d, 0)); + route.add(new RouteEntry(lhs3006.asTransit(), false, 4.1292528548103d, 0)); + route.add(new RouteEntry(morgor.asTransit(), false, 3.3050364899848566, 0)); + route.add(new RouteEntry(ithaca_st, false, 0, 0)); + filler = new RouteFiller(scorer); + filler.fill(route); + + assertEquals(1971200, route.getProfit(), 0); + assertEquals(4, route.getLands()); + assertEquals(109.51, route.getDistance(), 0.01); + + apaths = searcher.getRoutes(ithaca_st, ithaca_st, fWorld.getMarkets(true).collect(Collectors.toList())); + actual = apaths.stream().findFirst().get(); + assertEquals("Routes is different", route, actual); + } } diff --git a/core/src/test/java/ru/trader/analysis/ScorerTest.java b/core/src/test/java/ru/trader/analysis/ScorerTest.java index 2b3a4b9..66b1d80 100644 --- a/core/src/test/java/ru/trader/analysis/ScorerTest.java +++ b/core/src/test/java/ru/trader/analysis/ScorerTest.java @@ -36,13 +36,6 @@ public class ScorerTest extends Assert { profile.setBalance(1000000); Scorer scorer = new Scorer(fWorld, profile); - double transitScore = scorer.getTransitScore(4); - double transitScore2 = scorer.getTransitScore(6); - double transitScore3 = scorer.getTransitScore(2); - - assertTrue(transitScore > transitScore2); - assertTrue(transitScore3 > transitScore); - double score = scorer.getScore(scorer.getAvgDistance(), 0, 1, 1, 4); double score1 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()/2, 1, 1, 4); double score2 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()*10, 1, 1, 4); @@ -84,9 +77,9 @@ public class ScorerTest extends Assert { assertTrue(score1 > score2); assertTrue(score2 > score3); - score1 = scorer.getScore(scorer.getAvgDistance()/2, scorer.getAvgProfit(), 1, 1, 4); - score2 = scorer.getScore(scorer.getAvgDistance()*2, scorer.getAvgProfit()*2, 1, 1, 4); - score3 = scorer.getScore(scorer.getAvgDistance()*2, scorer.getAvgProfit()*4, 1, 1, 4); + score1 = scorer.getScore(700, scorer.getAvgProfit(), 1, 1, 4); + score2 = scorer.getScore(2800, scorer.getAvgProfit()*1.2, 1, 1, 4); + score3 = scorer.getScore(2800, scorer.getAvgProfit()*1.5, 1, 1, 4); assertTrue(score1 > score2); assertTrue(score3 > score1); @@ -96,26 +89,16 @@ public class ScorerTest extends Assert { assertTrue(score2 > score1); assertTrue(score3 > score2); - transitScore = scorer.getTransitScore(4); - score = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 1, 1, 4); - score1 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()/2, 1, 1, 4); - score2 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()*10, 1, 1, 4); - score3 = scorer.getScore(scorer.getAvgDistance(), 0, 1, 1, 4); - assertTrue(transitScore > score); - assertTrue(transitScore > score1); - assertTrue(transitScore < score2); - assertTrue(transitScore > score3); - - score = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 4, 2, 4); - score1 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()*1.2, 6, 2, 4); - score2 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 6, 2, 4); - score3 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()*1.4, 6, 2, 4); + score = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 2, 2, 4); + score1 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()*1.2, 8, 2, 4); + score2 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 8, 2, 4); + score3 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()*1.4, 8, 2, 4); assertTrue(score > score1); assertTrue(score > score2); assertTrue(score < score3); score = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 4, 2, 4); - score1 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()*1.9, 4, 4, 4); + score1 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()*1.8, 4, 4, 4); score2 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 4, 4, 4); score3 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit()*2.1, 4, 4, 4); assertTrue(score >= score1); diff --git a/core/src/test/java/ru/trader/core/MarketAnalyzerTest2.java b/core/src/test/java/ru/trader/core/MarketAnalyzerTest2.java index f0219ec..d785c88 100644 --- a/core/src/test/java/ru/trader/core/MarketAnalyzerTest2.java +++ b/core/src/test/java/ru/trader/core/MarketAnalyzerTest2.java @@ -1,9 +1,7 @@ package ru.trader.core; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; -import ru.trader.TestUtil; import ru.trader.analysis.*; import ru.trader.store.simple.Store; import java.io.InputStream; @@ -26,7 +24,7 @@ public class MarketAnalyzerTest2 extends Assert { ship.setEngine(5, 'A'); ship.setMass(466); Profile profile = new Profile(ship); profile.setBalance(6000000); profile.setJumps(6); - profile.setRoutesCount(100); + profile.setRoutesCount(100); profile.setLands(3); MarketAnalyzer analyzer = new MarketAnalyzer(fWorld, profile); Vendor ithaca = market.get("Ithaca").get().iterator().next(); Vendor morgor = market.get("Morgor").asTransit(); @@ -72,34 +70,19 @@ public class MarketAnalyzerTest2 extends Assert { Place lhs21 = market.get("LHS 21"); Place bonde = market.get("Bonde"); Place suiXing = market.get("Sui Xing"); + // LHS 21 (Resonatic Separator to Sui Xing) -> Bonde -> Sui Xing (Palladium to LHS 21) -> Bonde -> LHS 21 + // Profit: 199056, distance: 28.72, lands: 2 + Collection paths = analyzer.getRoutes(lhs21, lhs21); Optional path = paths.stream().findFirst(); assertTrue(path.isPresent()); Route actual = path.get(); - assertEquals(114816, actual.getProfit(), 0.00001); - assertEquals(8.16, actual.getDistance(), 0.01); - assertEquals(2, actual.getLands()); - - Place aPlace = actual.get(0).getVendor().getPlace(); - assertEquals(lhs21, aPlace); - aPlace = actual.get(1).getVendor().getPlace(); - assertEquals(bonde, aPlace); - - // If distance to station has small mult - // LHS 21 (Resonatic Separator to Sui Xing) -> Bonde -> Sui Xing (Palladium to LHS 21) -> Bonde -> LHS 21 - // Profit: 199056, distance: 28.72, lands: 2 - - profile.setDistanceMult(0.1); - paths = analyzer.getRoutes(lhs21, lhs21); - path = paths.stream().findFirst(); - assertTrue(path.isPresent()); - actual = path.get(); assertEquals(199056, actual.getProfit(), 0.00001); assertEquals(28.72, actual.getDistance(), 0.01); assertEquals(2, actual.getLands()); - aPlace = actual.get(0).getVendor().getPlace(); + Place aPlace = actual.get(0).getVendor().getPlace(); assertEquals(lhs21, aPlace); aPlace = actual.get(2).getVendor().getPlace(); assertEquals(suiXing, aPlace);