compute route score as time/profit
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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<Route> apaths = searcher.getRoutes(ithaca_st, ithaca_st, fWorld.getMarkets(true).collect(Collectors.toList()));
|
||||
/* List<Route> 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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<Route> paths = analyzer.getRoutes(lhs21, lhs21);
|
||||
Optional<Route> 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);
|
||||
|
||||
Reference in New Issue
Block a user