Difference between revisions of "Talk:Gilgalad/movementStrategy"
Jump to navigation
Jump to search
(Talk page autocreated when first thread was posted.) |
(classification data) |
||
Line 1: | Line 1: | ||
+ | So, I've always been a big fan of Tomcat's movement strategy where, if I understand correctly, you use a bunch of classification schemes and then give them scores based on their performance. I tried this a long tie ago with Gilgalad, but it didn't work well. I'm giving it another shot now, and if nothing else, hopefully it will give me a better idea of what classifiers to use and when. | ||
+ | |||
+ | some data against raiko at the end of 35 rounds: | ||
+ | |||
+ | Classifier scores are based on the predicted probability given for a known bullet being within a certain range (for now +or- 0.2 radians). After each known enemy bullet, this is updated and the printed score is classifierNScore/classifier0Score. | ||
+ | |||
+ | <code><syntaxhighlight> | ||
+ | |||
+ | Battle 1: | ||
+ | |||
+ | |||
+ | Classifier 0 scores :1.0 | ||
+ | Classifier 1 scores :0.9755870469605517 | ||
+ | Classifier 2 scores :1.2369225462233957 | ||
+ | Classifier 3 scores :1.7528612982062486 | ||
+ | Classifier 4 scores :1.5329624603178138 | ||
+ | Classifier 5 scores :1.234924887594898 | ||
+ | Classifier 6 scores :1.4174531972595874 | ||
+ | Classifier 7 scores :1.3371945667211411 | ||
+ | Classifier 8 scores :1.4380071717393625 | ||
+ | Classifier 9 scores :1.893821500835094 | ||
+ | Classifier 10 scores :1.9142428440452988 | ||
+ | Classifier 11 scores :1.813500313301308 | ||
+ | |||
+ | Battle 2: | ||
+ | Classifier 0 scores :1.0 | ||
+ | Classifier 1 scores :1.1423071895729844 | ||
+ | Classifier 2 scores :1.3729425281975491 | ||
+ | Classifier 3 scores :1.7008483463501145 | ||
+ | Classifier 4 scores :1.182167218778795 | ||
+ | Classifier 5 scores :1.4489710167607848 | ||
+ | Classifier 6 scores :1.458752434946134 | ||
+ | Classifier 7 scores :1.4119814269034254 | ||
+ | Classifier 8 scores :1.5747806346700741 | ||
+ | Classifier 9 scores :1.7756977755746486 | ||
+ | Classifier 10 scores :1.8393932242812359 | ||
+ | Classifier 11 scores :1.6320145203001994 | ||
+ | |||
+ | Battle 3: | ||
+ | Classifier 0 scores :1.0 | ||
+ | Classifier 1 scores :0.9247600453962282 | ||
+ | Classifier 2 scores :1.1469307013639247 | ||
+ | Classifier 3 scores :1.5011101838893393 | ||
+ | Classifier 4 scores :1.6256472273752074 | ||
+ | Classifier 5 scores :1.5499125684940858 | ||
+ | Classifier 6 scores :1.425592000093903 | ||
+ | Classifier 7 scores :1.5781481081082624 | ||
+ | Classifier 8 scores :1.6686308538501025 | ||
+ | Classifier 9 scores :1.7011388408736738 | ||
+ | Classifier 10 scores :1.7764882022837205 | ||
+ | Classifier 11 scores :1.6438392150877148 | ||
+ | |||
+ | |||
+ | the classifiers are set up as follows: | ||
+ | |||
+ | ClassificationWeightingScheme CWS = new AntiSimpleTargeterWeightingScheme(); | ||
+ | MovementClassifier MC = new KNNMovementClassifier(CWS, 36, 0, 5, 3, 1.0, | ||
+ | Double.MIN_VALUE, 0.0, 0.15); | ||
+ | |||
+ | CWS = new AntiSimpleTargeter2WeightingScheme(); | ||
+ | MC = new KNNMovementClassifier(CWS, 36, 0, 5, 3, 1.0, Double.MIN_VALUE, 0.0, 0.15); | ||
+ | |||
+ | CWS = new AntiSimpleTargeter3WeightingScheme(); | ||
+ | MC = new KNNMovementClassifier(CWS, 36, 0, 5, 3, 1.0, Double.MIN_VALUE, 0.0, 0.15); | ||
+ | |||
+ | CWS = new AntiStandardTargeterWeightingScheme(); | ||
+ | MC = new KNNMovementClassifier(CWS, 36, 0, 5, 10, 50.0, Double.MIN_VALUE, 0.0, 0.08); | ||
+ | |||
+ | CWS = new AntiSemiAdvancedTargeterWeightingScheme(); | ||
+ | |||
+ | MC = new KNNMovementClassifier(CWS, 36, 1, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08); | ||
+ | Classifiers.add(MC); | ||
+ | MC = new KNNMovementClassifier(CWS, 36, 3, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08); | ||
+ | Classifiers.add(MC); | ||
+ | MC = new KNNMovementClassifier(CWS, 36, 5, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08); | ||
+ | Classifiers.add(MC); | ||
+ | MC = new KNNMovementClassifier(CWS, 36, 10, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08); | ||
+ | Classifiers.add(MC); | ||
+ | MC = new KNNMovementClassifier(CWS, 36, 20, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08); | ||
+ | Classifiers.add(MC); | ||
+ | MC = new KNNMovementClassifier(CWS, 55, 50, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08); | ||
+ | Classifiers.add(MC); | ||
+ | MC = new KNNMovementClassifier(CWS, 105, 100, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08); | ||
+ | Classifiers.add(MC); | ||
+ | MC = new KNNMovementClassifier(CWS, 36, 0, 5, 10, 50.0, Double.MIN_VALUE, 4.0, 0.08); | ||
+ | Classifiers.add(MC); | ||
+ | |||
+ | |||
+ | |||
+ | public class AntiSemiAdvancedTargeterWeightingScheme extends | ||
+ | ClassificationWeightingScheme { | ||
+ | |||
+ | public AntiSemiAdvancedTargeterWeightingScheme() { | ||
+ | _weights = new double[] { 4.0, 4.0, 1.5, 2.0, 3.0, 3.0, 3.0, 3.0, 2.0}; | ||
+ | // _weights = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public double[] getPointCoordinates(DataWave wave) { | ||
+ | MovementDataWave movementWave = (MovementDataWave) wave; | ||
+ | |||
+ | double[] dataPointCoordinates = new double[_weights.length]; | ||
+ | dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime() | ||
+ | * 0.009166667; | ||
+ | dataPointCoordinates[1] = _weights[1] | ||
+ | * Math.min(Math.PI / 2, wave.getAheadWallDist()) / (Math.PI / 2); | ||
+ | dataPointCoordinates[2] = _weights[2] | ||
+ | * Math.min(Math.PI / 2, wave.getReverseWallDist()) / (Math.PI / 2); | ||
+ | dataPointCoordinates[3] = _weights[3] | ||
+ | * (wave.getVChange() + Rules.DECELERATION) | ||
+ | / (Rules.ACCELERATION + Rules.DECELERATION); | ||
+ | dataPointCoordinates[4] = _weights[4] | ||
+ | * Math.sin(movementWave.getRelHeading()); | ||
+ | |||
+ | dataPointCoordinates[5] = _weights[5] | ||
+ | * (Math.cos(movementWave.getRelHeading()) + 1) / 2; | ||
+ | dataPointCoordinates[6] = _weights[6] | ||
+ | * Math.abs(wave.getTargetVelocity()) / 8.0; | ||
+ | dataPointCoordinates[7] = _weights[7] * Math.min(1.0, movementWave.getTicksSinceVelocityChange() / movementWave.getBulletTravelTime()); | ||
+ | dataPointCoordinates[8] = _weights[8] * movementWave.getRobotDistLast10Ticks() * 0.0125; | ||
+ | |||
+ | |||
+ | return dataPointCoordinates; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public class AntiStandardTargeterWeightingScheme extends | ||
+ | ClassificationWeightingScheme { | ||
+ | |||
+ | public AntiStandardTargeterWeightingScheme() { | ||
+ | _weights = new double[] { 4.0, 4.0, 1.0, 2.0, 3.0, 3.0, 3.0, 3.0, 2.0}; | ||
+ | // _weights = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public double[] getPointCoordinates(DataWave wave) { | ||
+ | MovementDataWave movementWave = (MovementDataWave) wave; | ||
+ | |||
+ | double[] dataPointCoordinates = new double[_weights.length]; | ||
+ | dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime() | ||
+ | * 0.009166667; | ||
+ | dataPointCoordinates[1] = _weights[1] | ||
+ | * Math.min(Math.PI / 2, wave.getAheadWallDist()) / (Math.PI / 2); | ||
+ | dataPointCoordinates[2] = _weights[2] | ||
+ | * Math.min(Math.PI / 2, wave.getReverseWallDist()) / (Math.PI / 2); | ||
+ | dataPointCoordinates[3] = _weights[3] | ||
+ | * (wave.getVChange() + Rules.DECELERATION) | ||
+ | / (Rules.ACCELERATION + Rules.DECELERATION); | ||
+ | dataPointCoordinates[4] = _weights[4] | ||
+ | * Math.sin(movementWave.getRelHeading()); | ||
+ | |||
+ | dataPointCoordinates[5] = _weights[5] | ||
+ | * (Math.cos(movementWave.getRelHeading()) + 1) / 2; | ||
+ | dataPointCoordinates[6] = _weights[6] | ||
+ | * Math.abs(wave.getTargetVelocity()) / 8.0; | ||
+ | dataPointCoordinates[7] = _weights[7] * Math.min(1.0, movementWave.getTicksSinceVelocityChange() / movementWave.getBulletTravelTime()); | ||
+ | dataPointCoordinates[8] = _weights[8] * movementWave.getRobotDistLast10Ticks() * 0.0125; | ||
+ | |||
+ | return dataPointCoordinates; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | public class AntiSimpleTargeterWeightingScheme extends | ||
+ | ClassificationWeightingScheme { | ||
+ | |||
+ | public AntiSimpleTargeterWeightingScheme() { | ||
+ | _weights = new double[] { 1.0, 1.0 }; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public double[] getPointCoordinates(DataWave wave) { | ||
+ | MovementDataWave movementWave = (MovementDataWave) wave; | ||
+ | |||
+ | double[] dataPointCoordinates = new double[_weights.length]; | ||
+ | dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime() | ||
+ | * 0.009166667; | ||
+ | dataPointCoordinates[1] = _weights[1] * Math.abs(movementWave.getTargetVelocity() * Math.sin(movementWave.getRelHeading())) | ||
+ | / 8.0; | ||
+ | |||
+ | |||
+ | return dataPointCoordinates; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public class AntiSimpleTargeter2WeightingScheme extends | ||
+ | ClassificationWeightingScheme { | ||
+ | |||
+ | public AntiSimpleTargeter2WeightingScheme() { | ||
+ | _weights = new double[] { 1.0, 1.0, 1.0}; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public double[] getPointCoordinates(DataWave wave) { | ||
+ | MovementDataWave movementWave = (MovementDataWave) wave; | ||
+ | |||
+ | double[] dataPointCoordinates = new double[_weights.length]; | ||
+ | dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime() | ||
+ | * 0.009166667; | ||
+ | dataPointCoordinates[1] = _weights[1] * Math.abs(movementWave.getTargetVelocity()) | ||
+ | / 8.0; | ||
+ | dataPointCoordinates[2] = _weights[2] * (Math.cos(movementWave.getRelHeading()) + 1) / 2; | ||
+ | |||
+ | |||
+ | return dataPointCoordinates; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public class AntiSimpleTargeter3WeightingScheme extends | ||
+ | ClassificationWeightingScheme { | ||
+ | |||
+ | public AntiSimpleTargeter3WeightingScheme() { | ||
+ | _weights = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0}; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public double[] getPointCoordinates(DataWave wave) { | ||
+ | MovementDataWave movementWave = (MovementDataWave) wave; | ||
+ | |||
+ | double[] dataPointCoordinates = new double[_weights.length]; | ||
+ | dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime() | ||
+ | * 0.009166667; | ||
+ | dataPointCoordinates[1] = _weights[1] | ||
+ | * Math.sin(movementWave.getRelHeading()); | ||
+ | dataPointCoordinates[2] = _weights[2] | ||
+ | * (Math.cos(movementWave.getRelHeading()) + 1) / 2; | ||
+ | dataPointCoordinates[3] = _weights[3] * Math.abs(movementWave.getTargetVelocity()) | ||
+ | / 8.0; | ||
+ | dataPointCoordinates[4] = _weights[4] * (wave.getVChange() + Rules.DECELERATION) | ||
+ | / (Rules.ACCELERATION + Rules.DECELERATION); | ||
+ | |||
+ | |||
+ | return dataPointCoordinates; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | [[User:AW|AW]] 16:16, 31 March 2013 (UTC) |
Latest revision as of 17:16, 31 March 2013
So, I've always been a big fan of Tomcat's movement strategy where, if I understand correctly, you use a bunch of classification schemes and then give them scores based on their performance. I tried this a long tie ago with Gilgalad, but it didn't work well. I'm giving it another shot now, and if nothing else, hopefully it will give me a better idea of what classifiers to use and when.
some data against raiko at the end of 35 rounds:
Classifier scores are based on the predicted probability given for a known bullet being within a certain range (for now +or- 0.2 radians). After each known enemy bullet, this is updated and the printed score is classifierNScore/classifier0Score.
Battle 1:
Classifier 0 scores :1.0
Classifier 1 scores :0.9755870469605517
Classifier 2 scores :1.2369225462233957
Classifier 3 scores :1.7528612982062486
Classifier 4 scores :1.5329624603178138
Classifier 5 scores :1.234924887594898
Classifier 6 scores :1.4174531972595874
Classifier 7 scores :1.3371945667211411
Classifier 8 scores :1.4380071717393625
Classifier 9 scores :1.893821500835094
Classifier 10 scores :1.9142428440452988
Classifier 11 scores :1.813500313301308
Battle 2:
Classifier 0 scores :1.0
Classifier 1 scores :1.1423071895729844
Classifier 2 scores :1.3729425281975491
Classifier 3 scores :1.7008483463501145
Classifier 4 scores :1.182167218778795
Classifier 5 scores :1.4489710167607848
Classifier 6 scores :1.458752434946134
Classifier 7 scores :1.4119814269034254
Classifier 8 scores :1.5747806346700741
Classifier 9 scores :1.7756977755746486
Classifier 10 scores :1.8393932242812359
Classifier 11 scores :1.6320145203001994
Battle 3:
Classifier 0 scores :1.0
Classifier 1 scores :0.9247600453962282
Classifier 2 scores :1.1469307013639247
Classifier 3 scores :1.5011101838893393
Classifier 4 scores :1.6256472273752074
Classifier 5 scores :1.5499125684940858
Classifier 6 scores :1.425592000093903
Classifier 7 scores :1.5781481081082624
Classifier 8 scores :1.6686308538501025
Classifier 9 scores :1.7011388408736738
Classifier 10 scores :1.7764882022837205
Classifier 11 scores :1.6438392150877148
the classifiers are set up as follows:
ClassificationWeightingScheme CWS = new AntiSimpleTargeterWeightingScheme();
MovementClassifier MC = new KNNMovementClassifier(CWS, 36, 0, 5, 3, 1.0,
Double.MIN_VALUE, 0.0, 0.15);
CWS = new AntiSimpleTargeter2WeightingScheme();
MC = new KNNMovementClassifier(CWS, 36, 0, 5, 3, 1.0, Double.MIN_VALUE, 0.0, 0.15);
CWS = new AntiSimpleTargeter3WeightingScheme();
MC = new KNNMovementClassifier(CWS, 36, 0, 5, 3, 1.0, Double.MIN_VALUE, 0.0, 0.15);
CWS = new AntiStandardTargeterWeightingScheme();
MC = new KNNMovementClassifier(CWS, 36, 0, 5, 10, 50.0, Double.MIN_VALUE, 0.0, 0.08);
CWS = new AntiSemiAdvancedTargeterWeightingScheme();
MC = new KNNMovementClassifier(CWS, 36, 1, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08);
Classifiers.add(MC);
MC = new KNNMovementClassifier(CWS, 36, 3, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08);
Classifiers.add(MC);
MC = new KNNMovementClassifier(CWS, 36, 5, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08);
Classifiers.add(MC);
MC = new KNNMovementClassifier(CWS, 36, 10, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08);
Classifiers.add(MC);
MC = new KNNMovementClassifier(CWS, 36, 20, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08);
Classifiers.add(MC);
MC = new KNNMovementClassifier(CWS, 55, 50, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08);
Classifiers.add(MC);
MC = new KNNMovementClassifier(CWS, 105, 100, 5, 5, 50.0, Double.MIN_VALUE, 4.0, 0.08);
Classifiers.add(MC);
MC = new KNNMovementClassifier(CWS, 36, 0, 5, 10, 50.0, Double.MIN_VALUE, 4.0, 0.08);
Classifiers.add(MC);
public class AntiSemiAdvancedTargeterWeightingScheme extends
ClassificationWeightingScheme {
public AntiSemiAdvancedTargeterWeightingScheme() {
_weights = new double[] { 4.0, 4.0, 1.5, 2.0, 3.0, 3.0, 3.0, 3.0, 2.0};
// _weights = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
}
@Override
public double[] getPointCoordinates(DataWave wave) {
MovementDataWave movementWave = (MovementDataWave) wave;
double[] dataPointCoordinates = new double[_weights.length];
dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime()
* 0.009166667;
dataPointCoordinates[1] = _weights[1]
* Math.min(Math.PI / 2, wave.getAheadWallDist()) / (Math.PI / 2);
dataPointCoordinates[2] = _weights[2]
* Math.min(Math.PI / 2, wave.getReverseWallDist()) / (Math.PI / 2);
dataPointCoordinates[3] = _weights[3]
* (wave.getVChange() + Rules.DECELERATION)
/ (Rules.ACCELERATION + Rules.DECELERATION);
dataPointCoordinates[4] = _weights[4]
* Math.sin(movementWave.getRelHeading());
dataPointCoordinates[5] = _weights[5]
* (Math.cos(movementWave.getRelHeading()) + 1) / 2;
dataPointCoordinates[6] = _weights[6]
* Math.abs(wave.getTargetVelocity()) / 8.0;
dataPointCoordinates[7] = _weights[7] * Math.min(1.0, movementWave.getTicksSinceVelocityChange() / movementWave.getBulletTravelTime());
dataPointCoordinates[8] = _weights[8] * movementWave.getRobotDistLast10Ticks() * 0.0125;
return dataPointCoordinates;
}
}
public class AntiStandardTargeterWeightingScheme extends
ClassificationWeightingScheme {
public AntiStandardTargeterWeightingScheme() {
_weights = new double[] { 4.0, 4.0, 1.0, 2.0, 3.0, 3.0, 3.0, 3.0, 2.0};
// _weights = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
}
@Override
public double[] getPointCoordinates(DataWave wave) {
MovementDataWave movementWave = (MovementDataWave) wave;
double[] dataPointCoordinates = new double[_weights.length];
dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime()
* 0.009166667;
dataPointCoordinates[1] = _weights[1]
* Math.min(Math.PI / 2, wave.getAheadWallDist()) / (Math.PI / 2);
dataPointCoordinates[2] = _weights[2]
* Math.min(Math.PI / 2, wave.getReverseWallDist()) / (Math.PI / 2);
dataPointCoordinates[3] = _weights[3]
* (wave.getVChange() + Rules.DECELERATION)
/ (Rules.ACCELERATION + Rules.DECELERATION);
dataPointCoordinates[4] = _weights[4]
* Math.sin(movementWave.getRelHeading());
dataPointCoordinates[5] = _weights[5]
* (Math.cos(movementWave.getRelHeading()) + 1) / 2;
dataPointCoordinates[6] = _weights[6]
* Math.abs(wave.getTargetVelocity()) / 8.0;
dataPointCoordinates[7] = _weights[7] * Math.min(1.0, movementWave.getTicksSinceVelocityChange() / movementWave.getBulletTravelTime());
dataPointCoordinates[8] = _weights[8] * movementWave.getRobotDistLast10Ticks() * 0.0125;
return dataPointCoordinates;
}
}
public class AntiSimpleTargeterWeightingScheme extends
ClassificationWeightingScheme {
public AntiSimpleTargeterWeightingScheme() {
_weights = new double[] { 1.0, 1.0 };
}
@Override
public double[] getPointCoordinates(DataWave wave) {
MovementDataWave movementWave = (MovementDataWave) wave;
double[] dataPointCoordinates = new double[_weights.length];
dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime()
* 0.009166667;
dataPointCoordinates[1] = _weights[1] * Math.abs(movementWave.getTargetVelocity() * Math.sin(movementWave.getRelHeading()))
/ 8.0;
return dataPointCoordinates;
}
}
public class AntiSimpleTargeter2WeightingScheme extends
ClassificationWeightingScheme {
public AntiSimpleTargeter2WeightingScheme() {
_weights = new double[] { 1.0, 1.0, 1.0};
}
@Override
public double[] getPointCoordinates(DataWave wave) {
MovementDataWave movementWave = (MovementDataWave) wave;
double[] dataPointCoordinates = new double[_weights.length];
dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime()
* 0.009166667;
dataPointCoordinates[1] = _weights[1] * Math.abs(movementWave.getTargetVelocity())
/ 8.0;
dataPointCoordinates[2] = _weights[2] * (Math.cos(movementWave.getRelHeading()) + 1) / 2;
return dataPointCoordinates;
}
}
public class AntiSimpleTargeter3WeightingScheme extends
ClassificationWeightingScheme {
public AntiSimpleTargeter3WeightingScheme() {
_weights = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0};
}
@Override
public double[] getPointCoordinates(DataWave wave) {
MovementDataWave movementWave = (MovementDataWave) wave;
double[] dataPointCoordinates = new double[_weights.length];
dataPointCoordinates[0] = _weights[0] * movementWave.getBulletTravelTime()
* 0.009166667;
dataPointCoordinates[1] = _weights[1]
* Math.sin(movementWave.getRelHeading());
dataPointCoordinates[2] = _weights[2]
* (Math.cos(movementWave.getRelHeading()) + 1) / 2;
dataPointCoordinates[3] = _weights[3] * Math.abs(movementWave.getTargetVelocity())
/ 8.0;
dataPointCoordinates[4] = _weights[4] * (wave.getVChange() + Rules.DECELERATION)
/ (Rules.ACCELERATION + Rules.DECELERATION);
return dataPointCoordinates;
}
}
AW 16:16, 31 March 2013 (UTC)