-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathExperimentRecord.java
More file actions
56 lines (50 loc) · 2.73 KB
/
Copy pathExperimentRecord.java
File metadata and controls
56 lines (50 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package lab;
import model.PuzzleDefinition;
import model.PuzzleMove;
import model.PuzzleState;
import java.time.Instant;
import java.util.List;
import java.util.Objects;
/** Versioned, shareable summary of one reproducible search experiment. */
public record ExperimentRecord(int formatVersion, String createdAt, int puzzleFormatVersion,
String puzzleContentId, PuzzleState initialState,
String movementRule, String strategy, double heuristicWeight,
int maxDiscoveredStates, String status,
SearchExperimentRunner.Metrics metrics,
List<PuzzleMove> solution, long elapsedNanos,
RuntimeEnvironment environment) {
public static final int FORMAT_VERSION = 1;
public ExperimentRecord {
if (formatVersion < 1 || puzzleFormatVersion < 1 || maxDiscoveredStates < 1
|| elapsedNanos < 0) {
throw new IllegalArgumentException("Experiment record values are invalid");
}
Objects.requireNonNull(createdAt, "createdAt");
Objects.requireNonNull(puzzleContentId, "puzzleContentId");
Objects.requireNonNull(initialState, "initialState");
Objects.requireNonNull(movementRule, "movementRule");
Objects.requireNonNull(strategy, "strategy");
Objects.requireNonNull(status, "status");
Objects.requireNonNull(metrics, "metrics");
solution = List.copyOf(solution);
Objects.requireNonNull(environment, "environment");
}
public static ExperimentRecord capture(SearchExperiment experiment,
SearchExperimentRunner.Result result) {
return capture(experiment, result, Instant.now(), RuntimeEnvironment.current());
}
public static ExperimentRecord capture(SearchExperiment experiment,
SearchExperimentRunner.Result result,
Instant createdAt,
RuntimeEnvironment environment) {
Objects.requireNonNull(experiment, "experiment");
Objects.requireNonNull(result, "result");
PuzzleDefinition puzzle = experiment.puzzle();
return new ExperimentRecord(FORMAT_VERSION, createdAt.toString(),
PuzzleDefinition.FORMAT_VERSION, puzzle.contentId(),
PuzzleState.of(puzzle.initialBoard()), puzzle.movementRule().name(),
experiment.strategy().name(), experiment.heuristicWeight(),
experiment.maxDiscoveredStates(), result.status().name(), result.metrics(),
result.solution(), result.elapsedNanos(), environment);
}
}