diff --git a/client/src/main/java/ru/trader/controllers/SettingsController.java b/client/src/main/java/ru/trader/controllers/SettingsController.java
index cd7caa4..6744e7d 100644
--- a/client/src/main/java/ru/trader/controllers/SettingsController.java
+++ b/client/src/main/java/ru/trader/controllers/SettingsController.java
@@ -44,6 +44,8 @@ public class SettingsController {
@FXML
private NumberField landingTime;
@FXML
+ private NumberField orbitalTime;
+ @FXML
private NumberField takeoffTime;
@FXML
private NumberField rechargeTime;
@@ -97,6 +99,7 @@ public class SettingsController {
pathPriority.setValue(profile.getPathPriority());
jumpTime.setValue(profile.getJumpTime());
landingTime.setValue(profile.getLandingTime());
+ orbitalTime.setValue(profile.getOrbitalTime());
takeoffTime.setValue(profile.getTakeoffTime());
rechargeTime.setValue(profile.getRechargeTime());
@@ -142,6 +145,7 @@ public class SettingsController {
profile.setPathPriority(pathPriority.getValue());
profile.setJumpTime(jumpTime.getValue().intValue());
profile.setLandingTime(landingTime.getValue().intValue());
+ profile.setOrbitalTime(orbitalTime.getValue().intValue());
profile.setTakeoffTime(takeoffTime.getValue().intValue());
profile.setRechargeTime(rechargeTime.getValue().intValue());
diff --git a/client/src/main/resources/view/settings.fxml b/client/src/main/resources/view/settings.fxml
index 40ed12e..0dec15f 100644
--- a/client/src/main/resources/view/settings.fxml
+++ b/client/src/main/resources/view/settings.fxml
@@ -39,13 +39,15 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/core/src/main/java/ru/trader/analysis/RouteFiller.java b/core/src/main/java/ru/trader/analysis/RouteFiller.java
index c4725a3..22c790a 100644
--- a/core/src/main/java/ru/trader/analysis/RouteFiller.java
+++ b/core/src/main/java/ru/trader/analysis/RouteFiller.java
@@ -4,6 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.trader.core.Offer;
import ru.trader.core.Order;
+import ru.trader.core.STATION_TYPE;
import ru.trader.core.Vendor;
import java.util.*;
diff --git a/core/src/main/java/ru/trader/analysis/Scorer.java b/core/src/main/java/ru/trader/analysis/Scorer.java
index e1d14c3..9838860 100644
--- a/core/src/main/java/ru/trader/analysis/Scorer.java
+++ b/core/src/main/java/ru/trader/analysis/Scorer.java
@@ -50,7 +50,7 @@ public class Scorer {
maxProfit = statProfit.getMax() / profile.getShip().getCargo();
avgDistance = computeAvgDistance();
- maxScore = getScore(1, statProfit.getMax(), 0, 1, 0);
+ maxScore = getScore(1, statProfit.getMax(), 0, 1, 0, 0);
}
public Profile getProfile() {
@@ -115,14 +115,16 @@ public class Scorer {
if (prev == null) return 0;
int lands = entry.isLand() ? 1 : 0;
int jumps = prev.getVendor().getPlace().equals(entry.getVendor().getPlace()) ? 0 : 1;
- double time = getTime(entry.getVendor().getDistance(), jumps, lands);
+ STATION_TYPE t = entry.getVendor().getType();
+ int planetLands = t != null && t.isPlanetary() ? 1 : 0;
+ double time = getTime(entry.getVendor().getDistance(), jumps, lands, planetLands);
if (!prev.isLand()){
time = time - profile.getTakeoffTime() + profile.getRechargeTime();
}
return Math.round(time);
}
- public long getTime(double distance, int jumps, int lands){
+ public long getTime(double distance, int jumps, int lands, int planetLands){
double time = profile.getTakeoffTime();
if (jumps > 0){
time += profile.getJumpTime() + (jumps-1) * (profile.getRechargeTime() + profile.getJumpTime());
@@ -130,6 +132,9 @@ public class Scorer {
if (profile.getLandingTime() > 0 & lands > 0){
time += (lands-1)*(getTime(avgDistance) + profile.getLandingTime() + profile.getTakeoffTime()) + getTime(distance) + profile.getLandingTime();
}
+ if (profile.getOrbitalTime() > 0 & planetLands > 0){
+ time += planetLands * profile.getOrbitalTime();
+ }
return Math.round(time);
}
@@ -140,12 +145,14 @@ public class Scorer {
}
public double getScore(Vendor vendor, double profit, int jumps, int lands, double fuel) {
- return getScore(vendor.getDistance(), profit, jumps, lands, fuel);
+ STATION_TYPE t = vendor.getType();
+ int planetLands = t != null && t.isPlanetary() ? 1 : 0;
+ return getScore(vendor.getDistance(), profit, jumps, lands, planetLands, fuel);
}
- 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);
- double score = getProfitByTonne(profit, fuel)/getTime(distance, jumps, lands);
+ public double getScore(double distance, double profit, int jumps, int lands, int planetLands, double fuel){
+ LOG.trace("Compute score distance={}, profit={}, jumps={}, lands={}, planetary lands = {}, fuel={}", distance, profit, jumps, lands, planetLands, fuel);
+ double score = getProfitByTonne(profit, fuel)/getTime(distance, jumps, lands, planetLands);
LOG.trace("score={}", score);
return score;
}
diff --git a/core/src/main/java/ru/trader/analysis/VendorsCrawler.java b/core/src/main/java/ru/trader/analysis/VendorsCrawler.java
index 999a662..2825096 100644
--- a/core/src/main/java/ru/trader/analysis/VendorsCrawler.java
+++ b/core/src/main/java/ru/trader/analysis/VendorsCrawler.java
@@ -4,6 +4,7 @@ import org.jetbrains.annotations.NotNull;
import ru.trader.analysis.graph.*;
import ru.trader.core.Order;
import ru.trader.core.SERVICE_TYPE;
+import ru.trader.core.STATION_TYPE;
import ru.trader.core.Vendor;
import java.util.Collection;
@@ -206,6 +207,8 @@ public class VendorsCrawler extends Crawler {
protected long computeTime(){
int jumps = source.getEntry().getPlace().equals(target.getEntry().getPlace())? 0 : 1;
int lands = 1;
+ STATION_TYPE t = target.getEntry().getType();
+ int planetLands = t != null && t.isPlanetary() ? 1 : 0;
if (path != null){
jumps = path.size();
lands += path.getRefillCount();
@@ -214,7 +217,7 @@ public class VendorsCrawler extends Crawler {
} else {
lands += isRefill() ? 1 :0;
}
- return getScorer().getTime(target.getEntry().getDistance(), jumps, lands);
+ return getScorer().getTime(target.getEntry().getDistance(), jumps, lands, planetLands);
}
@Override
diff --git a/core/src/main/java/ru/trader/core/Profile.java b/core/src/main/java/ru/trader/core/Profile.java
index 3fbddab..1ae00cb 100644
--- a/core/src/main/java/ru/trader/core/Profile.java
+++ b/core/src/main/java/ru/trader/core/Profile.java
@@ -19,6 +19,7 @@ public class Profile {
private double distanceTime;
private double jumpTime;
private double landingTime;
+ private double orbitalTime;
private double takeoffTime;
private double rechargeTime;
private double fuelPrice;
@@ -33,6 +34,7 @@ public class Profile {
distanceTime = 0.3;
fuelPrice = 100;
landingTime = 80;
+ orbitalTime = 30;
takeoffTime = 40;
jumpTime = 32;
rechargeTime = 12;
@@ -50,6 +52,7 @@ public class Profile {
this.distanceTime = profile.distanceTime;
this.jumpTime = profile.jumpTime;
this.landingTime = profile.landingTime;
+ this.orbitalTime = profile.orbitalTime;
this.takeoffTime = profile.takeoffTime;
this.rechargeTime = profile.rechargeTime;
this.fuelPrice = profile.fuelPrice;
@@ -163,6 +166,14 @@ public class Profile {
this.landingTime = landingTime;
}
+ public double getOrbitalTime() {
+ return orbitalTime;
+ }
+
+ public void setOrbitalTime(double orbitalTime) {
+ this.orbitalTime = orbitalTime;
+ }
+
public double getTakeoffTime() {
return takeoffTime;
}
@@ -222,6 +233,7 @@ public class Profile {
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.setOrbitalTime(Double.valueOf(values.getProperty("profile.search.times.orbital", "30")));
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")));
@@ -241,6 +253,7 @@ public class Profile {
values.setProperty("profile.search.fuel.price", String.valueOf(fuelPrice));
values.setProperty("profile.search.times.distance", String.valueOf(distanceTime));
values.setProperty("profile.search.times.landing", String.valueOf(landingTime));
+ values.setProperty("profile.search.times.orbital", String.valueOf(orbitalTime));
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));
diff --git a/core/src/test/java/ru/trader/analysis/ScorerTest.java b/core/src/test/java/ru/trader/analysis/ScorerTest.java
index 3f4ea41..7534bd7 100644
--- a/core/src/test/java/ru/trader/analysis/ScorerTest.java
+++ b/core/src/test/java/ru/trader/analysis/ScorerTest.java
@@ -38,10 +38,10 @@ public class ScorerTest extends Assert {
double avgProfit = scorer.getAvgProfit() * profile.getShip().getCargo();
- double score = scorer.getScore(scorer.getAvgDistance(), 0, 1, 1, 4);
- double score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit/2, 1, 1, 4);
- double score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit*10, 1, 1, 4);
- double score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 4);
+ double score = scorer.getScore(scorer.getAvgDistance(), 0, 1, 1, 0, 4);
+ double score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit/2, 1, 1, 0, 4);
+ double score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit*10, 1, 1, 0, 4);
+ double score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 0, 4);
assertTrue(score < score1);
assertTrue(score1 < score3);
@@ -53,56 +53,56 @@ public class ScorerTest extends Assert {
assertTrue(Math.abs(score2/score3) >= 10);
- score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 0, 1, 4);
- score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 4);
- score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 2, 1, 4);
+ score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 0, 1, 0, 4);
+ score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 0, 4);
+ score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 2, 1, 0, 4);
assertTrue(score1 > score2);
assertTrue(score2 > score3);
- score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 4);
- score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 2, 4);
- score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 3, 4);
+ score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 0, 4);
+ score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 2, 0, 4);
+ score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 3, 0, 4);
assertTrue(score1 > score2);
assertTrue(score2 > score3);
- score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 3);
- score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 4);
- score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 5);
+ score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 0, 3);
+ score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 0, 4);
+ score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 0, 5);
assertTrue(score1 > score2);
assertTrue(score2 > score3);
- score = scorer.getScore(0, avgProfit, 1, 1, 4);
- score1 = scorer.getScore(scorer.getAvgDistance()/2, avgProfit, 1, 1, 4);
- score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 4);
- score3 = scorer.getScore(scorer.getAvgDistance()*2, avgProfit, 1, 1, 4);
+ score = scorer.getScore(0, avgProfit, 1, 1, 0, 4);
+ score1 = scorer.getScore(scorer.getAvgDistance()/2, avgProfit, 1, 1, 0, 4);
+ score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 1, 1, 0, 4);
+ score3 = scorer.getScore(scorer.getAvgDistance()*2, avgProfit, 1, 1, 0, 4);
assertTrue(score > score1);
assertTrue(score1 > score2);
assertTrue(score2 > score3);
- score1 = scorer.getScore(700, avgProfit, 1, 1, 4);
- score2 = scorer.getScore(2800, avgProfit*1.2, 1, 1, 4);
- score3 = scorer.getScore(2800, avgProfit*1.5, 1, 1, 4);
+ score1 = scorer.getScore(700, avgProfit, 1, 1, 0, 4);
+ score2 = scorer.getScore(2800, avgProfit*1.2, 1, 1, 0, 4);
+ score3 = scorer.getScore(2800, avgProfit*1.5, 1, 1, 0, 4);
assertTrue(score1 > score2);
assertTrue(score3 > score1);
- score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit/2, 0, 1, 4);
- score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit*2, 1, 1, 4);
- score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit*4, 0, 1, 4);
+ score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit/2, 0, 1, 0, 4);
+ score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit*2, 1, 1, 0, 4);
+ score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit*4, 0, 1, 0, 4);
assertTrue(score2 > score1);
assertTrue(score3 > score2);
- score = scorer.getScore(scorer.getAvgDistance(), avgProfit, 2, 2, 4);
- score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit*1.2, 8, 2, 4);
- score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 8, 2, 4);
- score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit*1.4, 8, 2, 4);
+ score = scorer.getScore(scorer.getAvgDistance(), avgProfit, 2, 2, 0, 4);
+ score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit*1.2, 8, 2, 0, 4);
+ score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 8, 2, 0, 4);
+ score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit*1.4, 8, 2, 0, 4);
assertTrue(score > score1);
assertTrue(score > score2);
assertTrue(score < score3);
- score = scorer.getScore(scorer.getAvgDistance(), avgProfit, 4, 2, 4);
- score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit*1.8, 4, 4, 4);
- score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 4, 4, 4);
- score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit*2.1, 4, 4, 4);
+ score = scorer.getScore(scorer.getAvgDistance(), avgProfit, 4, 2, 0, 4);
+ score1 = scorer.getScore(scorer.getAvgDistance(), avgProfit*1.8, 4, 4, 0, 4);
+ score2 = scorer.getScore(scorer.getAvgDistance(), avgProfit, 4, 4, 0, 4);
+ score3 = scorer.getScore(scorer.getAvgDistance(), avgProfit*2.1, 4, 4, 0, 4);
assertTrue(score >= score1);
assertTrue(score > score2);
assertTrue(score < score3);