diff --git a/core/src/main/java/ru/trader/analysis/Scorer.java b/core/src/main/java/ru/trader/analysis/Scorer.java index 617b1fb..3f34900 100644 --- a/core/src/main/java/ru/trader/analysis/Scorer.java +++ b/core/src/main/java/ru/trader/analysis/Scorer.java @@ -93,13 +93,13 @@ public class Scorer { LOG.trace("Compute transit score fuel={}", fuel); double profit = maxProfit; profit -= profile.getFuelPrice() * fuel / profile.getShip().getCargo(); - double score = 1; - score -= profile.getLandMult(); - score -= profile.getJumpMult(); - score = score * profit; if (avgDistance > 0) { - score -= - avgProfit * profile.getDistanceMult(); + profit -= - avgProfit * profile.getDistanceMult(); } + if (profile.getLandMult() > 0){ + profit = profit / profile.getLandMult(); + } + double score = profit * (1 - profile.getJumpMult()/profile.getJumps()); LOG.trace("score={}", score); return score; } @@ -108,20 +108,15 @@ public class Scorer { LOG.trace("Compute score distance={}, profit={}, jumps={}, lands={}, fuel={}", distance, profit, jumps, lands, fuel); profit -= profile.getFuelPrice() * fuel; profit = profit / profile.getShip().getCargo(); - double score = 1; - if (profit > 0) { - score -= profile.getJumpMult() * (jumps - 1); - score -= profile.getLandMult() * lands; - if (score == 0) { - score = profit; - } else { - score = score * profit; + 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 (avgDistance > 0) { - score -= avgProfit * profile.getDistanceMult() * (distance - avgDistance) / avgDistance; - } - } else { - score = profit; + score -= profile.getJumpMult()/profile.getJumps() * score * jumps; } LOG.trace("score={}", score); return score; @@ -184,7 +179,7 @@ public class Scorer { private void computeScore(){ score = (getSellProfit() + getBuyProfit())/2; - score = Scorer.this.getScore(vendor, score, 0, 0, 0); + score = Scorer.this.getScore(vendor, score, 0, 1, 0); } @Override diff --git a/core/src/main/java/ru/trader/core/Profile.java b/core/src/main/java/ru/trader/core/Profile.java index b742e3a..c23dcf3 100644 --- a/core/src/main/java/ru/trader/core/Profile.java +++ b/core/src/main/java/ru/trader/core/Profile.java @@ -17,11 +17,12 @@ public class Profile { public Profile(Ship ship) { this.ship = ship; refill = true; + jumps = 6; scoreOrdersCount = 5; - distanceMult = 0.08; + distanceMult = 0.8; landMult = 0.95; fuelPrice = 100; - jumpMult = 0.008; + jumpMult = 0.5; } public double getBalance() { diff --git a/core/src/test/java/ru/trader/analysis/ScorerTest.java b/core/src/test/java/ru/trader/analysis/ScorerTest.java index 4d400d6..f4ccf14 100644 --- a/core/src/test/java/ru/trader/analysis/ScorerTest.java +++ b/core/src/test/java/ru/trader/analysis/ScorerTest.java @@ -145,9 +145,9 @@ public class ScorerTest extends Assert { assertTrue(score1 > score2); assertTrue(score2 > score3); - score1 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 1, 0, 4); - score2 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 1, 1, 4); - score3 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 1, 2, 4); + score1 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 1, 1, 4); + score2 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 1, 2, 4); + score3 = scorer.getScore(scorer.getAvgDistance(), scorer.getAvgProfit(), 1, 3, 4); assertTrue(score1 > score2); assertTrue(score2 > score3); @@ -187,6 +187,22 @@ public class ScorerTest extends Assert { 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); + 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); + 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); + assertTrue(score > score2); + assertTrue(score < score3); + } @After