Skip to content

Commit 1014ee9

Browse files
committed
final submission of medicine codingame
1 parent 20aaada commit 1014ee9

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

src/main/java/main/java/codingame/code4life/Medicine.java

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public Node findBestMove() {
9090
}
9191
current.expand();
9292
for (final Node child : current.children) {
93-
for (int simulate = 0; simulate < 1; simulate++) {
93+
for (int simulate = 0; simulate < 3; simulate++) {
9494
current.propagate(child.simulation());
9595
}
9696
}
@@ -112,7 +112,7 @@ public Node findBestMove() {
112112

113113
public static long evaluate(final GameState gameState) {
114114
final Robot first = gameState.robots[gameState.player];
115-
return (long) (100 * first.score + (1 - gameState.rounds / 400.0) * (10 * first.totalExpertise + first.totalMolecules));
115+
return (long) (100 * first.score + (100 - gameState.rounds / 4.0) * (10 * first.totalExpertise + first.totalMolecules));
116116
}
117117

118118
}
@@ -145,9 +145,8 @@ public Node getNextChild() {
145145
double max = -1;
146146
Node maxNode = null;
147147
for (final Node node : children) {
148-
final long nodePlays = node.plays.longValue();
149-
final double rawScore = (((double) node.totalScore.longValue()) / totalScore.longValue()) - Math.sqrt(2 * Math.log(plays.longValue()) / nodePlays);
150-
final double score = rawScore + node.gameState.bias / (nodePlays + 1);
148+
double raw = (double) node.totalScore.longValue() / plays.longValue() - Math.sqrt(2 * Math.log(plays.longValue()) / node.plays.longValue());
149+
final double score = raw + (1000 * node.gameState.bias / (node.plays.longValue() + 1));
151150
if (score > max) {
152151
max = score;
153152
maxNode = node;
@@ -181,7 +180,7 @@ public long simulation() {
181180
} else {
182181
Node now = this;
183182
int rounds = 0;
184-
while (rounds < 26) {
183+
while (rounds < 18) {
185184
expand();
186185
now = children.get(random.nextInt(children.size()));
187186
rounds += 2;
@@ -218,38 +217,38 @@ private Map<GameState, String> getPossibleMoves(final GameState gameState) {
218217
}
219218
if (currentBot.samplesLength < 3) {
220219
if (9 <= currentBot.totalExpertise) {
221-
gameStates.put(gameState.play(2), Action.CONNECT.name() + " " + 3);
220+
gameStates.put(gameState.play(2).setBias(10), Action.CONNECT.name() + " " + 3);
222221
} else if (6 <= currentBot.totalExpertise) {
223-
gameStates.put(gameState.play(1), Action.CONNECT.name() + " " + 2);
222+
gameStates.put(gameState.play(1).setBias(10), Action.CONNECT.name() + " " + 2);
224223
} else if (2 <= currentBot.totalExpertise) {
224+
gameStates.put(gameState.play(1).setBias(10), Action.CONNECT.name() + " " + 2);
225225
gameStates.put(gameState.play(0).setBias(0.1), Action.CONNECT.name() + " " + 1);
226-
gameStates.put(gameState.play(1), Action.CONNECT.name() + " " + 2);
227226
} else {
228-
gameStates.put(gameState.play(0), Action.CONNECT.name() + " " + 1);
227+
gameStates.put(gameState.play(0).setBias(10), Action.CONNECT.name() + " " + 1);
229228
}
230229
}
231230
break;
232231
}
233232
case DIAGNOSIS: {
234233
if (currentBot.canMakeMedicine()) {
235-
gameStates.put(gameState.play(Position.LABORATORY).setBias(0.95), Action.GOTO.name() + " " + Position.LABORATORY.name());
234+
gameStates.put(gameState.play(Position.LABORATORY).setBias(1000), Action.GOTO.name() + " " + Position.LABORATORY.name());
236235
}
237236
if (currentBot.totalMolecules < 5) {
238237
gameStates.put(gameState.play(Position.MOLECULES).setBias(0.4), Action.GOTO.name() + " " + Position.MOLECULES.name());
239238
} else if (currentBot.totalMolecules < 10) {
240239
for (int i = 0; i < currentBot.samplesLength; i++) {
241240
final Sample sample = currentBot.samples[i];
242241
if (currentBot.isPossible(sample, gameState.availableMolecules) && !currentBot.isAdequate(sample)) {
243-
gameStates.put(gameState.play(Position.MOLECULES).setBias(0.95), Action.GOTO.name() + " " + Position.MOLECULES.name());
242+
gameStates.put(gameState.play(Position.MOLECULES).setBias(9), Action.GOTO.name() + " " + Position.MOLECULES.name());
244243
}
245244
}
246245
}
247246
if (currentBot.samplesLength < 3) {
248247
gameStates.put(gameState.play(Position.SAMPLES).setBias(0.2), Action.GOTO.name() + " " + Position.SAMPLES.name());
249248
}
250249
for (int i = 0; i < currentBot.samplesLength; i++) {
251-
if (!currentBot.samples[i].visible || !currentBot.isPossible(currentBot.samples[i], gameState.availableMolecules)) {
252-
gameStates.put(gameState.play(currentBot.samples[i].material.sampleId),
250+
if (!currentBot.samples[i].visible) {
251+
gameStates.put(gameState.play(currentBot.samples[i].material.sampleId).setBias(10),
253252
Action.CONNECT.name() + " " + currentBot.samples[i].material.sampleId);
254253
}
255254
}
@@ -259,29 +258,28 @@ private Map<GameState, String> getPossibleMoves(final GameState gameState) {
259258
final int rank = gameState.samples[i].material.rank;
260259
if (rank == 2) {
261260
if (5 <= currentBot.totalExpertise) {
262-
gameStates.put(gameState.play(gameState.samples[i].material.sampleId), Action.CONNECT.name() + " " + gameState.samples[i].material.sampleId);
261+
gameStates.put(gameState.play(gameState.samples[i].material.sampleId).setBias(3), Action.CONNECT.name() + " " + gameState.samples[i].material.sampleId);
263262
}
264263
} else if (rank == 1) {
265264
if (2 <= currentBot.totalExpertise) {
266-
gameStates.put(gameState.play(gameState.samples[i].material.sampleId), Action.CONNECT.name() + " " + gameState.samples[i].material.sampleId);
265+
gameStates.put(gameState.play(gameState.samples[i].material.sampleId).setBias(3), Action.CONNECT.name() + " " + gameState.samples[i].material.sampleId);
267266
}
268267
} else {
269-
final GameState play = gameState.play(gameState.samples[i].material.sampleId);
270-
gameStates.put(play.setBias(0.25), Action.CONNECT.name() + " " + gameState.samples[i].material.sampleId);
268+
gameStates.put(gameState.play(gameState.samples[i].material.sampleId).setBias(3), Action.CONNECT.name() + " " + gameState.samples[i].material.sampleId);
271269
}
272270
}
273271
}
274272
}
275273
if (gameStates.size() == 0) {
276274
for (int i = 0; i < currentBot.samplesLength; i++) {
277-
gameStates.put(gameState.play(currentBot.samples[i].material.sampleId), Action.CONNECT.name() + " " + currentBot.samples[i].material.sampleId);
275+
gameStates.put(gameState.play(currentBot.samples[i].material.sampleId).setBias(3), Action.CONNECT.name() + " " + currentBot.samples[i].material.sampleId);
278276
}
279277
}
280278
break;
281279
}
282280
case MOLECULES: {
283281
if (currentBot.canMakeMedicine()) {
284-
gameStates.put(gameState.play(Position.LABORATORY).setBias(0.9), Action.GOTO.name() + " " + Position.LABORATORY.name());
282+
gameStates.put(gameState.play(Position.LABORATORY).setBias(1000), Action.GOTO.name() + " " + Position.LABORATORY.name());
285283
}
286284
if (diagnosisLeft || gameState.samplesLength != 0 || currentBot.samplesLength == 3) {
287285
gameStates.put(gameState.play(Position.DIAGNOSIS).setBias(0.4), Action.GOTO.name() + " " + Position.DIAGNOSIS.name());
@@ -293,10 +291,10 @@ private Map<GameState, String> getPossibleMoves(final GameState gameState) {
293291
int x = 0;
294292
for (int i = 0; i < currentBot.samplesLength; i++) {
295293
final Sample sample = currentBot.samples[i];
296-
if (currentBot.isPossible(sample, gameState.availableMolecules) && !currentBot.isAdequate(sample)) {
294+
if (currentBot.isPossible(sample, gameState.availableMolecules)) {
297295
for (int j = 0; j < gameState.availableMolecules.length; j++) {
298296
if (gameState.availableMolecules[j] > 0 && currentBot.storage[j] + currentBot.expertise[j] < sample.material.cost[j]) {
299-
gameStates.put(gameState.play(j), Action.CONNECT.name() + " " + (char) ('A' + j));
297+
gameStates.put(gameState.play(j).setBias(1000), Action.CONNECT.name() + " " + (char) ('A' + j));
300298
x++;
301299
}
302300
}
@@ -305,7 +303,7 @@ private Map<GameState, String> getPossibleMoves(final GameState gameState) {
305303
if (x == 0 && currentBot.totalMolecules < 5) {
306304
for (int j = 0; j < gameState.availableMolecules.length; j++) {
307305
if (gameState.availableMolecules[j] > 0) {
308-
gameStates.put(gameState.play(j), Action.CONNECT.name() + " " + (char) ('A' + j));
306+
gameStates.put(gameState.play(j).setBias(1000), Action.CONNECT.name() + " " + (char) ('A' + j));
309307
}
310308
}
311309
}
@@ -317,7 +315,7 @@ private Map<GameState, String> getPossibleMoves(final GameState gameState) {
317315
final Sample sample = currentBot.samples[i];
318316
if (sample.visible) {
319317
if (currentBot.isAdequate(sample)) {
320-
gameStates.put(gameState.play(sample.material.sampleId).setBias(100), Action.CONNECT.name() + " " + sample.material.sampleId);
318+
gameStates.put(gameState.play(sample.material.sampleId).setBias(1000), Action.CONNECT.name() + " " + sample.material.sampleId);
321319
}
322320
}
323321
}
@@ -852,6 +850,9 @@ public boolean canMakeMedicine() {
852850
}
853851

854852
public boolean isAdequate(final Sample sample) {
853+
if (!sample.visible) {
854+
return false;
855+
}
855856
for (int i = 0; i < storage.length; i++) {
856857
if (storage[i] + expertise[i] < sample.material.cost[i]) {
857858
return false;
@@ -861,6 +862,9 @@ public boolean isAdequate(final Sample sample) {
861862
}
862863

863864
public boolean isPossible(final Sample sample, final int available[]) {
865+
if (!sample.visible) {
866+
return false;
867+
}
864868
for (int i = 0; i < storage.length; i++) {
865869
if (storage[i] + expertise[i] + available[i] < sample.material.cost[i]) {
866870
return false;

0 commit comments

Comments
 (0)