|
|
|
@ -41,6 +41,8 @@ public class BattlefieldParameterEvaluator { |
|
|
|
|
final static int NUM_TRAINING_EPOCHS = 100000; |
|
|
|
|
// The requested error in nn training
|
|
|
|
|
final static double NN_TRAINING_ERROR = 0.01; |
|
|
|
|
// Maximum robot score obtained - used for scaling <0,1>
|
|
|
|
|
final static int BATTLE_MAX_SCORE = 250; |
|
|
|
|
|
|
|
|
|
static int NdxBattle; |
|
|
|
|
static double[] FinalScore1; |
|
|
|
@ -72,8 +74,10 @@ public class BattlefieldParameterEvaluator { |
|
|
|
|
RobotSetup[] robotSetups = new RobotSetup[2]; |
|
|
|
|
for (NdxBattle = 0; NdxBattle < NUMSAMPLES; NdxBattle++) { |
|
|
|
|
// Choose the battlefield size and gun cooling rate
|
|
|
|
|
BattlefieldSize[NdxBattle] = rangedRand(rng, MINBATTLEFIELDSIZE, MAXBATTLEFIELDSIZE); |
|
|
|
|
GunCoolingRate[NdxBattle] = rangedRand(rng, MINGUNCOOLINGRATE, MAXGUNCOOLINGRATE); |
|
|
|
|
// BattlefieldSize[NdxBattle] = rangedRand(rng, MINBATTLEFIELDSIZE, MAXBATTLEFIELDSIZE);
|
|
|
|
|
// GunCoolingRate[NdxBattle] = rangedRand(rng, MINGUNCOOLINGRATE, MAXGUNCOOLINGRATE);
|
|
|
|
|
BattlefieldSize[NdxBattle] = MAXBATTLEFIELDSIZE * (0.1 + 0.9 * rng.nextDouble()); |
|
|
|
|
GunCoolingRate[NdxBattle] = MAXGUNCOOLINGRATE * (0.1 + 0.9 * rng.nextDouble()); |
|
|
|
|
// Create the battlefield
|
|
|
|
|
BattlefieldSpecification battlefield = new BattlefieldSpecification((int) BattlefieldSize[NdxBattle], |
|
|
|
|
(int) BattlefieldSize[NdxBattle]); |
|
|
|
@ -101,7 +105,7 @@ public class BattlefieldParameterEvaluator { |
|
|
|
|
// the interval [0,1]
|
|
|
|
|
RawInputs[NdxSample][0] = BattlefieldSize[NdxSample] / MAXBATTLEFIELDSIZE; |
|
|
|
|
RawInputs[NdxSample][1] = GunCoolingRate[NdxSample] / MAXGUNCOOLINGRATE; |
|
|
|
|
RawOutputs[NdxSample][0] = FinalScore1[NdxSample] / 250; |
|
|
|
|
RawOutputs[NdxSample][0] = FinalScore1[NdxSample] / BATTLE_MAX_SCORE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BasicMLDataSet MyDataSet = new BasicMLDataSet(RawInputs, RawOutputs); |
|
|
|
@ -144,12 +148,10 @@ public class BattlefieldParameterEvaluator { |
|
|
|
|
// Simulate the neural network with the test samples and fill a matrix
|
|
|
|
|
for (int NdxBattleSize = 0; NdxBattleSize < NUMBATTLEFIELDSIZES; NdxBattleSize++) { |
|
|
|
|
for (int NdxCooling = 0; NdxCooling < NUMCOOLINGRATES; NdxCooling++) { |
|
|
|
|
// TODO INSERT SOMETHING HERE
|
|
|
|
|
// Get the output data using teached neural network
|
|
|
|
|
BasicMLData input = new BasicMLData(MyTestData[NdxCooling + NdxBattleSize * NUMCOOLINGRATES]); |
|
|
|
|
final MLData output = network.compute(input.clone()); |
|
|
|
|
double MyResult = output.getData()[0]; |
|
|
|
|
// double MyResult = 0.0; // MyTestData[NdxCooling+NdxBattleSize*NUMCOOLINGRATES];
|
|
|
|
|
// double MyResult = MyTestData[NdxCooling + NdxBattleSize * NUMCOOLINGRATES];
|
|
|
|
|
MyValue = ClipColor(MyResult); |
|
|
|
|
MyColor = new Color((float) MyValue, (float) MyValue, (float) MyValue); |
|
|
|
|
OutputRGBint[NdxCooling + NdxBattleSize * NUMCOOLINGRATES] = MyColor.getRGB(); |
|
|
|
@ -158,7 +160,7 @@ public class BattlefieldParameterEvaluator { |
|
|
|
|
System.out.println("Testing completed."); |
|
|
|
|
// Plot the training samples
|
|
|
|
|
for (int NdxSample = 0; NdxSample < NUMSAMPLES; NdxSample++) { |
|
|
|
|
MyValue = ClipColor(FinalScore1[NdxSample] / 250); |
|
|
|
|
MyValue = ClipColor(FinalScore1[NdxSample] / BATTLE_MAX_SCORE); |
|
|
|
|
MyColor = new Color((float) MyValue, (float) MyValue, (float) MyValue); |
|
|
|
|
int MyPixelIndex = (int) (Math.round(NUMCOOLINGRATES * ((GunCoolingRate[NdxSample] / MAXGUNCOOLINGRATE) - 0.1) / 0.9) + Math |
|
|
|
|
.round(NUMBATTLEFIELDSIZES * ((BattlefieldSize[NdxSample] / MAXBATTLEFIELDSIZE) - 0.1) / 0.9) |
|
|
|
|