@aura3d/scripting 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/AdaptiveDifficultyFixtures.d.ts +58 -0
- package/dist/AdaptiveDifficultyFixtures.d.ts.map +1 -0
- package/dist/AdaptiveDifficultyFixtures.js +228 -0
- package/dist/AdaptiveDifficultyFixtures.js.map +1 -0
- package/dist/AnalyticsPrivacyFixtures.d.ts +63 -0
- package/dist/AnalyticsPrivacyFixtures.d.ts.map +1 -0
- package/dist/AnalyticsPrivacyFixtures.js +120 -0
- package/dist/AnalyticsPrivacyFixtures.js.map +1 -0
- package/dist/Behavior.d.ts +10 -0
- package/dist/Behavior.d.ts.map +1 -0
- package/dist/Behavior.js +2 -0
- package/dist/Behavior.js.map +1 -0
- package/dist/BehaviorHost.d.ts +17 -0
- package/dist/BehaviorHost.d.ts.map +1 -0
- package/dist/BehaviorHost.js +39 -0
- package/dist/BehaviorHost.js.map +1 -0
- package/dist/BehaviorRegistry.d.ts +8 -0
- package/dist/BehaviorRegistry.d.ts.map +1 -0
- package/dist/BehaviorRegistry.js +17 -0
- package/dist/BehaviorRegistry.js.map +1 -0
- package/dist/BehaviorSystem.d.ts +26 -0
- package/dist/BehaviorSystem.d.ts.map +1 -0
- package/dist/BehaviorSystem.js +76 -0
- package/dist/BehaviorSystem.js.map +1 -0
- package/dist/BehaviorTree.d.ts +75 -0
- package/dist/BehaviorTree.d.ts.map +1 -0
- package/dist/BehaviorTree.js +204 -0
- package/dist/BehaviorTree.js.map +1 -0
- package/dist/CloudServiceFixtures.d.ts +81 -0
- package/dist/CloudServiceFixtures.d.ts.map +1 -0
- package/dist/CloudServiceFixtures.js +144 -0
- package/dist/CloudServiceFixtures.js.map +1 -0
- package/dist/CulturalBehaviorFixtures.d.ts +75 -0
- package/dist/CulturalBehaviorFixtures.d.ts.map +1 -0
- package/dist/CulturalBehaviorFixtures.js +180 -0
- package/dist/CulturalBehaviorFixtures.js.map +1 -0
- package/dist/DecisionTree.d.ts +42 -0
- package/dist/DecisionTree.d.ts.map +1 -0
- package/dist/DecisionTree.js +125 -0
- package/dist/DecisionTree.js.map +1 -0
- package/dist/GOAP.d.ts +51 -0
- package/dist/GOAP.d.ts.map +1 -0
- package/dist/GOAP.js +105 -0
- package/dist/GOAP.js.map +1 -0
- package/dist/HTN.d.ts +58 -0
- package/dist/HTN.d.ts.map +1 -0
- package/dist/HTN.js +115 -0
- package/dist/HTN.js.map +1 -0
- package/dist/LearningAgentFixtures.d.ts +60 -0
- package/dist/LearningAgentFixtures.d.ts.map +1 -0
- package/dist/LearningAgentFixtures.js +122 -0
- package/dist/LearningAgentFixtures.js.map +1 -0
- package/dist/NetworkReplicationFixtures.d.ts +82 -0
- package/dist/NetworkReplicationFixtures.d.ts.map +1 -0
- package/dist/NetworkReplicationFixtures.js +330 -0
- package/dist/NetworkReplicationFixtures.js.map +1 -0
- package/dist/Perception.d.ts +58 -0
- package/dist/Perception.d.ts.map +1 -0
- package/dist/Perception.js +111 -0
- package/dist/Perception.js.map +1 -0
- package/dist/PlayerBehaviorTelemetryFixtures.d.ts +74 -0
- package/dist/PlayerBehaviorTelemetryFixtures.d.ts.map +1 -0
- package/dist/PlayerBehaviorTelemetryFixtures.js +189 -0
- package/dist/PlayerBehaviorTelemetryFixtures.js.map +1 -0
- package/dist/ProceduralContentAdaptationFixtures.d.ts +52 -0
- package/dist/ProceduralContentAdaptationFixtures.d.ts.map +1 -0
- package/dist/ProceduralContentAdaptationFixtures.js +149 -0
- package/dist/ProceduralContentAdaptationFixtures.js.map +1 -0
- package/dist/ScriptContext.d.ts +18 -0
- package/dist/ScriptContext.d.ts.map +1 -0
- package/dist/ScriptContext.js +21 -0
- package/dist/ScriptContext.js.map +1 -0
- package/dist/StateMachine.d.ts +52 -0
- package/dist/StateMachine.d.ts.map +1 -0
- package/dist/StateMachine.js +117 -0
- package/dist/StateMachine.js.map +1 -0
- package/dist/UtilityAI.d.ts +55 -0
- package/dist/UtilityAI.d.ts.map +1 -0
- package/dist/UtilityAI.js +113 -0
- package/dist/UtilityAI.js.map +1 -0
- package/dist/VisualGraph.d.ts +20 -0
- package/dist/VisualGraph.d.ts.map +1 -0
- package/dist/VisualGraph.js +191 -0
- package/dist/VisualGraph.js.map +1 -0
- package/dist/VisualGraphContext.d.ts +123 -0
- package/dist/VisualGraphContext.d.ts.map +1 -0
- package/dist/VisualGraphContext.js +2 -0
- package/dist/VisualGraphContext.js.map +1 -0
- package/dist/VisualGraphExecutor.d.ts +16 -0
- package/dist/VisualGraphExecutor.d.ts.map +1 -0
- package/dist/VisualGraphExecutor.js +571 -0
- package/dist/VisualGraphExecutor.js.map +1 -0
- package/dist/VisualNode.d.ts +17 -0
- package/dist/VisualNode.d.ts.map +1 -0
- package/dist/VisualNode.js +24 -0
- package/dist/VisualNode.js.map +1 -0
- package/dist/VisualNodeCatalog.d.ts +14 -0
- package/dist/VisualNodeCatalog.d.ts.map +1 -0
- package/dist/VisualNodeCatalog.js +142 -0
- package/dist/VisualNodeCatalog.js.map +1 -0
- package/dist/WeaponSystem.d.ts +228 -0
- package/dist/WeaponSystem.d.ts.map +1 -0
- package/dist/WeaponSystem.js +530 -0
- package/dist/WeaponSystem.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/package.json +13 -0
- package/src/AdaptiveDifficultyFixtures.ts +324 -0
- package/src/AnalyticsPrivacyFixtures.ts +182 -0
- package/src/Behavior.ts +11 -0
- package/src/BehaviorHost.ts +51 -0
- package/src/BehaviorRegistry.ts +22 -0
- package/src/BehaviorSystem.ts +103 -0
- package/src/BehaviorTree.ts +234 -0
- package/src/CloudServiceFixtures.ts +225 -0
- package/src/CulturalBehaviorFixtures.ts +262 -0
- package/src/DecisionTree.ts +162 -0
- package/src/GOAP.ts +150 -0
- package/src/HTN.ts +178 -0
- package/src/LearningAgentFixtures.ts +184 -0
- package/src/NetworkReplicationFixtures.ts +440 -0
- package/src/Perception.ts +163 -0
- package/src/PlayerBehaviorTelemetryFixtures.ts +257 -0
- package/src/ProceduralContentAdaptationFixtures.ts +205 -0
- package/src/ScriptContext.ts +34 -0
- package/src/StateMachine.ts +138 -0
- package/src/UtilityAI.ts +158 -0
- package/src/VisualGraph.ts +236 -0
- package/src/VisualGraphContext.ts +138 -0
- package/src/VisualGraphExecutor.ts +663 -0
- package/src/VisualNode.ts +44 -0
- package/src/VisualNodeCatalog.ts +195 -0
- package/src/WeaponSystem.ts +793 -0
- package/src/index.ts +175 -0
- package/tests/scripting.test.ts +229 -0
- package/tsconfig.json +7 -0
package/dist/HTN.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { WorldState, type GOAPStateShape } from "./GOAP";
|
|
2
|
+
export type HTNTaskResult = "success" | "running" | "failure";
|
|
3
|
+
export type HTNTaskType = "primitive" | "compound";
|
|
4
|
+
export interface HTNTaskMethod {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly preconditions?: GOAPStateShape;
|
|
7
|
+
readonly subtasks: readonly HTNTask[];
|
|
8
|
+
readonly priority?: number;
|
|
9
|
+
readonly check?: (state: WorldState, context: unknown) => boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface HTNPrimitiveTaskOptions {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly preconditions?: GOAPStateShape;
|
|
14
|
+
readonly effects?: GOAPStateShape;
|
|
15
|
+
readonly execute?: (state: WorldState, context: unknown) => HTNTaskResult;
|
|
16
|
+
}
|
|
17
|
+
export interface HTNCompoundTaskOptions {
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly methods?: readonly HTNTaskMethod[];
|
|
20
|
+
}
|
|
21
|
+
export interface HTNPlannerOptions {
|
|
22
|
+
readonly maxDepth?: number;
|
|
23
|
+
readonly maxIterations?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface HTNPlan {
|
|
26
|
+
readonly valid: boolean;
|
|
27
|
+
readonly rootTask: string;
|
|
28
|
+
readonly tasks: readonly string[];
|
|
29
|
+
readonly methodTrace: readonly string[];
|
|
30
|
+
readonly decompositions: number;
|
|
31
|
+
readonly maxDepthReached: number;
|
|
32
|
+
readonly iterations: number;
|
|
33
|
+
readonly finalState: GOAPStateShape;
|
|
34
|
+
}
|
|
35
|
+
export declare class HTNTask {
|
|
36
|
+
readonly name: string;
|
|
37
|
+
readonly type: HTNTaskType;
|
|
38
|
+
readonly preconditions: GOAPStateShape;
|
|
39
|
+
readonly effects: GOAPStateShape;
|
|
40
|
+
private readonly methods;
|
|
41
|
+
private readonly executeCallback?;
|
|
42
|
+
private constructor();
|
|
43
|
+
static primitive(options: HTNPrimitiveTaskOptions): HTNTask;
|
|
44
|
+
static compound(options: HTNCompoundTaskOptions): HTNTask;
|
|
45
|
+
getMethods(): readonly HTNTaskMethod[];
|
|
46
|
+
canRun(state: WorldState): boolean;
|
|
47
|
+
applyEffects(state: WorldState): WorldState;
|
|
48
|
+
execute(state: WorldState, context: unknown): HTNTaskResult;
|
|
49
|
+
}
|
|
50
|
+
export declare class HTNPlanner {
|
|
51
|
+
private readonly maxDepth;
|
|
52
|
+
private readonly maxIterations;
|
|
53
|
+
constructor(options?: HTNPlannerOptions);
|
|
54
|
+
plan(rootTask: HTNTask, initialState: WorldState, context?: unknown): HTNPlan;
|
|
55
|
+
isPlanValid(plan: HTNPlan, rootTask: HTNTask, initialState: WorldState, context?: unknown): boolean;
|
|
56
|
+
private decompose;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=HTN.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HTN.d.ts","sourceRoot":"","sources":["../../../../packages/scripting/src/HTN.ts"],"names":[],"mappings":"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"}
|
package/dist/HTN.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { WorldState } from "./GOAP.js";
|
|
2
|
+
export class HTNTask {
|
|
3
|
+
name;
|
|
4
|
+
type;
|
|
5
|
+
preconditions;
|
|
6
|
+
effects;
|
|
7
|
+
methods;
|
|
8
|
+
executeCallback;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
if (options.name.trim().length === 0)
|
|
11
|
+
throw new Error("HTN task name cannot be empty.");
|
|
12
|
+
this.name = options.name;
|
|
13
|
+
this.type = options.type;
|
|
14
|
+
this.preconditions = options.preconditions ?? {};
|
|
15
|
+
this.effects = options.effects ?? {};
|
|
16
|
+
this.methods = [...(options.methods ?? [])].sort((left, right) => (right.priority ?? 0) - (left.priority ?? 0) || left.name.localeCompare(right.name));
|
|
17
|
+
this.executeCallback = options.execute;
|
|
18
|
+
}
|
|
19
|
+
static primitive(options) {
|
|
20
|
+
return new HTNTask({ ...options, type: "primitive" });
|
|
21
|
+
}
|
|
22
|
+
static compound(options) {
|
|
23
|
+
return new HTNTask({ ...options, type: "compound" });
|
|
24
|
+
}
|
|
25
|
+
getMethods() {
|
|
26
|
+
return this.methods;
|
|
27
|
+
}
|
|
28
|
+
canRun(state) {
|
|
29
|
+
return state.matches(this.preconditions);
|
|
30
|
+
}
|
|
31
|
+
applyEffects(state) {
|
|
32
|
+
return state.apply(this.effects);
|
|
33
|
+
}
|
|
34
|
+
execute(state, context) {
|
|
35
|
+
if (this.type !== "primitive")
|
|
36
|
+
return "failure";
|
|
37
|
+
return this.executeCallback?.(state, context) ?? "success";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export class HTNPlanner {
|
|
41
|
+
maxDepth;
|
|
42
|
+
maxIterations;
|
|
43
|
+
constructor(options = {}) {
|
|
44
|
+
this.maxDepth = options.maxDepth ?? 12;
|
|
45
|
+
this.maxIterations = options.maxIterations ?? 128;
|
|
46
|
+
if (!Number.isInteger(this.maxDepth) || this.maxDepth < 1)
|
|
47
|
+
throw new RangeError("HTN maxDepth must be a positive integer.");
|
|
48
|
+
if (!Number.isInteger(this.maxIterations) || this.maxIterations < 1)
|
|
49
|
+
throw new RangeError("HTN maxIterations must be a positive integer.");
|
|
50
|
+
}
|
|
51
|
+
plan(rootTask, initialState, context = {}) {
|
|
52
|
+
const stats = {
|
|
53
|
+
decompositions: 0,
|
|
54
|
+
iterations: 0,
|
|
55
|
+
maxDepthReached: 0,
|
|
56
|
+
methodTrace: []
|
|
57
|
+
};
|
|
58
|
+
const result = this.decompose([rootTask], initialState.clone(), context, 0, stats);
|
|
59
|
+
return {
|
|
60
|
+
valid: result.valid,
|
|
61
|
+
rootTask: rootTask.name,
|
|
62
|
+
tasks: result.tasks.map((task) => task.name),
|
|
63
|
+
methodTrace: stats.methodTrace,
|
|
64
|
+
decompositions: stats.decompositions,
|
|
65
|
+
maxDepthReached: stats.maxDepthReached,
|
|
66
|
+
iterations: stats.iterations,
|
|
67
|
+
finalState: result.state.toObject()
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
isPlanValid(plan, rootTask, initialState, context = {}) {
|
|
71
|
+
if (!plan.valid)
|
|
72
|
+
return false;
|
|
73
|
+
const nextPlan = this.plan(rootTask, initialState, context);
|
|
74
|
+
return nextPlan.valid && nextPlan.tasks.join(">") === plan.tasks.join(">");
|
|
75
|
+
}
|
|
76
|
+
decompose(tasks, state, context, depth, stats) {
|
|
77
|
+
stats.maxDepthReached = Math.max(stats.maxDepthReached, depth);
|
|
78
|
+
if (depth > this.maxDepth || stats.iterations >= this.maxIterations) {
|
|
79
|
+
return { valid: false, tasks: [], state };
|
|
80
|
+
}
|
|
81
|
+
if (tasks.length === 0) {
|
|
82
|
+
return { valid: true, tasks: [], state };
|
|
83
|
+
}
|
|
84
|
+
stats.iterations += 1;
|
|
85
|
+
const [currentTask, ...remainingTasks] = tasks;
|
|
86
|
+
if (!currentTask)
|
|
87
|
+
return { valid: true, tasks: [], state };
|
|
88
|
+
if (currentTask.type === "primitive") {
|
|
89
|
+
if (!currentTask.canRun(state))
|
|
90
|
+
return { valid: false, tasks: [], state };
|
|
91
|
+
const executed = currentTask.execute(state, context);
|
|
92
|
+
if (executed === "failure")
|
|
93
|
+
return { valid: false, tasks: [], state };
|
|
94
|
+
const nextState = currentTask.applyEffects(state);
|
|
95
|
+
const remainder = this.decompose(remainingTasks, nextState, context, depth, stats);
|
|
96
|
+
return remainder.valid
|
|
97
|
+
? { valid: true, tasks: [currentTask, ...remainder.tasks], state: remainder.state }
|
|
98
|
+
: { valid: false, tasks: [], state };
|
|
99
|
+
}
|
|
100
|
+
stats.decompositions += 1;
|
|
101
|
+
for (const method of currentTask.getMethods()) {
|
|
102
|
+
const preconditionsMet = method.check ? method.check(state, context) : state.matches(method.preconditions ?? {});
|
|
103
|
+
if (!preconditionsMet)
|
|
104
|
+
continue;
|
|
105
|
+
const traceLength = stats.methodTrace.length;
|
|
106
|
+
stats.methodTrace.push(`${currentTask.name}:${method.name}`);
|
|
107
|
+
const result = this.decompose([...method.subtasks, ...remainingTasks], state, context, depth + 1, stats);
|
|
108
|
+
if (result.valid)
|
|
109
|
+
return result;
|
|
110
|
+
stats.methodTrace.length = traceLength;
|
|
111
|
+
}
|
|
112
|
+
return { valid: false, tasks: [], state };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=HTN.js.map
|
package/dist/HTN.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HTN.js","sourceRoot":"","sources":["../../../../packages/scripting/src/HTN.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface LearningAgentFixtureOptions {
|
|
2
|
+
readonly seed?: number;
|
|
3
|
+
readonly targetDistance?: number;
|
|
4
|
+
readonly health?: number;
|
|
5
|
+
readonly energy?: number;
|
|
6
|
+
readonly nearbyCount?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface LearningAgentFixture {
|
|
9
|
+
readonly source: "origin-master-ml-agent-adapted";
|
|
10
|
+
readonly observation: {
|
|
11
|
+
readonly featureSize: number;
|
|
12
|
+
readonly normalizedPosition: readonly [number, number, number];
|
|
13
|
+
readonly normalizedVelocity: readonly [number, number, number];
|
|
14
|
+
readonly targetDistance: number;
|
|
15
|
+
readonly health: number;
|
|
16
|
+
readonly energy: number;
|
|
17
|
+
readonly nearbyEntitySlots: number;
|
|
18
|
+
readonly featureHash: string;
|
|
19
|
+
};
|
|
20
|
+
readonly behaviorCloning: {
|
|
21
|
+
readonly demonstrations: number;
|
|
22
|
+
readonly trainLoss: number;
|
|
23
|
+
readonly validationLoss: number;
|
|
24
|
+
readonly trainAccuracy: number;
|
|
25
|
+
readonly validationAccuracy: number;
|
|
26
|
+
readonly earlyStoppingEpoch: number;
|
|
27
|
+
readonly selectedAction: "move-to-target" | "hold-position" | "recover";
|
|
28
|
+
};
|
|
29
|
+
readonly reinforcementLearning: {
|
|
30
|
+
readonly gamma: number;
|
|
31
|
+
readonly lambda: number;
|
|
32
|
+
readonly clipRange: number;
|
|
33
|
+
readonly policyLoss: number;
|
|
34
|
+
readonly valueLoss: number;
|
|
35
|
+
readonly totalLoss: number;
|
|
36
|
+
readonly avgAdvantage: number;
|
|
37
|
+
readonly avgReturn: number;
|
|
38
|
+
readonly entropy: number;
|
|
39
|
+
readonly klDivergence: number;
|
|
40
|
+
readonly explainedVariance: number;
|
|
41
|
+
};
|
|
42
|
+
readonly reward: {
|
|
43
|
+
readonly progress: number;
|
|
44
|
+
readonly survival: number;
|
|
45
|
+
readonly energyPenalty: number;
|
|
46
|
+
readonly proximityBonus: number;
|
|
47
|
+
readonly total: number;
|
|
48
|
+
};
|
|
49
|
+
readonly productionReadiness: {
|
|
50
|
+
readonly featureExtractionTelemetry: true;
|
|
51
|
+
readonly behaviorCloningTelemetry: true;
|
|
52
|
+
readonly ppoStatsTelemetry: true;
|
|
53
|
+
readonly rewardBreakdownTelemetry: true;
|
|
54
|
+
};
|
|
55
|
+
readonly blockedClaims: readonly string[];
|
|
56
|
+
readonly claimBoundary: string;
|
|
57
|
+
readonly hash: string;
|
|
58
|
+
}
|
|
59
|
+
export declare function sampleLearningAgentFixture(options?: LearningAgentFixtureOptions): LearningAgentFixture;
|
|
60
|
+
//# sourceMappingURL=LearningAgentFixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LearningAgentFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/scripting/src/LearningAgentFixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
export function sampleLearningAgentFixture(options = {}) {
|
|
2
|
+
const seed = normalizeSeed(options.seed ?? 0x1ea5);
|
|
3
|
+
const targetDistance = positive(options.targetDistance ?? 6.2, "targetDistance");
|
|
4
|
+
const health = clamp01(options.health ?? 0.72);
|
|
5
|
+
const energy = clamp01(options.energy ?? 0.58);
|
|
6
|
+
const nearbyEntitySlots = Math.max(0, Math.min(5, Math.trunc(options.nearbyCount ?? 3)));
|
|
7
|
+
const normalizedPosition = [
|
|
8
|
+
Number((seededUnit(seed) * 0.12).toFixed(4)),
|
|
9
|
+
0,
|
|
10
|
+
Number((seededUnit(seed ^ 0x5167) * 0.08).toFixed(4))
|
|
11
|
+
];
|
|
12
|
+
const normalizedVelocity = [
|
|
13
|
+
Number((0.06 + seededUnit(seed ^ 0x78ab) * 0.04).toFixed(4)),
|
|
14
|
+
0,
|
|
15
|
+
Number((seededUnit(seed ^ 0x4312) * 0.02).toFixed(4))
|
|
16
|
+
];
|
|
17
|
+
const featureCore = [
|
|
18
|
+
...normalizedPosition,
|
|
19
|
+
...normalizedVelocity,
|
|
20
|
+
1,
|
|
21
|
+
0,
|
|
22
|
+
0,
|
|
23
|
+
Number((targetDistance / 100).toFixed(4)),
|
|
24
|
+
health,
|
|
25
|
+
energy,
|
|
26
|
+
nearbyEntitySlots
|
|
27
|
+
];
|
|
28
|
+
const progress = Number(Math.max(0, 1 - targetDistance / 12).toFixed(4));
|
|
29
|
+
const survival = Number((health * 0.35).toFixed(4));
|
|
30
|
+
const energyPenalty = Number(((1 - energy) * -0.18).toFixed(4));
|
|
31
|
+
const proximityBonus = Number((nearbyEntitySlots > 0 ? 0.08 : 0).toFixed(4));
|
|
32
|
+
const totalReward = Number((progress + survival + energyPenalty + proximityBonus).toFixed(4));
|
|
33
|
+
const selectedAction = health < 0.35 ? "recover" : targetDistance > 1.5 ? "move-to-target" : "hold-position";
|
|
34
|
+
const behaviorCloning = {
|
|
35
|
+
demonstrations: 24 + nearbyEntitySlots * 4,
|
|
36
|
+
trainLoss: Number((0.18 - progress * 0.06).toFixed(4)),
|
|
37
|
+
validationLoss: Number((0.22 - progress * 0.05).toFixed(4)),
|
|
38
|
+
trainAccuracy: Number((0.74 + progress * 0.12).toFixed(4)),
|
|
39
|
+
validationAccuracy: Number((0.7 + progress * 0.1).toFixed(4)),
|
|
40
|
+
earlyStoppingEpoch: 7 + nearbyEntitySlots,
|
|
41
|
+
selectedAction
|
|
42
|
+
};
|
|
43
|
+
const reinforcementLearning = {
|
|
44
|
+
gamma: 0.99,
|
|
45
|
+
lambda: 0.95,
|
|
46
|
+
clipRange: 0.2,
|
|
47
|
+
policyLoss: Number((-0.04 - progress * 0.03).toFixed(4)),
|
|
48
|
+
valueLoss: Number((0.21 - totalReward * 0.08).toFixed(4)),
|
|
49
|
+
totalLoss: Number((0.15 - totalReward * 0.05).toFixed(4)),
|
|
50
|
+
avgAdvantage: Number((totalReward * 0.42).toFixed(4)),
|
|
51
|
+
avgReturn: totalReward,
|
|
52
|
+
entropy: Number((0.52 - progress * 0.08).toFixed(4)),
|
|
53
|
+
klDivergence: Number((0.009 + seededUnit(seed ^ 0xacab) * 0.004).toFixed(4)),
|
|
54
|
+
explainedVariance: Number((0.66 + progress * 0.18).toFixed(4))
|
|
55
|
+
};
|
|
56
|
+
const core = {
|
|
57
|
+
featureCore,
|
|
58
|
+
behaviorCloning,
|
|
59
|
+
reinforcementLearning,
|
|
60
|
+
reward: { progress, survival, energyPenalty, proximityBonus, total: totalReward }
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
source: "origin-master-ml-agent-adapted",
|
|
64
|
+
observation: {
|
|
65
|
+
featureSize: 27,
|
|
66
|
+
normalizedPosition,
|
|
67
|
+
normalizedVelocity,
|
|
68
|
+
targetDistance,
|
|
69
|
+
health,
|
|
70
|
+
energy,
|
|
71
|
+
nearbyEntitySlots,
|
|
72
|
+
featureHash: stableHash(JSON.stringify(featureCore))
|
|
73
|
+
},
|
|
74
|
+
behaviorCloning,
|
|
75
|
+
reinforcementLearning,
|
|
76
|
+
reward: core.reward,
|
|
77
|
+
productionReadiness: {
|
|
78
|
+
featureExtractionTelemetry: true,
|
|
79
|
+
behaviorCloningTelemetry: true,
|
|
80
|
+
ppoStatsTelemetry: true,
|
|
81
|
+
rewardBreakdownTelemetry: true
|
|
82
|
+
},
|
|
83
|
+
blockedClaims: [
|
|
84
|
+
"real neural-network training",
|
|
85
|
+
"ONNX runtime inference parity",
|
|
86
|
+
"Unity ML-Agents parity",
|
|
87
|
+
"Unreal Learning Agents parity",
|
|
88
|
+
"production reinforcement-learning deployment"
|
|
89
|
+
],
|
|
90
|
+
claimBoundary: "This fixture ports old ML-agent concepts into deterministic feature-extraction, behavior-cloning, PPO-stat, and reward telemetry. It does not train neural networks, run ONNX inference, or claim Unity ML-Agents or Unreal Learning Agents parity.",
|
|
91
|
+
hash: stableHash(JSON.stringify(core))
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function positive(value, name) {
|
|
95
|
+
if (!Number.isFinite(value) || value < 0)
|
|
96
|
+
throw new Error(`${name} must be a non-negative finite number.`);
|
|
97
|
+
return Number(value.toFixed(4));
|
|
98
|
+
}
|
|
99
|
+
function normalizeSeed(seed) {
|
|
100
|
+
if (!Number.isInteger(seed) || seed < 0)
|
|
101
|
+
throw new Error("seed must be a non-negative integer.");
|
|
102
|
+
return seed >>> 0;
|
|
103
|
+
}
|
|
104
|
+
function clamp01(value) {
|
|
105
|
+
return Math.max(0, Math.min(1, Number.isFinite(value) ? value : 0));
|
|
106
|
+
}
|
|
107
|
+
function seededUnit(seed) {
|
|
108
|
+
let value = seed >>> 0;
|
|
109
|
+
value ^= value << 13;
|
|
110
|
+
value ^= value >>> 17;
|
|
111
|
+
value ^= value << 5;
|
|
112
|
+
return (value >>> 0) / 0xffffffff;
|
|
113
|
+
}
|
|
114
|
+
function stableHash(value) {
|
|
115
|
+
let hash = 2166136261;
|
|
116
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
117
|
+
hash ^= value.charCodeAt(index);
|
|
118
|
+
hash = Math.imul(hash, 16777619);
|
|
119
|
+
}
|
|
120
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=LearningAgentFixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LearningAgentFixtures.js","sourceRoot":"","sources":["../../../../packages/scripting/src/LearningAgentFixtures.ts"],"names":[],"mappings":"AA4DA,MAAM,UAAU,0BAA0B,CAAC,UAAuC,EAAE;IAClF,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,IAAI,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAC/C,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,kBAAkB,GAAsC;QAC5D,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACtD,CAAC;IACF,MAAM,kBAAkB,GAAsC;QAC5D,MAAM,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACtD,CAAC;IACF,MAAM,WAAW,GAAG;QAClB,GAAG,kBAAkB;QACrB,GAAG,kBAAkB;QACrB,CAAC;QACD,CAAC;QACD,CAAC;QACD,MAAM,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM;QACN,MAAM;QACN,iBAAiB;KAClB,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;IAC7G,MAAM,eAAe,GAAG;QACtB,cAAc,EAAE,EAAE,GAAG,iBAAiB,GAAG,CAAC;QAC1C,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtD,cAAc,EAAE,MAAM,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,aAAa,EAAE,MAAM,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1D,kBAAkB,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,kBAAkB,EAAE,CAAC,GAAG,iBAAiB;QACzC,cAAc;KACmC,CAAC;IACpD,MAAM,qBAAqB,GAAG;QAC5B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxD,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzD,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzD,YAAY,EAAE,MAAM,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrD,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,YAAY,EAAE,MAAM,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5E,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KAC/D,CAAC;IACF,MAAM,IAAI,GAAG;QACX,WAAW;QACX,eAAe;QACf,qBAAqB;QACrB,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE;KAClF,CAAC;IACF,OAAO;QACL,MAAM,EAAE,gCAAgC;QACxC,WAAW,EAAE;YACX,WAAW,EAAE,EAAE;YACf,kBAAkB;YAClB,kBAAkB;YAClB,cAAc;YACd,MAAM;YACN,MAAM;YACN,iBAAiB;YACjB,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;SACrD;QACD,eAAe;QACf,qBAAqB;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,mBAAmB,EAAE;YACnB,0BAA0B,EAAE,IAAI;YAChC,wBAAwB,EAAE,IAAI;YAC9B,iBAAiB,EAAE,IAAI;YACvB,wBAAwB,EAAE,IAAI;SAC/B;QACD,aAAa,EAAE;YACb,8BAA8B;YAC9B,+BAA+B;YAC/B,wBAAwB;YACxB,+BAA+B;YAC/B,8CAA8C;SAC/C;QACD,aAAa,EAAE,qPAAqP;QACpQ,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,IAAY;IAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wCAAwC,CAAC,CAAC;IAC3G,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACjG,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC;IACvB,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC;IACrB,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC;IACtB,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;IACpB,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export type NetworkReplicationMode = "all-clients" | "owner-only" | "all-except-owner" | "none";
|
|
2
|
+
export interface NetworkReplicationFixtureOptions {
|
|
3
|
+
readonly seed?: number;
|
|
4
|
+
readonly tickRate?: number;
|
|
5
|
+
readonly latencyMs?: number;
|
|
6
|
+
readonly jitterMs?: number;
|
|
7
|
+
readonly interestRadius?: number;
|
|
8
|
+
readonly clientPosition?: readonly [number, number, number];
|
|
9
|
+
}
|
|
10
|
+
export interface NetworkInputFrame {
|
|
11
|
+
readonly sequence: number;
|
|
12
|
+
readonly timestampMs: number;
|
|
13
|
+
readonly forward: boolean;
|
|
14
|
+
readonly right: boolean;
|
|
15
|
+
readonly fire: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface NetworkEntityState {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly ownerId: string;
|
|
20
|
+
readonly replicationMode: NetworkReplicationMode;
|
|
21
|
+
readonly position: readonly [number, number, number];
|
|
22
|
+
readonly velocity: readonly [number, number, number];
|
|
23
|
+
readonly health: number;
|
|
24
|
+
readonly ammo: number;
|
|
25
|
+
readonly animation: string;
|
|
26
|
+
readonly timestampMs: number;
|
|
27
|
+
readonly lastProcessedInput: number;
|
|
28
|
+
}
|
|
29
|
+
export interface NetworkPredictionSummary {
|
|
30
|
+
readonly inputCount: number;
|
|
31
|
+
readonly predictedSequence: number;
|
|
32
|
+
readonly acknowledgedSequence: number;
|
|
33
|
+
readonly pendingInputs: number;
|
|
34
|
+
readonly predictionError: number;
|
|
35
|
+
readonly smoothCorrection: readonly [number, number, number];
|
|
36
|
+
readonly replayedPosition: readonly [number, number, number];
|
|
37
|
+
readonly reconciliationAccepted: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface NetworkDeltaSummary {
|
|
40
|
+
readonly changedFields: readonly string[];
|
|
41
|
+
readonly removedFields: readonly string[];
|
|
42
|
+
readonly fullSnapshotBytes: number;
|
|
43
|
+
readonly deltaBytes: number;
|
|
44
|
+
readonly compressionRatio: number;
|
|
45
|
+
readonly reconstructedMatches: boolean;
|
|
46
|
+
readonly bytesSaved: number;
|
|
47
|
+
}
|
|
48
|
+
export interface NetworkInterestSummary {
|
|
49
|
+
readonly playerId: string;
|
|
50
|
+
readonly radius: number;
|
|
51
|
+
readonly added: readonly string[];
|
|
52
|
+
readonly removed: readonly string[];
|
|
53
|
+
readonly unchanged: readonly string[];
|
|
54
|
+
readonly relevant: readonly string[];
|
|
55
|
+
readonly culled: readonly string[];
|
|
56
|
+
readonly gridCellCount: number;
|
|
57
|
+
}
|
|
58
|
+
export interface NetworkInterpolationSummary {
|
|
59
|
+
readonly sampleTimestampMs: number;
|
|
60
|
+
readonly beforeTimestampMs: number;
|
|
61
|
+
readonly afterTimestampMs: number;
|
|
62
|
+
readonly interpolatedPosition: readonly [number, number, number];
|
|
63
|
+
readonly extrapolatedPosition: readonly [number, number, number];
|
|
64
|
+
}
|
|
65
|
+
export interface NetworkReplicationFixture {
|
|
66
|
+
readonly source: "origin-master-net-prediction-replication-adapted";
|
|
67
|
+
readonly claimBoundary: string;
|
|
68
|
+
readonly blockedClaims: readonly string[];
|
|
69
|
+
readonly tickRate: number;
|
|
70
|
+
readonly latencyMs: number;
|
|
71
|
+
readonly jitterMs: number;
|
|
72
|
+
readonly inputFrames: readonly NetworkInputFrame[];
|
|
73
|
+
readonly clientPredicted: NetworkEntityState;
|
|
74
|
+
readonly serverAuthoritative: NetworkEntityState;
|
|
75
|
+
readonly prediction: NetworkPredictionSummary;
|
|
76
|
+
readonly delta: NetworkDeltaSummary;
|
|
77
|
+
readonly interest: NetworkInterestSummary;
|
|
78
|
+
readonly interpolation: NetworkInterpolationSummary;
|
|
79
|
+
readonly hash: string;
|
|
80
|
+
}
|
|
81
|
+
export declare function sampleNetworkReplicationFixture(options?: NetworkReplicationFixtureOptions): NetworkReplicationFixture;
|
|
82
|
+
//# sourceMappingURL=NetworkReplicationFixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkReplicationFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/scripting/src/NetworkReplicationFixtures.ts"],"names":[],"mappings":"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"}
|