tscommons-esm-algorithms 0.0.2

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.
Files changed (55) hide show
  1. package/dist/classes/astar-maze-search.d.mts +18 -0
  2. package/dist/classes/astar-maze-search.mjs +134 -0
  3. package/dist/classes/astar-maze-search.mjs.map +1 -0
  4. package/dist/classes/astar-search.d.mts +17 -0
  5. package/dist/classes/astar-search.mjs +32 -0
  6. package/dist/classes/astar-search.mjs.map +1 -0
  7. package/dist/classes/binary-winner-mini-max.d.mts +25 -0
  8. package/dist/classes/binary-winner-mini-max.mjs +100 -0
  9. package/dist/classes/binary-winner-mini-max.mjs.map +1 -0
  10. package/dist/classes/bredth-first-search.d.mts +5 -0
  11. package/dist/classes/bredth-first-search.mjs +7 -0
  12. package/dist/classes/bredth-first-search.mjs.map +1 -0
  13. package/dist/classes/constraint-satisfaction.d.mts +52 -0
  14. package/dist/classes/constraint-satisfaction.mjs +314 -0
  15. package/dist/classes/constraint-satisfaction.mjs.map +1 -0
  16. package/dist/classes/depth-first-search.d.mts +5 -0
  17. package/dist/classes/depth-first-search.mjs +7 -0
  18. package/dist/classes/depth-first-search.mjs.map +1 -0
  19. package/dist/classes/greedy-best-first-search.d.mts +6 -0
  20. package/dist/classes/greedy-best-first-search.mjs +20 -0
  21. package/dist/classes/greedy-best-first-search.mjs.map +1 -0
  22. package/dist/classes/hill-climb-local-search.d.mts +18 -0
  23. package/dist/classes/hill-climb-local-search.mjs +60 -0
  24. package/dist/classes/hill-climb-local-search.mjs.map +1 -0
  25. package/dist/classes/local-search.d.mts +8 -0
  26. package/dist/classes/local-search.mjs +29 -0
  27. package/dist/classes/local-search.mjs.map +1 -0
  28. package/dist/classes/random-restart.d.mts +11 -0
  29. package/dist/classes/random-restart.mjs +17 -0
  30. package/dist/classes/random-restart.mjs.map +1 -0
  31. package/dist/classes/search.d.mts +23 -0
  32. package/dist/classes/search.mjs +107 -0
  33. package/dist/classes/search.mjs.map +1 -0
  34. package/dist/enums/ebinary-player.d.mts +4 -0
  35. package/dist/enums/ebinary-player.mjs +6 -0
  36. package/dist/enums/ebinary-player.mjs.map +1 -0
  37. package/dist/enums/elocal-search-orientation.d.mts +4 -0
  38. package/dist/enums/elocal-search-orientation.mjs +6 -0
  39. package/dist/enums/elocal-search-orientation.mjs.map +1 -0
  40. package/dist/enums/emaze-heuristic.d.mts +4 -0
  41. package/dist/enums/emaze-heuristic.mjs +6 -0
  42. package/dist/enums/emaze-heuristic.mjs.map +1 -0
  43. package/dist/index.d.mts +18 -0
  44. package/dist/index.mjs +16 -0
  45. package/dist/index.mjs.map +1 -0
  46. package/dist/types/tmaze-search-node.d.mts +10 -0
  47. package/dist/types/tmaze-search-node.mjs +2 -0
  48. package/dist/types/tmaze-search-node.mjs.map +1 -0
  49. package/dist/types/tsearch-node.d.mts +3 -0
  50. package/dist/types/tsearch-node.mjs +2 -0
  51. package/dist/types/tsearch-node.mjs.map +1 -0
  52. package/dist/types/tstart-with-score.d.mts +4 -0
  53. package/dist/types/tstart-with-score.mjs +2 -0
  54. package/dist/types/tstart-with-score.mjs.map +1 -0
  55. package/package.json +30 -0
