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.
- package/dist/classes/astar-maze-search.d.mts +18 -0
- package/dist/classes/astar-maze-search.mjs +134 -0
- package/dist/classes/astar-maze-search.mjs.map +1 -0
- package/dist/classes/astar-search.d.mts +17 -0
- package/dist/classes/astar-search.mjs +32 -0
- package/dist/classes/astar-search.mjs.map +1 -0
- package/dist/classes/binary-winner-mini-max.d.mts +25 -0
- package/dist/classes/binary-winner-mini-max.mjs +100 -0
- package/dist/classes/binary-winner-mini-max.mjs.map +1 -0
- package/dist/classes/bredth-first-search.d.mts +5 -0
- package/dist/classes/bredth-first-search.mjs +7 -0
- package/dist/classes/bredth-first-search.mjs.map +1 -0
- package/dist/classes/constraint-satisfaction.d.mts +52 -0
- package/dist/classes/constraint-satisfaction.mjs +314 -0
- package/dist/classes/constraint-satisfaction.mjs.map +1 -0
- package/dist/classes/depth-first-search.d.mts +5 -0
- package/dist/classes/depth-first-search.mjs +7 -0
- package/dist/classes/depth-first-search.mjs.map +1 -0
- package/dist/classes/greedy-best-first-search.d.mts +6 -0
- package/dist/classes/greedy-best-first-search.mjs +20 -0
- package/dist/classes/greedy-best-first-search.mjs.map +1 -0
- package/dist/classes/hill-climb-local-search.d.mts +18 -0
- package/dist/classes/hill-climb-local-search.mjs +60 -0
- package/dist/classes/hill-climb-local-search.mjs.map +1 -0
- package/dist/classes/local-search.d.mts +8 -0
- package/dist/classes/local-search.mjs +29 -0
- package/dist/classes/local-search.mjs.map +1 -0
- package/dist/classes/random-restart.d.mts +11 -0
- package/dist/classes/random-restart.mjs +17 -0
- package/dist/classes/random-restart.mjs.map +1 -0
- package/dist/classes/search.d.mts +23 -0
- package/dist/classes/search.mjs +107 -0
- package/dist/classes/search.mjs.map +1 -0
- package/dist/enums/ebinary-player.d.mts +4 -0
- package/dist/enums/ebinary-player.mjs +6 -0
- package/dist/enums/ebinary-player.mjs.map +1 -0
- package/dist/enums/elocal-search-orientation.d.mts +4 -0
- package/dist/enums/elocal-search-orientation.mjs +6 -0
- package/dist/enums/elocal-search-orientation.mjs.map +1 -0
- package/dist/enums/emaze-heuristic.d.mts +4 -0
- package/dist/enums/emaze-heuristic.mjs +6 -0
- package/dist/enums/emaze-heuristic.mjs.map +1 -0
- package/dist/index.d.mts +18 -0
- package/dist/index.mjs +16 -0
- package/dist/index.mjs.map +1 -0
- package/dist/types/tmaze-search-node.d.mts +10 -0
- package/dist/types/tmaze-search-node.mjs +2 -0
- package/dist/types/tmaze-search-node.mjs.map +1 -0
- package/dist/types/tsearch-node.d.mts +3 -0
- package/dist/types/tsearch-node.mjs +2 -0
- package/dist/types/tsearch-node.mjs.map +1 -0
- package/dist/types/tstart-with-score.d.mts +4 -0
- package/dist/types/tstart-with-score.mjs +2 -0
- package/dist/types/tstart-with-score.mjs.map +1 -0
- package/package.json +30 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ECommonsAlgorithmMazeHeuristic } from '../enums/emaze-heuristic.mjs';
|
|
2
|
+
import { TCommonsAlgorithmSearchDimensionMazeCell, TCommonsAlgorithmSearchDimensionMazeNode } from '../types/tmaze-search-node.mjs';
|
|
3
|
+
import { CommonsAlgorithmAStarSearch } from './astar-search.mjs';
|
|
4
|
+
export declare class CommonsAlgorithmAStarMazeSearch<DimT extends number[], CellT extends TCommonsAlgorithmSearchDimensionMazeCell<DimT>> extends CommonsAlgorithmAStarSearch<DimT, TCommonsAlgorithmSearchDimensionMazeNode<DimT>> {
|
|
5
|
+
private goal;
|
|
6
|
+
private heuristicMethod;
|
|
7
|
+
private weightedCells;
|
|
8
|
+
private weightedCellsCache;
|
|
9
|
+
private min;
|
|
10
|
+
private max;
|
|
11
|
+
constructor(cells: CellT[], allActions: DimT[], goal: DimT, heuristicMethod: ECommonsAlgorithmMazeHeuristic);
|
|
12
|
+
protected isGoal(node: TCommonsAlgorithmSearchDimensionMazeNode<DimT>): boolean;
|
|
13
|
+
private getCache;
|
|
14
|
+
protected greedyBestFirstHeuristic(node: TCommonsAlgorithmSearchDimensionMazeNode<DimT>): number;
|
|
15
|
+
protected stepCost(node: TCommonsAlgorithmSearchDimensionMazeNode<DimT>): number;
|
|
16
|
+
protected isEqual(a: TCommonsAlgorithmSearchDimensionMazeNode<DimT>, b: TCommonsAlgorithmSearchDimensionMazeNode<DimT>): boolean;
|
|
17
|
+
protected applyActionIfPossible(node: TCommonsAlgorithmSearchDimensionMazeNode<DimT>, action: DimT): (TCommonsAlgorithmSearchDimensionMazeNode<DimT>) | undefined;
|
|
18
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { ECommonsAlgorithmMazeHeuristic } from '../enums/emaze-heuristic.mjs';
|
|
2
|
+
import { CommonsAlgorithmAStarSearch } from './astar-search.mjs';
|
|
3
|
+
function dimensionCacheIndex(coord) {
|
|
4
|
+
let index = '';
|
|
5
|
+
for (const n of coord)
|
|
6
|
+
index += n.toString() + ':';
|
|
7
|
+
return index;
|
|
8
|
+
}
|
|
9
|
+
function isDimensionValueEqual(a, b) {
|
|
10
|
+
for (let i = a.length; i-- > 0;) {
|
|
11
|
+
if (a[i] !== b[i])
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
export class CommonsAlgorithmAStarMazeSearch extends CommonsAlgorithmAStarSearch {
|
|
17
|
+
goal;
|
|
18
|
+
heuristicMethod;
|
|
19
|
+
weightedCells = [];
|
|
20
|
+
weightedCellsCache = new Map();
|
|
21
|
+
min;
|
|
22
|
+
max;
|
|
23
|
+
constructor(cells, allActions, goal, heuristicMethod) {
|
|
24
|
+
super(allActions, true);
|
|
25
|
+
this.goal = goal;
|
|
26
|
+
this.heuristicMethod = heuristicMethod;
|
|
27
|
+
let min;
|
|
28
|
+
let max;
|
|
29
|
+
for (const cell of cells) {
|
|
30
|
+
if (!min) {
|
|
31
|
+
min = [...cell.coord];
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
for (let i = cell.coord.length; i-- > 0;)
|
|
35
|
+
min[i] = Math.min(min[i], cell.coord[i]);
|
|
36
|
+
}
|
|
37
|
+
if (!max) {
|
|
38
|
+
max = [...cell.coord];
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
for (let i = cell.coord.length; i-- > 0;)
|
|
42
|
+
max[i] = Math.max(max[i], cell.coord[i]);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (!min || !max)
|
|
46
|
+
throw new Error('No min/max determinable');
|
|
47
|
+
this.min = min;
|
|
48
|
+
this.max = max;
|
|
49
|
+
for (const cell of cells) {
|
|
50
|
+
const ds = cell.coord
|
|
51
|
+
.map((t, i) => t - goal[i]);
|
|
52
|
+
let weight;
|
|
53
|
+
switch (this.heuristicMethod) {
|
|
54
|
+
case ECommonsAlgorithmMazeHeuristic.MANHATTEN:
|
|
55
|
+
weight = 0;
|
|
56
|
+
for (let i = ds.length; i-- > 0;)
|
|
57
|
+
weight += Math.abs(ds[i]);
|
|
58
|
+
break;
|
|
59
|
+
case ECommonsAlgorithmMazeHeuristic.PYTHAGORAS:
|
|
60
|
+
weight = 0;
|
|
61
|
+
for (let i = ds.length; i-- > 0;)
|
|
62
|
+
weight += Math.pow(ds[i], 2);
|
|
63
|
+
weight = Math.sqrt(weight);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
this.weightedCells.push({
|
|
67
|
+
...cell,
|
|
68
|
+
coord: [...cell.coord],
|
|
69
|
+
visitable: cell.visitable,
|
|
70
|
+
costToVisit: cell.costToVisit,
|
|
71
|
+
permittedActions: cell.permittedActions,
|
|
72
|
+
weight: weight
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
for (const cell of this.weightedCells) {
|
|
76
|
+
this.weightedCellsCache.set(dimensionCacheIndex(cell.coord), cell);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
isGoal(node) {
|
|
80
|
+
return isDimensionValueEqual(node.coord, this.goal);
|
|
81
|
+
}
|
|
82
|
+
getCache(coord) {
|
|
83
|
+
const index = dimensionCacheIndex(coord);
|
|
84
|
+
return this.weightedCellsCache.get(index);
|
|
85
|
+
}
|
|
86
|
+
greedyBestFirstHeuristic(node) {
|
|
87
|
+
const cell = this.getCache(node.coord);
|
|
88
|
+
if (!cell)
|
|
89
|
+
throw new Error('No such cell exists');
|
|
90
|
+
return cell.weight;
|
|
91
|
+
}
|
|
92
|
+
stepCost(node) {
|
|
93
|
+
const cell = this.getCache(node.coord);
|
|
94
|
+
if (!cell)
|
|
95
|
+
throw new Error('No such cell exists');
|
|
96
|
+
return cell.costToVisit === undefined ? 1 : cell.costToVisit;
|
|
97
|
+
}
|
|
98
|
+
isEqual(a, b) {
|
|
99
|
+
return isDimensionValueEqual(a.coord, b.coord);
|
|
100
|
+
}
|
|
101
|
+
applyActionIfPossible(node, action) {
|
|
102
|
+
const coord = [...node.coord];
|
|
103
|
+
const current = this.getCache(coord);
|
|
104
|
+
if (!current)
|
|
105
|
+
return undefined;
|
|
106
|
+
const available = (current.permittedActions || [])
|
|
107
|
+
.find((permitted) => {
|
|
108
|
+
for (let i = permitted.length; i-- > 0;) {
|
|
109
|
+
if (permitted[i] !== action[i])
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
});
|
|
114
|
+
if (!available)
|
|
115
|
+
return undefined;
|
|
116
|
+
for (let i = coord.length; i-- > 0;) {
|
|
117
|
+
coord[i] += available[i];
|
|
118
|
+
if (coord[i] <= this.min[i])
|
|
119
|
+
return undefined;
|
|
120
|
+
if (coord[i] >= this.max[i])
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
const cell = this.getCache(coord);
|
|
124
|
+
if (!cell)
|
|
125
|
+
return undefined;
|
|
126
|
+
if (!cell.visitable)
|
|
127
|
+
return undefined;
|
|
128
|
+
return {
|
|
129
|
+
action: available,
|
|
130
|
+
coord: cell.coord
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=astar-maze-search.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astar-maze-search.mjs","sourceRoot":"","sources":["../../src/classes/astar-maze-search.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TCommonsAlgorithmSearchNode } from '../types/tsearch-node.mjs';
|
|
2
|
+
import { CommonsAlgorithmGreedyBestFirstSearch as CommonsAlgorithmGreedyBestFirstSearch } from './greedy-best-first-search.mjs';
|
|
3
|
+
import { TCommonsAlgorithmInternalNode } from './search.mjs';
|
|
4
|
+
export type TCommonsAlgorithmInternalStepCostNode<ActionT, NodeT extends TCommonsAlgorithmSearchNode<ActionT>> = TCommonsAlgorithmInternalNode<ActionT, NodeT> & {
|
|
5
|
+
stepCost: number;
|
|
6
|
+
};
|
|
7
|
+
type TStepCostInternalNode<ActionT, NodeT extends TCommonsAlgorithmSearchNode<ActionT>> = TCommonsAlgorithmInternalNode<ActionT, NodeT> & {
|
|
8
|
+
stepCost: number;
|
|
9
|
+
};
|
|
10
|
+
export declare abstract class CommonsAlgorithmAStarSearch<ActionT, NodeT extends TCommonsAlgorithmSearchNode<ActionT>> extends CommonsAlgorithmGreedyBestFirstSearch<ActionT, NodeT> {
|
|
11
|
+
protected abstract greedyBestFirstHeuristic(node: NodeT): number;
|
|
12
|
+
protected heuristic(node: NodeT): number;
|
|
13
|
+
protected stepCost(_node: NodeT): number;
|
|
14
|
+
protected transition(node: TStepCostInternalNode<ActionT, NodeT>, action: ActionT): TStepCostInternalNode<ActionT, NodeT> | undefined;
|
|
15
|
+
computeRoute(start: Omit<NodeT, 'action'>, progressCallback?: (frontierLength: number, exploredLength: number) => void, progressBlockSize?: number): NodeT[] | undefined;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CommonsAlgorithmGreedyBestFirstSearch as CommonsAlgorithmGreedyBestFirstSearch } from './greedy-best-first-search.mjs';
|
|
2
|
+
import { commonsAlgorithmDeInternalise } from './search.mjs';
|
|
3
|
+
function commonsAlgorithmDeInternaliseStepCost(node) {
|
|
4
|
+
const clone = commonsAlgorithmDeInternalise(node);
|
|
5
|
+
delete clone['stepCost'];
|
|
6
|
+
return clone;
|
|
7
|
+
}
|
|
8
|
+
export class CommonsAlgorithmAStarSearch extends CommonsAlgorithmGreedyBestFirstSearch {
|
|
9
|
+
heuristic(node) {
|
|
10
|
+
return node.stepCost + this.greedyBestFirstHeuristic(node);
|
|
11
|
+
}
|
|
12
|
+
stepCost(_node) {
|
|
13
|
+
return 1;
|
|
14
|
+
}
|
|
15
|
+
transition(node, action) {
|
|
16
|
+
const applied = super.transition(node, action);
|
|
17
|
+
if (!applied)
|
|
18
|
+
return undefined;
|
|
19
|
+
const stepCost = this.stepCost(commonsAlgorithmDeInternaliseStepCost(applied));
|
|
20
|
+
return {
|
|
21
|
+
...applied,
|
|
22
|
+
stepCost: node.stepCost + stepCost
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
computeRoute(start, progressCallback, progressBlockSize = 10) {
|
|
26
|
+
return super.computeRoute({
|
|
27
|
+
...start,
|
|
28
|
+
stepCost: 0
|
|
29
|
+
}, progressCallback, progressBlockSize);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=astar-search.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astar-search.mjs","sourceRoot":"","sources":["../../src/classes/astar-search.mts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qCAAqC,IAAI,qCAAqC,EAAE,MAAM,gCAAgC,CAAC;AAChI,OAAO,EAAiC,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAgB5F,SAAS,qCAAqC,CAI5C,IAAmB;IACpB,MAAM,KAAK,GAAU,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACzD,OAAQ,KAAyB,CAAC,UAAU,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,OAAgB,2BAGpB,SAAQ,qCAAqD;IAGpD,SAAS,CAAC,IAAW;QAC9B,OAAQ,IAAgE,CAAC,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACzH,CAAC;IAES,QAAQ,CAAC,KAAY;QAC9B,OAAO,CAAC,CAAC;IACV,CAAC;IAEkB,UAAU,CAC3B,IAA2C,EAC3C,MAAe;QAEhB,MAAM,OAAO,GAAoD,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAoD,CAAC;QACnJ,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,MAAM,QAAQ,GAAW,IAAI,CAAC,QAAQ,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC,CAAC;QAEvF,OAAO;YACL,GAAG,OAAO;YACV,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ;SACnC,CAAC;IACH,CAAC;IAEe,YAAY,CAC1B,KAA4B,EAC5B,gBAA2E,EAC3E,oBAA4B,EAAE;QAE/B,OAAO,KAAK,CAAC,YAAY,CACvB;YACE,GAAG,KAAK;YACR,QAAQ,EAAE,CAAC;SACuF,EACpG,gBAAgB,EAChB,iBAAiB,CAClB,CAAC;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ECommonsAlgorithmBinaryPlayer } from '../enums/ebinary-player.mjs';
|
|
2
|
+
export type TCommonsAlgorithmBinaryWinnerMiniMaxPlayer = ECommonsAlgorithmBinaryPlayer;
|
|
3
|
+
export type TCommonsAlgorithmBinaryPlay<ActionT> = {
|
|
4
|
+
player: TCommonsAlgorithmBinaryWinnerMiniMaxPlayer;
|
|
5
|
+
action: ActionT;
|
|
6
|
+
};
|
|
7
|
+
export declare abstract class CommonsAlgorithmBinaryWinnerMiniMax<ActionT, StateT> {
|
|
8
|
+
private state;
|
|
9
|
+
constructor(state: StateT);
|
|
10
|
+
protected abstract player(state: StateT): TCommonsAlgorithmBinaryWinnerMiniMaxPlayer;
|
|
11
|
+
protected abstract actions(state: StateT, player: TCommonsAlgorithmBinaryWinnerMiniMaxPlayer): ActionT[];
|
|
12
|
+
protected abstract clone(state: StateT): StateT;
|
|
13
|
+
protected abstract applyAction(state: StateT, player: TCommonsAlgorithmBinaryWinnerMiniMaxPlayer, action: ActionT): StateT;
|
|
14
|
+
private result;
|
|
15
|
+
protected abstract isWon(state: StateT, player: TCommonsAlgorithmBinaryWinnerMiniMaxPlayer): boolean;
|
|
16
|
+
protected abstract isDraw(state: StateT): boolean;
|
|
17
|
+
private winner;
|
|
18
|
+
private isTerminal;
|
|
19
|
+
private utility;
|
|
20
|
+
private minimaxMax;
|
|
21
|
+
private minimaxMin;
|
|
22
|
+
private minimax;
|
|
23
|
+
get currentState(): StateT;
|
|
24
|
+
next(): TCommonsAlgorithmBinaryPlay<ActionT> | undefined;
|
|
25
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { ECommonsAlgorithmBinaryPlayer } from '../enums/ebinary-player.mjs';
|
|
2
|
+
export class CommonsAlgorithmBinaryWinnerMiniMax {
|
|
3
|
+
state;
|
|
4
|
+
constructor(state) {
|
|
5
|
+
this.state = state;
|
|
6
|
+
}
|
|
7
|
+
result(state, player, action) {
|
|
8
|
+
const clone = this.clone(state);
|
|
9
|
+
this.applyAction(clone, player, action);
|
|
10
|
+
return clone;
|
|
11
|
+
}
|
|
12
|
+
winner(state) {
|
|
13
|
+
for (const player of [ECommonsAlgorithmBinaryPlayer.A, ECommonsAlgorithmBinaryPlayer.B]) {
|
|
14
|
+
if (this.isWon(state, player))
|
|
15
|
+
return player;
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
isTerminal(state) {
|
|
20
|
+
if (this.isDraw(state))
|
|
21
|
+
return true;
|
|
22
|
+
if (this.winner(state) !== undefined)
|
|
23
|
+
return true;
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
utility(state) {
|
|
27
|
+
const won = this.winner(state);
|
|
28
|
+
if (won === ECommonsAlgorithmBinaryPlayer.A)
|
|
29
|
+
return -1;
|
|
30
|
+
if (won === ECommonsAlgorithmBinaryPlayer.B)
|
|
31
|
+
return 1;
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
minimaxMax(state) {
|
|
35
|
+
if (this.isTerminal(state))
|
|
36
|
+
return this.utility(state);
|
|
37
|
+
const currentPlayer = this.player(state);
|
|
38
|
+
let v;
|
|
39
|
+
for (const action of this.actions(state, currentPlayer)) {
|
|
40
|
+
const applied = this.result(state, currentPlayer, action);
|
|
41
|
+
const score = this.minimaxMin(applied);
|
|
42
|
+
v = v === undefined ? score : Math.max(v, score);
|
|
43
|
+
}
|
|
44
|
+
return v || 0;
|
|
45
|
+
}
|
|
46
|
+
minimaxMin(state) {
|
|
47
|
+
if (this.isTerminal(state))
|
|
48
|
+
return this.utility(state);
|
|
49
|
+
const currentPlayer = this.player(state);
|
|
50
|
+
let v;
|
|
51
|
+
for (const action of this.actions(state, currentPlayer)) {
|
|
52
|
+
const applied = this.result(state, currentPlayer, action);
|
|
53
|
+
const score = this.minimaxMax(applied);
|
|
54
|
+
v = v === undefined ? score : Math.min(v, score);
|
|
55
|
+
}
|
|
56
|
+
return v || 0;
|
|
57
|
+
}
|
|
58
|
+
minimax(state) {
|
|
59
|
+
if (this.isTerminal(state))
|
|
60
|
+
return undefined;
|
|
61
|
+
const currentPlayer = this.player(state);
|
|
62
|
+
const possibilities = [];
|
|
63
|
+
let best;
|
|
64
|
+
for (const action of this.actions(state, currentPlayer)) {
|
|
65
|
+
const test = this.result(state, currentPlayer, action);
|
|
66
|
+
if (currentPlayer === ECommonsAlgorithmBinaryPlayer.B) {
|
|
67
|
+
const v = this.minimaxMin(test);
|
|
68
|
+
possibilities.push([action, v]);
|
|
69
|
+
best = best === undefined ? v : Math.max(best, v);
|
|
70
|
+
}
|
|
71
|
+
else if (currentPlayer === ECommonsAlgorithmBinaryPlayer.A) {
|
|
72
|
+
const v = this.minimaxMax(test);
|
|
73
|
+
possibilities.push([action, v]);
|
|
74
|
+
best = best === undefined ? v : Math.min(best, v);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
throw new Error('Invalid player');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (possibilities.length === 0)
|
|
81
|
+
return undefined;
|
|
82
|
+
const bestPossibility = possibilities
|
|
83
|
+
.find((p) => p[1] === best);
|
|
84
|
+
return {
|
|
85
|
+
player: currentPlayer,
|
|
86
|
+
action: bestPossibility[0]
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
get currentState() {
|
|
90
|
+
return this.clone(this.state);
|
|
91
|
+
}
|
|
92
|
+
next() {
|
|
93
|
+
const play = this.minimax(this.state);
|
|
94
|
+
if (play === undefined)
|
|
95
|
+
return undefined;
|
|
96
|
+
this.state = this.result(this.state, play.player, play.action);
|
|
97
|
+
return play;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=binary-winner-mini-max.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-winner-mini-max.mjs","sourceRoot":"","sources":["../../src/classes/binary-winner-mini-max.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAW5E,MAAM,OAAgB,mCAAmC;IAK9C;IADV,YACU,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IACpB,CAAC;IAUI,MAAM,CAAC,KAAa,EAAE,MAAkD,EAAE,MAAe;QAChG,MAAM,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAExC,OAAO,KAAK,CAAC;IACd,CAAC;IAKO,MAAM,CAAC,KAAa;QAC3B,KAAK,MAAM,MAAM,IAAI,CAAE,6BAA6B,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC,CAAE,EAAE,CAAC;YAC3F,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;QAC9C,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,UAAU,CAAC,KAAa;QAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAElD,OAAO,KAAK,CAAC;IACd,CAAC;IAEO,OAAO,CAAC,KAAa;QAC5B,MAAM,GAAG,GAAyD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAErF,IAAI,GAAG,KAAK,6BAA6B,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,GAAG,KAAK,6BAA6B,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC;IACV,CAAC;IAEO,UAAU,CAAC,KAAa;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEvD,MAAM,aAAa,GAA+C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAErF,IAAI,CAAqB,CAAC;QAE1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;YACzD,MAAM,OAAO,GAAW,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,KAAK,GAAa,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAEjD,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAc,CAAC;QAChE,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAEO,UAAU,CAAC,KAAa;QAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEvD,MAAM,aAAa,GAA+C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAErF,IAAI,CAAqB,CAAC;QAE1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;YACzD,MAAM,OAAO,GAAW,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,KAAK,GAAa,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAEjD,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAc,CAAC;QAChE,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAEO,OAAO,CAAC,KAAa;QAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE7C,MAAM,aAAa,GAA+C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAErF,MAAM,aAAa,GAA4B,EAAE,CAAC;QAElD,IAAI,IAAwB,CAAC;QAE7B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GAAW,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YAE/D,IAAI,aAAa,KAAK,6BAA6B,CAAC,CAAC,EAAE,CAAC;gBACvD,MAAM,CAAC,GAAa,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC1C,aAAa,CAAC,IAAI,CAAC,CAAE,MAAM,EAAE,CAAC,CAAE,CAAC,CAAC;gBAElC,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAc,CAAC;YACjE,CAAC;iBAAM,IAAI,aAAa,KAAK,6BAA6B,CAAC,CAAC,EAAE,CAAC;gBAC9D,MAAM,CAAC,GAAa,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC1C,aAAa,CAAC,IAAI,CAAC,CAAE,MAAM,EAAE,CAAC,CAAE,CAAC,CAAC;gBAElC,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAc,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACnC,CAAC;QACF,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEjD,MAAM,eAAe,GAA0B,aAAa;aACzD,IAAI,CAAC,CAAC,CAAwB,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAE,CAAC;QAE/D,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;SAC3B,CAAC;IACH,CAAC;IAED,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAEM,IAAI;QACV,MAAM,IAAI,GAAmD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtF,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAEzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC;IACb,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 CommonsAlgorithmBredthFirstSearch<ActionT, NodeT extends TCommonsAlgorithmSearchNode<ActionT>> extends CommonsAlgorithmSearch<ActionT, NodeT> {
|
|
4
|
+
protected get next(): TCommonsAlgorithmInternalNode<ActionT, NodeT> | undefined;
|
|
5
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bredth-first-search.mjs","sourceRoot":"","sources":["../../src/classes/bredth-first-search.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAiC,MAAM,cAAc,CAAC;AAErF,MAAM,OAAgB,iCAGpB,SAAQ,sBAAsC;IAC/C,IAAc,IAAI;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare abstract class CommonsAlgorithmConstraintSatisfactionNode<DomainT> {
|
|
2
|
+
private internalDomain;
|
|
3
|
+
private isDomainValueEqual?;
|
|
4
|
+
private internalUid;
|
|
5
|
+
private saved;
|
|
6
|
+
constructor(internalDomain: DomainT[], isDomainValueEqual?: ((a: DomainT, b: DomainT) => boolean) | undefined);
|
|
7
|
+
saveDomains(): void;
|
|
8
|
+
revertDomains(): void;
|
|
9
|
+
get domain(): DomainT[];
|
|
10
|
+
set domain(values: DomainT[]);
|
|
11
|
+
removeFromDomain(value: DomainT): void;
|
|
12
|
+
get uid(): string;
|
|
13
|
+
isEqual(b: CommonsAlgorithmConstraintSatisfactionNode<DomainT>): boolean;
|
|
14
|
+
abstract applyUnaryConsistency(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class CommonsAlgorithmConstraintSatisfactionEdge<DomainT, NodeT extends CommonsAlgorithmConstraintSatisfactionNode<DomainT>, EdgeDataT> {
|
|
17
|
+
private xNode;
|
|
18
|
+
private yNode;
|
|
19
|
+
private edgeData?;
|
|
20
|
+
constructor(xNode: NodeT, yNode: NodeT, edgeData?: EdgeDataT | undefined);
|
|
21
|
+
get x(): NodeT;
|
|
22
|
+
get y(): NodeT;
|
|
23
|
+
get data(): EdgeDataT | undefined;
|
|
24
|
+
isEqual(edge: CommonsAlgorithmConstraintSatisfactionEdge<DomainT, NodeT, EdgeDataT>): boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare abstract class CommonsAlgorithmConstraintSatisfactionGraph<DomainT, NodeT extends CommonsAlgorithmConstraintSatisfactionNode<DomainT>, EdgeDataT = void> {
|
|
27
|
+
private internalNodes;
|
|
28
|
+
private internalEdges;
|
|
29
|
+
get nodes(): NodeT[];
|
|
30
|
+
get edges(): CommonsAlgorithmConstraintSatisfactionEdge<DomainT, NodeT, EdgeDataT>[];
|
|
31
|
+
addNode(node: NodeT): NodeT;
|
|
32
|
+
removeNode(node: NodeT): boolean;
|
|
33
|
+
join(a: NodeT, b: NodeT, data?: EdgeDataT): CommonsAlgorithmConstraintSatisfactionEdge<DomainT, NodeT, EdgeDataT>;
|
|
34
|
+
unjoin(a: NodeT, b: NodeT): void;
|
|
35
|
+
private listEdges;
|
|
36
|
+
listRemoteNodes(x: NodeT): NodeT[];
|
|
37
|
+
protected abstract satisfies(xValue: DomainT, yValue: DomainT, edge: CommonsAlgorithmConstraintSatisfactionEdge<DomainT, NodeT, EdgeDataT> | undefined): boolean;
|
|
38
|
+
private revise;
|
|
39
|
+
applyUnaryConsistency(): void;
|
|
40
|
+
applyAc3(): boolean;
|
|
41
|
+
saveSnapshot(): void;
|
|
42
|
+
revertSnapshot(): void;
|
|
43
|
+
snapshotForInference(): Map<string, DomainT[]>;
|
|
44
|
+
isUnsolvable(): boolean;
|
|
45
|
+
isComplete(): boolean;
|
|
46
|
+
isConsistent(): boolean;
|
|
47
|
+
get mostConnecteds(): NodeT[];
|
|
48
|
+
get mostConnected(): NodeT | undefined;
|
|
49
|
+
get smallestNonSingularDomains(): NodeT[];
|
|
50
|
+
get smallestNonSingularDomain(): NodeT | undefined;
|
|
51
|
+
applyBacktrack(chooseNextNode?: () => NodeT | undefined): boolean;
|
|
52
|
+
}
|