@@ -0,0 +1,314 @@
1
+ import { commonsArrayRemove, commonsArrayRemoveAll, commonsArrayShuffle, commonsBase62GenerateRandomId } from 'tscommons-esm-core';
2
+ export class CommonsAlgorithmConstraintSatisfactionNode {
3
+ internalDomain;
4
+ isDomainValueEqual;
5
+ internalUid;
6
+ saved;
7
+ constructor(internalDomain, isDomainValueEqual) {
8
+ this.internalDomain = internalDomain;
9
+ this.isDomainValueEqual = isDomainValueEqual;
10
+ this.internalUid = commonsBase62GenerateRandomId();
11
+ }
12
+ saveDomains() {
13
+ if (this.saved)
14
+ throw new Error('Save collision');
15
+ this.saved = [...this.internalDomain];
16
+ }
17
+ revertDomains() {
18
+ if (!this.saved)
19
+ throw new Error('No save to revert to');
20
+ this.internalDomain = this.saved; // not clone
21
+ this.saved = undefined;
22
+ }
23
+ get domain() {
24
+ return [...this.internalDomain];
25
+ }
26
+ set domain(values) {
27
+ this.internalDomain = [...values];
28
+ }
29
+ removeFromDomain(value) {
30
+ commonsArrayRemove(this.internalDomain, value, this.isDomainValueEqual);
31
+ }
32
+ get uid() {
33
+ return this.internalUid;
34
+ }
35
+ isEqual(b) {
36
+ return this.internalUid === b.internalUid;
37
+ }
38
+ }
39
+ export class CommonsAlgorithmConstraintSatisfactionEdge {
40
+ xNode;
41
+ yNode;
42
+ edgeData;
43
+ constructor(xNode, yNode, edgeData) {
44
+ this.xNode = xNode;
45
+ this.yNode = yNode;
46
+ this.edgeData = edgeData;
47
+ }
48
+ get x() {
49
+ return this.xNode;
50
+ }
51
+ get y() {
52
+ return this.yNode;
53
+ }
54
+ get data() {
55
+ return this.edgeData;
56
+ }
57
+ isEqual(edge) {
58
+ return edge.xNode.isEqual(this.xNode) && edge.yNode.isEqual(this.yNode);
59
+ }
60
+ }
61
+ export class CommonsAlgorithmConstraintSatisfactionGraph {
62
+ internalNodes = [];
63
+ internalEdges = [];
64
+ get nodes() {
65
+ return [...this.internalNodes];
66
+ }
67
+ get edges() {
68
+ return [...this.internalEdges];
69
+ }
70
+ addNode(node) {
71
+ const existing = this.internalNodes
72
+ .find((n) => n.isEqual(node));
73
+ if (existing)
74
+ return existing;
75
+ this.internalNodes.push(node);
76
+ return node;
77
+ }
78
+ removeNode(node) {
79
+ const existing = this.internalNodes
80
+ .find((n) => n.isEqual(node));
81
+ if (!existing)
82
+ return false;
83
+ commonsArrayRemove(this.internalNodes, existing);
84
+ const edgeMatches = this.internalEdges
85
+ .filter((edge) => edge.x.uid === existing.uid || edge.y.uid === existing.uid);
86
+ commonsArrayRemoveAll(this.internalEdges, edgeMatches);
87
+ return true;
88
+ }
89
+ join(a, b, data) {
90
+ const existingA = this.internalNodes
91
+ .find((n) => n.isEqual(a));
92
+ if (!existingA)
93
+ throw new Error('Node A has not been added yet');
94
+ const existingB = this.internalNodes
95
+ .find((n) => n.isEqual(b));
96
+ if (!existingB)
97
+ throw new Error('Node B has not been added yet');
98
+ if (existingA.uid === existingB.uid)
99
+ throw new Error('Nodes cannot be equal');
100
+ const edge = new CommonsAlgorithmConstraintSatisfactionEdge(existingA, existingB, data);
101
+ const existing = this.internalEdges
102
+ .find((e) => e.isEqual(edge));
103
+ if (existing)
104
+ return existing;
105
+ this.internalEdges.push(edge);
106
+ return edge;
107
+ }
108
+ unjoin(a, b) {
109
+ const existingA = this.internalNodes
110
+ .find((n) => n.isEqual(a));
111
+ if (!existingA)
112
+ throw new Error('Node A has not been added yet');
113
+ const existingB = this.internalNodes
114
+ .find((n) => n.isEqual(b));
115
+ if (!existingB)
116
+ throw new Error('Node B has not been added yet');
117
+ if (existingA.uid === existingB.uid)
118
+ throw new Error('Nodes cannot be equal');
119
+ const edge = this.internalEdges
120
+ .find((e) => e.x.uid === a.uid && e.y.uid === b.uid);
121
+ if (edge)
122
+ commonsArrayRemove(this.internalEdges, edge);
123
+ this.unjoin(b, a);
124
+ }
125
+ listEdges(x) {
126
+ return this.internalEdges
127
+ .filter((e) => e.x.isEqual(x));
128
+ }
129
+ listRemoteNodes(x) {
130
+ return this.listEdges(x)
131
+ .map((e) => e.y);
132
+ }
133
+ revise(x, y) {
134
+ let isRevised = false;
135
+ const edge = this.internalEdges
136
+ .find((e) => e.x.isEqual(x) && e.y.isEqual(y));
137
+ for (const xValue of x.domain) {
138
+ let satisfied = false;
139
+ for (const yValue of y.domain) {
140
+ if (this.satisfies(xValue, yValue, edge)) {
141
+ satisfied = true;
142
+ break;
143
+ }
144
+ }
145
+ if (!satisfied) {
146
+ x.removeFromDomain(xValue);
147
+ isRevised = true;
148
+ }
149
+ }
150
+ return isRevised;
151
+ }
152
+ applyUnaryConsistency() {
153
+ for (const node of this.internalNodes) {
154
+ node.applyUnaryConsistency();
155
+ }
156
+ }
157
+ applyAc3() {
158
+ const edges = [...this.internalEdges];
159
+ while (edges.length > 0) {
160
+ const edge = edges.shift();
161
+ if (!edge)
162
+ throw new Error('Empty edges array. Should not be possible');
163
+ if (this.revise(edge.x, edge.y)) {
164
+ if (edge.x.domain.length === 0)
165
+ return false;
166
+ const zs = this.listRemoteNodes(edge.x);
167
+ commonsArrayRemove(zs, edge.y);
168
+ for (const z of zs) {
169
+ const zEdge = new CommonsAlgorithmConstraintSatisfactionEdge(z, edge.x);
170
+ edges.push(zEdge);
171
+ }
172
+ }
173
+ }
174
+ return true;
175
+ }
176
+ saveSnapshot() {
177
+ for (const node of this.nodes)
178
+ node.saveDomains();
179
+ }
180
+ revertSnapshot() {
181
+ for (const node of this.nodes)
182
+ node.revertDomains();
183
+ }
184
+ snapshotForInference() {
185
+ const map = new Map();
186
+ for (const node of this.nodes) {
187
+ map.set(node.uid, [...node.domain]);
188
+ }
189
+ return map;
190
+ }
191
+ isUnsolvable() {
192
+ for (const node of this.nodes) {
193
+ if (node.domain.length === 0)
194
+ return true;
195
+ }
196
+ return false;
197
+ }
198
+ isComplete() {
199
+ if (!this.isConsistent())
200
+ return false;
201
+ for (const node of this.nodes) {
202
+ if (node.domain.length > 1)
203
+ return false;
204
+ }
205
+ return true;
206
+ }
207
+ isConsistent() {
208
+ return true;
209
+ }
210
+ get mostConnecteds() {
211
+ const clone = this.nodes
212
+ .map((node) => ({
213
+ node: node,
214
+ edgeCount: this.listEdges(node).length
215
+ }));
216
+ if (clone.length === 0)
217
+ return [];
218
+ clone
219
+ .sort((a, b) => {
220
+ if (a.edgeCount < b.edgeCount)
221
+ return -1;
222
+ if (a.edgeCount > b.edgeCount)
223
+ return 1;
224
+ return 0;
225
+ })
226
+ .reverse();
227
+ const best = clone[0];
228
+ const bests = clone
229
+ .filter((c) => c.edgeCount === best.edgeCount);
230
+ return bests
231
+ .map((c) => c.node);
232
+ }
233
+ get mostConnected() {
234
+ const choices = this.mostConnecteds;
235
+ if (choices.length === 0)
236
+ return undefined;
237
+ return choices[Math.floor(Math.random() * choices.length)];
238
+ }
239
+ get smallestNonSingularDomains() {
240
+ const clone = this.nodes
241
+ .map((node) => ({
242
+ node: node,
243
+ domainCount: node.domain.length
244
+ }))
245
+ .filter((node) => node.domainCount > 1);
246
+ if (clone.length === 0)
247
+ return [];
248
+ clone
249
+ .sort((a, b) => {
250
+ if (a.domainCount < b.domainCount)
251
+ return -1;
252
+ if (a.domainCount > b.domainCount)
253
+ return 1;
254
+ return 0;
255
+ });
256
+ const best = clone[0];
257
+ const bests = clone
258
+ .filter((c) => c.domainCount === best.domainCount);
259
+ return bests
260
+ .map((c) => c.node);
261
+ }
262
+ get smallestNonSingularDomain() {
263
+ const choices = this.smallestNonSingularDomains;
264
+ if (choices.length === 0)
265
+ return undefined;
266
+ return choices[Math.floor(Math.random() * choices.length)];
267
+ }
268
+ applyBacktrack(chooseNextNode = () => this.smallestNonSingularDomain) {
269
+ if (this.isComplete())
270
+ return true;
271
+ if (this.isUnsolvable())
272
+ return false;
273
+ const choice = chooseNextNode();
274
+ if (!choice)
275
+ return false;
276
+ const available = [...choice.domain];
277
+ commonsArrayShuffle(available);
278
+ for (const value of available) {
279
+ this.saveSnapshot();
280
+ choice.domain = [value];
281
+ if (this.isConsistent()) {
282
+ const valid = this.applyAc3();
283
+ const map = this.snapshotForInference();
284
+ this.revertSnapshot();
285
+ const preInference = this.snapshotForInference();
286
+ if (valid) {
287
+ // inference
288
+ for (const node of this.nodes) {
289
+ const match = map.get(node.uid);
290
+ if (match)
291
+ node.domain = [...match];
292
+ }
293
+ choice.domain = [value];
294
+ const recurse = this.applyBacktrack();
295
+ if (recurse)
296
+ return true;
297
+ }
298
+ choice.removeFromDomain(value);
299
+ for (const node of this.nodes) {
300
+ const match = preInference.get(node.uid);
301
+ if (!match)
302
+ throw new Error('No preInference to revert to');
303
+ node.domain = match;
304
+ }
305
+ }
306
+ else {
307
+ this.revertSnapshot();
308
+ choice.removeFromDomain(value);
309
+ }
310
+ }
311
+ return false;
312
+ }
313
+ }
314
+ //# sourceMappingURL=constraint-satisfaction.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint-satisfaction.mjs","sourceRoot":"","sources":["../../src/classes/constraint-satisfaction.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAEnI,MAAM,OAAgB,0CAA0C;IAMrD;IACA;IANF,WAAW,CAAS;IAEpB,KAAK,CAAsB;IAEnC,YACU,cAAyB,EACzB,kBAAwD;QADxD,mBAAc,GAAd,cAAc,CAAW;QACzB,uBAAkB,GAAlB,kBAAkB,CAAsC;QAEjE,IAAI,CAAC,WAAW,GAAG,6BAA6B,EAAE,CAAC;IACpD,CAAC;IAEM,WAAW;QACjB,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,CAAE,GAAG,IAAI,CAAC,cAAc,CAAE,CAAC;IACzC,CAAC;IAEM,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY;QAC9C,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACxB,CAAC;IAED,IAAW,MAAM;QAChB,OAAO,CAAE,GAAG,IAAI,CAAC,cAAc,CAAE,CAAC;IACnC,CAAC;IACD,IAAW,MAAM,CAAC,MAAiB;QAClC,IAAI,CAAC,cAAc,GAAG,CAAE,GAAG,MAAM,CAAE,CAAC;IACrC,CAAC;IAEM,gBAAgB,CAAC,KAAc;QACrC,kBAAkB,CAChB,IAAI,CAAC,cAAc,EACnB,KAAK,EACL,IAAI,CAAC,kBAAkB,CACxB,CAAC;IACH,CAAC;IAED,IAAW,GAAG;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAEM,OAAO,CAAC,CAAsD;QACpE,OAAO,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,CAAC;IAC3C,CAAC;CAGD;AAED,MAAM,OAAO,0CAA0C;IAM5C;IACA;IACA;IAHV,YACU,KAAY,EACZ,KAAY,EACZ,QAAoB;QAFpB,UAAK,GAAL,KAAK,CAAO;QACZ,UAAK,GAAL,KAAK,CAAO;QACZ,aAAQ,GAAR,QAAQ,CAAY;IAC3B,CAAC;IAEJ,IAAW,CAAC;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,IAAW,CAAC;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAEM,OAAO,CAAC,IAA2E;QACzF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC;CACD;AAED,MAAM,OAAgB,2CAA2C;IAKxD,aAAa,GAAY,EAAE,CAAC;IAC5B,aAAa,GAIf,EAAE,CAAC;IAET,IAAW,KAAK;QACf,OAAO,CAAE,GAAG,IAAI,CAAC,aAAa,CAAE,CAAC;IAClC,CAAC;IAED,IAAW,KAAK;QAKf,OAAO,CAAE,GAAG,IAAI,CAAC,aAAa,CAAE,CAAC;IAClC,CAAC;IAEM,OAAO,CAAC,IAAW;QACzB,MAAM,QAAQ,GAAoB,IAAI,CAAC,aAAa;aACjD,IAAI,CAAC,CAAC,CAAQ,EAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,UAAU,CAAC,IAAW;QAC5B,MAAM,QAAQ,GAAoB,IAAI,CAAC,aAAa;aACjD,IAAI,CAAC,CAAC,CAAQ,EAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5B,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAEjD,MAAM,WAAW,GAIX,IAAI,CAAC,aAAa;aACrB,MAAM,CAAC,CAAC,IAIR,EAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE7E,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAEvD,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,IAAI,CACT,CAAQ,EACR,CAAQ,EACR,IAAgB;QAEjB,MAAM,SAAS,GAAoB,IAAI,CAAC,aAAa;aAClD,IAAI,CAAC,CAAC,CAAQ,EAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAEjE,MAAM,SAAS,GAAoB,IAAI,CAAC,aAAa;aAClD,IAAI,CAAC,CAAC,CAAQ,EAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAEjE,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAE9E,MAAM,IAAI,GAIN,IAAI,0CAA0C,CAIhD,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAE9B,MAAM,QAAQ,GAIA,IAAI,CAAC,aAAa;aAC7B,IAAI,CAAC,CAAC,CAIN,EAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,MAAM,CAAC,CAAQ,EAAE,CAAQ;QAC/B,MAAM,SAAS,GAAoB,IAAI,CAAC,aAAa;aAClD,IAAI,CAAC,CAAC,CAAQ,EAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAEjE,MAAM,SAAS,GAAoB,IAAI,CAAC,aAAa;aAClD,IAAI,CAAC,CAAC,CAAQ,EAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAEjE,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAE9E,MAAM,IAAI,GAII,IAAI,CAAC,aAAa;aAC7B,IAAI,CAAC,CAAC,CAIN,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,IAAI;YAAE,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IAEO,SAAS,CAAC,CAAQ;QAKzB,OAAO,IAAI,CAAC,aAAa;aACtB,MAAM,CAAC,CAAC,CAIR,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAEM,eAAe,CAAC,CAAQ;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;aACrB,GAAG,CAAC,CAAC,CAIL,EAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAYO,MAAM,CAAC,CAAQ,EAAE,CAAQ;QAChC,IAAI,SAAS,GAAY,KAAK,CAAC;QAE/B,MAAM,IAAI,GAII,IAAI,CAAC,aAAa;aAC7B,IAAI,CAAC,CAAC,CAIN,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,SAAS,GAAY,KAAK,CAAC;YAC/B,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAE/B,IAAI,IAAI,CAAC,SAAS,CAChB,MAAM,EACN,MAAM,EACN,IAAI,CACL,EAAE,CAAC;oBACH,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACP,CAAC;YACF,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC3B,SAAS,GAAG,IAAI,CAAC;YAClB,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAEM,qBAAqB;QAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC9B,CAAC;IACF,CAAC;IAEM,QAAQ;QACd,MAAM,KAAK,GAIL,CAAE,GAAG,IAAI,CAAC,aAAa,CAAE,CAAC;QAEhC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAII,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAExE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAE7C,MAAM,EAAE,GAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjD,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAE/B,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBACpB,MAAM,KAAK,GAIP,IAAI,0CAA0C,CAIhD,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;oBACb,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,YAAY;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACnD,CAAC;IAEM,cAAc;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,aAAa,EAAE,CAAC;IACrD,CAAC;IAEM,oBAAoB;QAC1B,MAAM,GAAG,GAA2B,IAAI,GAAG,EAAqB,CAAC;QACjE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAE,GAAG,IAAI,CAAC,MAAM,CAAE,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,GAAG,CAAC;IACZ,CAAC;IAEM,YAAY;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC3C,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAEM,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO,KAAK,CAAC;QAEvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAW,cAAc;QAMxB,MAAM,KAAK,GAAyB,IAAI,CAAC,KAAK;aAC3C,GAAG,CAAC,CAAC,IAAW,EAAsB,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM;SACvC,CAAC,CAAC,CAAC;QACN,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,KAAK;aACF,IAAI,CAAC,CAAC,CAAqB,EAAE,CAAqB,EAAU,EAAE;YAC9D,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;gBAAE,OAAO,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;gBAAE,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,CAAC;QACV,CAAC,CAAC;aACD,OAAO,EAAE,CAAC;QAEb,MAAM,IAAI,GAAuB,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1C,MAAM,KAAK,GAAyB,KAAK;aACtC,MAAM,CAAC,CAAC,CAAqB,EAAW,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9E,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,CAAqB,EAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,IAAW,aAAa;QACvB,MAAM,OAAO,GAAY,IAAI,CAAC,cAAc,CAAC;QAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE3C,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAW,0BAA0B;QAMpC,MAAM,KAAK,GAA2B,IAAI,CAAC,KAAK;aAC7C,GAAG,CAAC,CAAC,IAAW,EAAwB,EAAE,CAAC,CAAC;YAC3C,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;SAChC,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,IAA0B,EAAW,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,KAAK;aACF,IAAI,CAAC,CAAC,CAAuB,EAAE,CAAuB,EAAU,EAAE;YAClE,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;gBAAE,OAAO,CAAC,CAAC;YAC5C,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QAEL,MAAM,IAAI,GAAyB,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5C,MAAM,KAAK,GAA2B,KAAK;aACxC,MAAM,CAAC,CAAC,CAAuB,EAAW,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;QAEpF,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,CAAuB,EAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,IAAW,yBAAyB;QACnC,MAAM,OAAO,GAAY,IAAI,CAAC,0BAA0B,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE3C,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEM,cAAc,CACnB,iBAAwC,GAAoB,EAAE,CAAC,IAAI,CAAC,yBAAyB;QAE9F,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO,KAAK,CAAC;QAEtC,MAAM,MAAM,GAAoB,cAAc,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,MAAM,SAAS,GAAc,CAAE,GAAG,MAAM,CAAC,MAAM,CAAE,CAAC;QAClD,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,MAAM,CAAC,MAAM,GAAG,CAAE,KAAK,CAAE,CAAC;YAE1B,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAY,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACvC,MAAM,GAAG,GAA2B,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAEhE,IAAI,CAAC,cAAc,EAAE,CAAC;gBAEtB,MAAM,YAAY,GAA2B,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAEzE,IAAI,KAAK,EAAE,CAAC;oBACX,YAAY;oBACZ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBAC/B,MAAM,KAAK,GAAwB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACrD,IAAI,KAAK;4BAAE,IAAI,CAAC,MAAM,GAAG,CAAE,GAAG,KAAK,CAAE,CAAC;oBACvC,CAAC;oBAED,MAAM,CAAC,MAAM,GAAG,CAAE,KAAK,CAAE,CAAC;oBAE1B,MAAM,OAAO,GAAY,IAAI,CAAC,cAAc,EAAE,CAAC;oBAC/C,IAAI,OAAO;wBAAE,OAAO,IAAI,CAAC;gBAC1B,CAAC;gBAED,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAwB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9D,IAAI,CAAC,KAAK;wBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;oBAC5D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACrB,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}
@@ -0,0 +1,5 @@
1
+ import { TCommonsAlgorithmSearchNode } from '../types/tsearch-node.mjs';
2
+ import { CommonsAlgorithmSearch, TCommonsAlgorithmInternalNode } from './search.mjs';
3
+ export declare abstract class CommonsAlgorithmDepthFirstSearch<ActionT, NodeT extends TCommonsAlgorithmSearchNode<ActionT>> extends CommonsAlgorithmSearch<ActionT, NodeT> {
4
+ protected get next(): TCommonsAlgorithmInternalNode<ActionT, NodeT> | undefined;
5
+ }
@@ -0,0 +1,7 @@
1
+ import { CommonsAlgorithmSearch } from './search.mjs';
2
+ export class CommonsAlgorithmDepthFirstSearch extends CommonsAlgorithmSearch {
3
+ get next() {
4
+ return this.frontier.pop();
5
+ }
6
+ }
7
+ //# sourceMappingURL=depth-first-search.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depth-first-search.mjs","sourceRoot":"","sources":["../../src/classes/depth-first-search.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAiC,MAAM,cAAc,CAAC;AAErF,MAAM,OAAgB,gCAGpB,SAAQ,sBAAsC;IAC/C,IAAc,IAAI;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAC5B,CAAC;CACD"}
@@ -0,0 +1,6 @@
1
+ import { TCommonsAlgorithmSearchNode } from '../types/tsearch-node.mjs';
2
+ import { CommonsAlgorithmSearch, TCommonsAlgorithmInternalNode } from './search.mjs';
3
+ export declare abstract class CommonsAlgorithmGreedyBestFirstSearch<ActionT, NodeT extends TCommonsAlgorithmSearchNode<ActionT>> extends CommonsAlgorithmSearch<ActionT, NodeT> {
4
+ protected abstract heuristic(node: NodeT): number;
5
+ protected get next(): TCommonsAlgorithmInternalNode<ActionT, NodeT> | undefined;
6
+ }
@@ -0,0 +1,20 @@
1
+ import { CommonsAlgorithmSearch, commonsAlgorithmDeInternalise } from './search.mjs';
2
+ export class CommonsAlgorithmGreedyBestFirstSearch extends CommonsAlgorithmSearch {
3
+ get next() {
4
+ if (this.frontier.length === 0)
5
+ return undefined;
6
+ let bestScore;
7
+ let bestIndex;
8
+ for (let i = 0; i < this.frontier.length; i++) {
9
+ const score = this.heuristic(commonsAlgorithmDeInternalise(this.frontier[i]));
10
+ if (bestScore === undefined || score < bestScore) {
11
+ bestScore = score;
12
+ bestIndex = i;
13
+ }
14
+ }
15
+ if (bestIndex === undefined)
16
+ return undefined;
17
+ return this.frontier.splice(bestIndex, 1)[0];
18
+ }
19
+ }
20
+ //# sourceMappingURL=greedy-best-first-search.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"greedy-best-first-search.mjs","sourceRoot":"","sources":["../../src/classes/greedy-best-first-search.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAiC,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAEpH,MAAM,OAAgB,qCAGpB,SAAQ,sBAAsC;IAG/C,IAAc,IAAI;QACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEjD,IAAI,SAA2B,CAAC;QAChC,IAAI,SAA2B,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAW,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtF,IAAI,SAAS,KAAK,SAAS,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBAClD,SAAS,GAAG,KAAK,CAAC;gBAClB,SAAS,GAAG,CAAC,CAAC;YACf,CAAC;QACF,CAAC;QAED,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAE9C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;CACD"}
@@ -0,0 +1,18 @@
1
+ import { TCommonsAlgorithmStateWithScore } from '../types/tstart-with-score.mjs';
2
+ import { ECommonsAlgorithmOrientation } from '../enums/elocal-search-orientation.mjs';
3
+ import { CommonsAlgorithmLocalSearch } from './local-search.mjs';
4
+ export declare abstract class CommonsAlgorithmHillClimbLocalSearch<StateT> extends CommonsAlgorithmLocalSearch<StateT> {
5
+ protected orientation: ECommonsAlgorithmOrientation;
6
+ constructor(orientation: ECommonsAlgorithmOrientation);
7
+ protected abstract chooseFromValids(valids: TCommonsAlgorithmStateWithScore<StateT>[]): TCommonsAlgorithmStateWithScore<StateT> | undefined;
8
+ protected choose(state: TCommonsAlgorithmStateWithScore<StateT>, potentials: TCommonsAlgorithmStateWithScore<StateT>[]): TCommonsAlgorithmStateWithScore<StateT> | undefined;
9
+ }
10
+ export declare abstract class CommonsAlgorithmSteepestHillClimbLocalSearch<StateT> extends CommonsAlgorithmHillClimbLocalSearch<StateT> {
11
+ protected chooseFromValids(valids: TCommonsAlgorithmStateWithScore<StateT>[]): TCommonsAlgorithmStateWithScore<StateT> | undefined;
12
+ }
13
+ export declare abstract class CommonsAlgorithmStochasticHillClimbLocalSearch<StateT> extends CommonsAlgorithmHillClimbLocalSearch<StateT> {
14
+ protected chooseFromValids(valids: TCommonsAlgorithmStateWithScore<StateT>[]): TCommonsAlgorithmStateWithScore<StateT> | undefined;
15
+ }
16
+ export declare abstract class CommonsAlgorithmFirstChoiceHillClimbLocalSearch<StateT> extends CommonsAlgorithmHillClimbLocalSearch<StateT> {
17
+ protected chooseFromValids(valids: TCommonsAlgorithmStateWithScore<StateT>[]): TCommonsAlgorithmStateWithScore<StateT> | undefined;
18
+ }
@@ -0,0 +1,60 @@
1
+ import { ECommonsAlgorithmOrientation } from '../enums/elocal-search-orientation.mjs';
2
+ import { CommonsAlgorithmLocalSearch } from './local-search.mjs';
3
+ export class CommonsAlgorithmHillClimbLocalSearch extends CommonsAlgorithmLocalSearch {
4
+ orientation;
5
+ constructor(orientation) {
6
+ super();
7
+ this.orientation = orientation;
8
+ }
9
+ choose(state, potentials) {
10
+ const orientationClosure = this.orientation;
11
+ const valids = potentials
12
+ .filter((potential) => {
13
+ switch (orientationClosure) {
14
+ case ECommonsAlgorithmOrientation.MAXIMUM:
15
+ return potential.score > state.score;
16
+ case ECommonsAlgorithmOrientation.MINIMUM:
17
+ return potential.score < state.score;
18
+ }
19
+ });
20
+ const choice = this.chooseFromValids(valids);
21
+ if (!choice)
22
+ return undefined;
23
+ return choice;
24
+ }
25
+ }
26
+ export class CommonsAlgorithmSteepestHillClimbLocalSearch extends CommonsAlgorithmHillClimbLocalSearch {
27
+ chooseFromValids(valids) {
28
+ if (valids.length === 0)
29
+ return undefined;
30
+ valids
31
+ .sort((a, b) => {
32
+ if (a.score < b.score)
33
+ return -1;
34
+ if (a.score > b.score)
35
+ return 1;
36
+ return 0;
37
+ });
38
+ switch (this.orientation) {
39
+ case ECommonsAlgorithmOrientation.MAXIMUM:
40
+ return valids[valids.length - 1];
41
+ case ECommonsAlgorithmOrientation.MINIMUM:
42
+ return valids[0];
43
+ }
44
+ }
45
+ }
46
+ export class CommonsAlgorithmStochasticHillClimbLocalSearch extends CommonsAlgorithmHillClimbLocalSearch {
47
+ chooseFromValids(valids) {
48
+ if (valids.length === 0)
49
+ return undefined;
50
+ return valids[Math.floor(Math.random() * valids.length)];
51
+ }
52
+ }
53
+ export class CommonsAlgorithmFirstChoiceHillClimbLocalSearch extends CommonsAlgorithmHillClimbLocalSearch {
54
+ chooseFromValids(valids) {
55
+ if (valids.length === 0)
56
+ return undefined;
57
+ return valids[0];
58
+ }
59
+ }
60
+ //# sourceMappingURL=hill-climb-local-search.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hill-climb-local-search.mjs","sourceRoot":"","sources":["../../src/classes/hill-climb-local-search.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAEtF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,OAAgB,oCAA6C,SAAQ,2BAAmC;IAEjG;IADZ,YACY,WAAyC;QAEpD,KAAK,EAAE,CAAC;QAFG,gBAAW,GAAX,WAAW,CAA8B;IAGrD,CAAC;IAIkB,MAAM,CAAC,KAA8C,EAAE,UAAqD;QAC9H,MAAM,kBAAkB,GAAiC,IAAI,CAAC,WAAW,CAAC;QAE1E,MAAM,MAAM,GAA8C,UAAU;aACjE,MAAM,CAAC,CAAC,SAAkD,EAAW,EAAE;YACvE,QAAQ,kBAAkB,EAAE,CAAC;gBAC5B,KAAK,4BAA4B,CAAC,OAAO;oBACxC,OAAO,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBACtC,KAAK,4BAA4B,CAAC,OAAO;oBACxC,OAAO,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACvC,CAAC;QACF,CAAC,CAAC,CAAC;QAEL,MAAM,MAAM,GAAsD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAE9B,OAAO,MAAM,CAAC;IACf,CAAC;CACD;AAED,MAAM,OAAgB,4CAAqD,SAAQ,oCAA4C;IACpH,gBAAgB,CAAC,MAAiD;QAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE1C,MAAM;aACH,IAAI,CAAC,CAAC,CAA0C,EAAE,CAA0C,EAAU,EAAE;YACxG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;gBAAE,OAAO,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;gBAAE,OAAO,CAAC,CAAC;YAChC,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QAEL,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,KAAK,4BAA4B,CAAC,OAAO;gBACxC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClC,KAAK,4BAA4B,CAAC,OAAO;gBACxC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;IACF,CAAC;CACD;AAED,MAAM,OAAgB,8CAAuD,SAAQ,oCAA4C;IACtH,gBAAgB,CAAC,MAAiD;QAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE1C,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;CACD;AAED,MAAM,OAAgB,+CAAwD,SAAQ,oCAA4C;IACvH,gBAAgB,CAAC,MAAiD;QAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE1C,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;CACD"}
@@ -0,0 +1,8 @@
1
+ import { TCommonsAlgorithmStateWithScore } from '../types/tstart-with-score.mjs';
2
+ export declare abstract class CommonsAlgorithmLocalSearch<StateT> {
3
+ protected abstract score(state: StateT): number;
4
+ protected abstract neighbours(state: StateT): StateT[];
5
+ protected abstract choose(state: TCommonsAlgorithmStateWithScore<StateT>, potentials: TCommonsAlgorithmStateWithScore<StateT>[]): TCommonsAlgorithmStateWithScore<StateT> | undefined;
6
+ computeNext(current: TCommonsAlgorithmStateWithScore<StateT>): TCommonsAlgorithmStateWithScore<StateT> | undefined;
7
+ computeOptimial(initial: StateT): TCommonsAlgorithmStateWithScore<StateT>;
8
+ }
@@ -0,0 +1,29 @@
1
+ export class CommonsAlgorithmLocalSearch {
2
+ computeNext(current) {
3
+ const neighbours = this.neighbours(current.state);
4
+ const potentials = neighbours
5
+ .map((s) => ({
6
+ state: s,
7
+ score: this.score(s)
8
+ }));
9
+ if (potentials.length === 0)
10
+ return undefined;
11
+ const choice = this.choose(current, potentials);
12
+ if (!choice)
13
+ return undefined;
14
+ return choice;
15
+ }
16
+ computeOptimial(initial) {
17
+ let current = {
18
+ state: initial,
19
+ score: this.score(initial)
20
+ };
21
+ while (true) {
22
+ const next = this.computeNext(current);
23
+ if (!next)
24
+ return current;
25
+ current = next;
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=local-search.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-search.mjs","sourceRoot":"","sources":["../../src/classes/local-search.mts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,2BAA2B;IAOzC,WAAW,CAAC,OAAgD;QAClE,MAAM,UAAU,GAAa,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5D,MAAM,UAAU,GAA8C,UAAU;aACrE,GAAG,CAAC,CAAC,CAAS,EAA2C,EAAE,CAAC,CAAC;YAC5D,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACrB,CAAC,CAAC,CAAC;QACN,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE9C,MAAM,MAAM,GAAsD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnG,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAE9B,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,eAAe,CAAC,OAAe;QACrC,IAAI,OAAO,GAA4C;YACrD,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;SAC3B,CAAC;QAEF,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,GAAsD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1F,IAAI,CAAC,IAAI;gBAAE,OAAO,OAAO,CAAC;YAE1B,OAAO,GAAG,IAAI,CAAC;QAChB,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,11 @@
1
+ import { TCommonsAlgorithmStateWithScore } from '../types/tstart-with-score.mjs';
2
+ import { ECommonsAlgorithmOrientation } from '../enums/elocal-search-orientation.mjs';
3
+ import { CommonsAlgorithmLocalSearch } from './local-search.mjs';
4
+ export declare abstract class CommonsAlgorithmRandomRestartSearch<StateT, SearchT extends CommonsAlgorithmLocalSearch<StateT>> {
5
+ private orientation;
6
+ constructor(orientation: ECommonsAlgorithmOrientation);
7
+ protected abstract constructLocalSearch(orientation: ECommonsAlgorithmOrientation): SearchT;
8
+ protected abstract generateInitial(): StateT;
9
+ protected abstract choose(potentials: TCommonsAlgorithmStateWithScore<StateT>[], orientation: ECommonsAlgorithmOrientation): TCommonsAlgorithmStateWithScore<StateT> | undefined;
10
+ computeOptimial(max: number): TCommonsAlgorithmStateWithScore<StateT> | undefined;
11
+ }
@@ -0,0 +1,17 @@
1
+ export class CommonsAlgorithmRandomRestartSearch {
2
+ orientation;
3
+ constructor(orientation) {
4
+ this.orientation = orientation;
5
+ }
6
+ computeOptimial(max) {
7
+ const optimals = [];
8
+ for (let i = max; i-- > 0;) {
9
+ const search = this.constructLocalSearch(this.orientation);
10
+ const initial = this.generateInitial();
11
+ const optimal = search.computeOptimial(initial);
12
+ optimals.push(optimal);
13
+ }
14
+ return this.choose(optimals, this.orientation);
15
+ }
16
+ }
17
+ //# sourceMappingURL=random-restart.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random-restart.mjs","sourceRoot":"","sources":["../../src/classes/random-restart.mts"],"names":[],"mappings":"AAMA,MAAM,OAAgB,mCAAmC;IAK9C;IADV,YACU,WAAyC;QAAzC,gBAAW,GAAX,WAAW,CAA8B;IAChD,CAAC;IAQG,eAAe,CAAC,GAAW;QACjC,MAAM,QAAQ,GAA8C,EAAE,CAAC;QAE/D,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;YAC5B,MAAM,MAAM,GAAY,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpE,MAAM,OAAO,GAAW,IAAI,CAAC,eAAe,EAAE,CAAC;YAE/C,MAAM,OAAO,GAA4C,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACzF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;CACD"}
@@ -0,0 +1,23 @@
1
+ import { TCommonsAlgorithmSearchNode } from '../types/tsearch-node.mjs';
2
+ export type TCommonsAlgorithmInternalNode<ActionT, NodeT extends TCommonsAlgorithmSearchNode<ActionT>> = NodeT & {
3
+ parent: TCommonsAlgorithmInternalNode<ActionT, NodeT> | undefined;
4
+ };
5
+ export declare function commonsAlgorithmDeInternalise<ActionT, NodeT extends TCommonsAlgorithmSearchNode<ActionT>, InternalNodeT extends TCommonsAlgorithmInternalNode<ActionT, NodeT>>(node: InternalNodeT): NodeT;
6
+ export declare abstract class CommonsAlgorithmSearch<ActionT, NodeT extends TCommonsAlgorithmSearchNode<ActionT>> {
7
+ private actions;
8
+ private shuffle;
9
+ protected frontier: TCommonsAlgorithmInternalNode<ActionT, NodeT>[];
10
+ private explored;
11
+ constructor(actions: ActionT[], shuffle?: boolean);
12
+ protected abstract get next(): TCommonsAlgorithmInternalNode<ActionT, NodeT> | undefined;
13
+ protected abstract isEqual(a: Omit<NodeT, 'action'>, b: Omit<NodeT, 'action'>): boolean;
14
+ protected abstract isGoal(node: NodeT): boolean;
15
+ protected abstract applyActionIfPossible(node: NodeT, action: ActionT): NodeT | undefined;
16
+ private inArray;
17
+ private inFrontier;
18
+ private inExplored;
19
+ protected transition(node: TCommonsAlgorithmInternalNode<ActionT, NodeT>, action: ActionT): TCommonsAlgorithmInternalNode<ActionT, NodeT> | undefined;
20
+ protected transitions(node: TCommonsAlgorithmInternalNode<ActionT, NodeT>): TCommonsAlgorithmInternalNode<ActionT, NodeT>[];
21
+ computeRoute(start: Omit<NodeT, 'action'>, progressCallback?: (frontierLength: number, exploredLength: number) => void, progressBlockSize?: number): NodeT[] | undefined;
22
+ listExplored(): NodeT[];
23
+ }