@aeolun/dijkstra-calculator
Advanced tools
Comparing version 1.3.2 to 1.4.0
@@ -5,35 +5,48 @@ /** | ||
export type NodeId = string; | ||
export interface Node { | ||
export interface Node<RESOURCES extends string> { | ||
id: NodeId; | ||
properties: PathProperties; | ||
properties: PathProperties<RESOURCES>; | ||
} | ||
export interface LinkedListItem { | ||
type PartialRecord<K extends keyof any, T> = Partial<Record<K, T>>; | ||
export interface LinkedListItem<RESOURCES extends string> { | ||
source: NodeId; | ||
target: NodeId; | ||
edge?: NodeId; | ||
consumes?: Record<string, number>; | ||
recover?: Record<string, number>; | ||
consumes?: PartialRecord<RESOURCES, number>; | ||
recover?: PartialRecord<RESOURCES, number>; | ||
weight?: number; | ||
weightFromResources?: number; | ||
totalConsumed?: PartialRecord<RESOURCES, number>; | ||
totalRecovered?: PartialRecord<RESOURCES, number>; | ||
} | ||
export interface VertexProperties { | ||
recover?: Record<string, boolean>; | ||
export interface VertexProperties<RESOURCES extends string> { | ||
recover?: PartialRecord<RESOURCES, (currentLevel: number, maxLevel: number) => { | ||
recoverAmount: number; | ||
cost: number; | ||
}>; | ||
} | ||
export interface EdgeProperties { | ||
export interface EdgeProperties<RESOURCES extends string> { | ||
id?: string; | ||
weight: number; | ||
consumes?: Record<string, number>; | ||
recover?: Record<string, number>; | ||
consumes?: PartialRecord<RESOURCES, number>; | ||
recover?: PartialRecord<RESOURCES, number>; | ||
totalConsumed?: PartialRecord<RESOURCES, number>; | ||
totalRecovered?: PartialRecord<RESOURCES, number>; | ||
weightFromResources?: number; | ||
} | ||
export interface PathProperties { | ||
export interface PathProperties<RESOURCES extends string> { | ||
priority: number; | ||
supplies?: Record<string, number>; | ||
maxSupplies?: Record<string, number>; | ||
supplies?: PartialRecord<RESOURCES, number>; | ||
supplyCapacity?: PartialRecord<RESOURCES, number>; | ||
totalConsumed?: PartialRecord<RESOURCES, number>; | ||
totalRecovered?: PartialRecord<RESOURCES, number>; | ||
resourceWeight?: PartialRecord<RESOURCES, number>; | ||
} | ||
export type PathReturnProperties = PathProperties & { | ||
export type PathReturnProperties<RESOURCES extends string> = PathProperties<RESOURCES> & { | ||
timeTaken: number; | ||
}; | ||
export type PathNode = { | ||
export type PathNode<RESOURCES extends string> = { | ||
vertexId: NodeId; | ||
} & Partial<EdgeProperties>; | ||
export declare class DijkstraCalculator { | ||
} & Partial<EdgeProperties<RESOURCES>>; | ||
export declare class DijkstraCalculator<RESOURCES extends string> { | ||
private heuristic?; | ||
@@ -44,12 +57,16 @@ private isDebugging; | ||
id: NodeId; | ||
properties: EdgeProperties; | ||
properties: EdgeProperties<RESOURCES>; | ||
}[]; | ||
}; | ||
vertexProperties: { | ||
[key: NodeId]: VertexProperties; | ||
[key: NodeId]: VertexProperties<RESOURCES>; | ||
}; | ||
constructor(heuristic?: ((vertex: NodeId, target: NodeId) => number) | undefined, isDebugging?: boolean); | ||
addVertex(vertex: NodeId, properties?: VertexProperties): void; | ||
addEdge(vertex1: NodeId, vertex2: NodeId, properties?: EdgeProperties): void; | ||
addVertex(vertex: NodeId, properties?: VertexProperties<RESOURCES>): void; | ||
addEdge(vertex1: NodeId, vertex2: NodeId, properties?: EdgeProperties<RESOURCES>): void; | ||
debug(...args: any[]): void; | ||
calculateShortestRouteAsLinkedListResults(nodes: NodeId[], properties?: Omit<PathProperties<RESOURCES>, 'priority'>): { | ||
finalPath: LinkedListItem<RESOURCES>[]; | ||
pathProperties: PathReturnProperties<RESOURCES>; | ||
}; | ||
/** | ||
@@ -61,5 +78,5 @@ * Given the provided weights of each edge | ||
*/ | ||
calculateShortestPathAsLinkedListResult(start: NodeId, finish: NodeId, properties?: Omit<PathProperties, 'priority'>): { | ||
finalPath: LinkedListItem[]; | ||
pathProperties: PathReturnProperties; | ||
calculateShortestPathAsLinkedListResult(start: NodeId, finish: NodeId, properties?: Omit<PathProperties<RESOURCES>, 'priority'>): { | ||
finalPath: LinkedListItem<RESOURCES>[]; | ||
pathProperties: PathReturnProperties<RESOURCES>; | ||
}; | ||
@@ -72,6 +89,7 @@ /** | ||
*/ | ||
calculateShortestPath(start: NodeId, finish: NodeId, properties?: Omit<PathProperties, 'priority'>): { | ||
calculateShortestPath(start: NodeId, finish: NodeId, properties?: Omit<PathProperties<RESOURCES>, 'priority'>): { | ||
finalPath: string[]; | ||
pathProperties: PathReturnProperties; | ||
pathProperties: PathReturnProperties<RESOURCES>; | ||
}; | ||
} | ||
export {}; |
@@ -91,2 +91,62 @@ "use strict"; | ||
} | ||
calculateShortestRouteAsLinkedListResults(nodes, properties = {}) { | ||
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; | ||
// calculate route from first node hitting all specified nodes in order | ||
const startNode = nodes.shift(); | ||
if (!startNode) { | ||
throw new Error('No nodes provided'); | ||
} | ||
const results = { | ||
finalPath: [], | ||
pathProperties: { | ||
priority: 0, | ||
timeTaken: 0, | ||
supplies: {}, | ||
totalConsumed: {}, | ||
totalRecovered: {}, | ||
resourceWeight: {}, | ||
}, | ||
}; | ||
let currentNode = startNode; | ||
while (nodes.length > 0) { | ||
const nextNode = nodes.shift(); | ||
if (!nextNode) { | ||
throw new Error('No nodes provided'); | ||
} | ||
const route = this.calculateShortestPathAsLinkedListResult(currentNode, nextNode, Object.assign(Object.assign({}, properties), { supplies: Object.assign(Object.assign({}, properties.supplies), results.pathProperties.supplies) })); | ||
results.finalPath = results.finalPath.concat(route.finalPath); | ||
results.pathProperties.priority += route.pathProperties.priority; | ||
results.pathProperties.timeTaken += route.pathProperties.timeTaken; | ||
for (const supply in route.pathProperties.supplies) { | ||
if (results.pathProperties.supplies) { | ||
results.pathProperties.supplies[supply] = | ||
((_a = results.pathProperties.supplies[supply]) !== null && _a !== void 0 ? _a : 0) + | ||
((_c = (_b = route.pathProperties.supplies) === null || _b === void 0 ? void 0 : _b[supply]) !== null && _c !== void 0 ? _c : 0); | ||
} | ||
} | ||
for (const supply in route.pathProperties.totalConsumed) { | ||
if (results.pathProperties.totalConsumed) { | ||
results.pathProperties.totalConsumed[supply] = | ||
((_d = results.pathProperties.totalConsumed[supply]) !== null && _d !== void 0 ? _d : 0) + | ||
((_f = (_e = route.pathProperties.totalConsumed) === null || _e === void 0 ? void 0 : _e[supply]) !== null && _f !== void 0 ? _f : 0); | ||
} | ||
} | ||
for (const supply in route.pathProperties.totalRecovered) { | ||
if (results.pathProperties.totalRecovered) { | ||
results.pathProperties.totalRecovered[supply] = | ||
((_g = results.pathProperties.totalRecovered[supply]) !== null && _g !== void 0 ? _g : 0) + | ||
((_j = (_h = route.pathProperties.totalRecovered) === null || _h === void 0 ? void 0 : _h[supply]) !== null && _j !== void 0 ? _j : 0); | ||
} | ||
} | ||
for (const supply in route.pathProperties.resourceWeight) { | ||
if (results.pathProperties.resourceWeight) { | ||
results.pathProperties.resourceWeight[supply] = | ||
((_k = results.pathProperties.resourceWeight[supply]) !== null && _k !== void 0 ? _k : 0) + | ||
((_m = (_l = route.pathProperties.resourceWeight) === null || _l === void 0 ? void 0 : _l[supply]) !== null && _m !== void 0 ? _m : 0); | ||
} | ||
} | ||
currentNode = nextNode; | ||
} | ||
return results; | ||
} | ||
/** | ||
@@ -99,3 +159,3 @@ * Given the provided weights of each edge | ||
calculateShortestPathAsLinkedListResult(start, finish, properties = {}) { | ||
var _a, _b; | ||
var _a, _b, _c, _d, _e, _f, _g, _h, _j; | ||
this.debug("Start running Dijkstra's algorithm"); | ||
@@ -146,16 +206,22 @@ const startTime = Date.now(); | ||
const newSupplies = Object.assign({}, distances[smallest].supplies); | ||
let recoverHere = {}; | ||
const totalConsumed = Object.assign({}, distances[smallest].totalConsumed); | ||
const totalRecovered = Object.assign({}, distances[smallest].totalRecovered); | ||
const totalResourceWeight = Object.assign({}, distances[smallest].resourceWeight); | ||
let weightFromResources = 0; | ||
const recoverHere = {}; | ||
if (nextNode.properties.consumes) { | ||
for (const supply in nextNode.properties.consumes) { | ||
if (newSupplies[supply]) { | ||
newSupplies[supply] -= nextNode.properties.consumes[supply]; | ||
} | ||
else { | ||
newSupplies[supply] = -nextNode.properties.consumes[supply]; | ||
} | ||
if (newSupplies[supply] < 0) { | ||
candidate += 1000000000; | ||
} | ||
const consumed = (_a = nextNode.properties.consumes[supply]) !== null && _a !== void 0 ? _a : 0; | ||
const originalSupply = (_b = newSupplies[supply]) !== null && _b !== void 0 ? _b : 0; | ||
newSupplies[supply] = originalSupply - consumed; | ||
totalConsumed[supply] = ((_c = totalConsumed[supply]) !== null && _c !== void 0 ? _c : 0) + consumed; | ||
} | ||
} | ||
// any step with negative supplies is a step we can't take | ||
for (const supply in newSupplies) { | ||
const supp = newSupplies[supply]; | ||
if (supp && supp < 0) { | ||
candidate += Math.abs(supp) * 100000; | ||
} | ||
} | ||
if (nextVertexProperties && nextVertexProperties.recover) { | ||
@@ -165,10 +231,22 @@ this.debug('recover found'); | ||
const smallestSupplies = distances[smallest].supplies; | ||
if (properties.maxSupplies && | ||
properties.maxSupplies[supply] && | ||
smallestSupplies && | ||
smallestSupplies[supply]) { | ||
const recoverAmount = properties.maxSupplies[supply] - newSupplies[supply]; | ||
const supplyFunction = nextVertexProperties.recover[supply]; | ||
const supplyCapacity = (_d = properties.supplyCapacity) === null || _d === void 0 ? void 0 : _d[supply]; | ||
const currentSupply = (_e = newSupplies[supply]) !== null && _e !== void 0 ? _e : 0; | ||
if (!supplyCapacity) { | ||
throw new Error('No capacity for supply ' + supply + ', cannot recover.'); | ||
} | ||
if (smallestSupplies && | ||
smallestSupplies[supply] && | ||
supplyFunction) { | ||
const { recoverAmount, cost } = supplyFunction(currentSupply, supplyCapacity); | ||
// increase cost of path by the amount of resources we need to recover times the cost of recovering here | ||
candidate += cost; | ||
weightFromResources += cost; | ||
recoverHere[supply] = recoverAmount; | ||
totalResourceWeight[supply] = | ||
((_f = totalResourceWeight[supply]) !== null && _f !== void 0 ? _f : 0) + cost; | ||
totalRecovered[supply] = | ||
((_g = totalRecovered[supply]) !== null && _g !== void 0 ? _g : 0) + recoverAmount; | ||
} | ||
newSupplies[supply] = (_b = (_a = properties.maxSupplies) === null || _a === void 0 ? void 0 : _a[supply]) !== null && _b !== void 0 ? _b : 0; | ||
newSupplies[supply] = (_j = (_h = properties.supplyCapacity) === null || _h === void 0 ? void 0 : _h[supply]) !== null && _j !== void 0 ? _j : 0; | ||
} | ||
@@ -179,4 +257,7 @@ } | ||
priority: candidate, | ||
totalConsumed, | ||
totalRecovered, | ||
resourceWeight: totalResourceWeight, | ||
}; | ||
this.debug('On ', smallest, ' traveling to ', nextNode.id, ' state at end of trip ', newProperties); | ||
this.debug('On ', smallest, ' over ', nextNode.properties.id, ' traveling to ', nextNode.id, ' state at end of trip ', newProperties); | ||
const nextNeighbor = nextNode.id; | ||
@@ -189,3 +270,3 @@ if (candidate < distances[nextNeighbor].priority) { | ||
previous[nextNeighbor] = smallest; | ||
previousEdgeId[nextNeighbor] = Object.assign(Object.assign({}, nextNode.properties), { recover: recoverHere }); | ||
previousEdgeId[nextNeighbor] = Object.assign(Object.assign({}, nextNode.properties), { recover: recoverHere, weightFromResources }); | ||
//enqueue in priority queue with new priority | ||
@@ -229,2 +310,5 @@ nodes.enqueue(nextNeighbor, newProperties); | ||
weight: finalPath[i + 1].weight, | ||
weightFromResources: finalPath[i + 1].weightFromResources, | ||
totalConsumed: finalPath[i + 1].totalConsumed, | ||
totalRecovered: finalPath[i + 1].totalRecovered, | ||
} | ||
@@ -249,3 +333,3 @@ : { | ||
const result = this.calculateShortestPathAsLinkedListResult(start, finish, properties); | ||
let finalPath = []; | ||
const finalPath = []; | ||
if (result.finalPath.length > 0) { | ||
@@ -265,2 +349,2 @@ result.finalPath.forEach((item, index) => { | ||
exports.DijkstraCalculator = DijkstraCalculator; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLE1BQU0sYUFBYTtJQUdqQjtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVSxFQUFFLFVBQTBCO1FBQzVDLE1BQU0sT0FBTyxHQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFBRSxNQUFNO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzFCLEdBQUcsR0FBRyxTQUFTLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBQ0QsT0FBTztRQUNMLE1BQU0sR0FBRyxH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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLE1BQU0sYUFBYTtJQUdqQjtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVSxFQUFFLFVBQXFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFvQixFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDZCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVE7Z0JBQUUsTUFBTTtZQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUMxQixHQUFHLEdBQUcsU0FBUyxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUNELE9BQU87UUFDTCxNQUFNLEdBQUcs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 |
@@ -5,35 +5,48 @@ /** | ||
export type NodeId = string; | ||
export interface Node { | ||
export interface Node<RESOURCES extends string> { | ||
id: NodeId; | ||
properties: PathProperties; | ||
properties: PathProperties<RESOURCES>; | ||
} | ||
export interface LinkedListItem { | ||
type PartialRecord<K extends keyof any, T> = Partial<Record<K, T>>; | ||
export interface LinkedListItem<RESOURCES extends string> { | ||
source: NodeId; | ||
target: NodeId; | ||
edge?: NodeId; | ||
consumes?: Record<string, number>; | ||
recover?: Record<string, number>; | ||
consumes?: PartialRecord<RESOURCES, number>; | ||
recover?: PartialRecord<RESOURCES, number>; | ||
weight?: number; | ||
weightFromResources?: number; | ||
totalConsumed?: PartialRecord<RESOURCES, number>; | ||
totalRecovered?: PartialRecord<RESOURCES, number>; | ||
} | ||
export interface VertexProperties { | ||
recover?: Record<string, boolean>; | ||
export interface VertexProperties<RESOURCES extends string> { | ||
recover?: PartialRecord<RESOURCES, (currentLevel: number, maxLevel: number) => { | ||
recoverAmount: number; | ||
cost: number; | ||
}>; | ||
} | ||
export interface EdgeProperties { | ||
export interface EdgeProperties<RESOURCES extends string> { | ||
id?: string; | ||
weight: number; | ||
consumes?: Record<string, number>; | ||
recover?: Record<string, number>; | ||
consumes?: PartialRecord<RESOURCES, number>; | ||
recover?: PartialRecord<RESOURCES, number>; | ||
totalConsumed?: PartialRecord<RESOURCES, number>; | ||
totalRecovered?: PartialRecord<RESOURCES, number>; | ||
weightFromResources?: number; | ||
} | ||
export interface PathProperties { | ||
export interface PathProperties<RESOURCES extends string> { | ||
priority: number; | ||
supplies?: Record<string, number>; | ||
maxSupplies?: Record<string, number>; | ||
supplies?: PartialRecord<RESOURCES, number>; | ||
supplyCapacity?: PartialRecord<RESOURCES, number>; | ||
totalConsumed?: PartialRecord<RESOURCES, number>; | ||
totalRecovered?: PartialRecord<RESOURCES, number>; | ||
resourceWeight?: PartialRecord<RESOURCES, number>; | ||
} | ||
export type PathReturnProperties = PathProperties & { | ||
export type PathReturnProperties<RESOURCES extends string> = PathProperties<RESOURCES> & { | ||
timeTaken: number; | ||
}; | ||
export type PathNode = { | ||
export type PathNode<RESOURCES extends string> = { | ||
vertexId: NodeId; | ||
} & Partial<EdgeProperties>; | ||
export declare class DijkstraCalculator { | ||
} & Partial<EdgeProperties<RESOURCES>>; | ||
export declare class DijkstraCalculator<RESOURCES extends string> { | ||
private heuristic?; | ||
@@ -44,12 +57,16 @@ private isDebugging; | ||
id: NodeId; | ||
properties: EdgeProperties; | ||
properties: EdgeProperties<RESOURCES>; | ||
}[]; | ||
}; | ||
vertexProperties: { | ||
[key: NodeId]: VertexProperties; | ||
[key: NodeId]: VertexProperties<RESOURCES>; | ||
}; | ||
constructor(heuristic?: ((vertex: NodeId, target: NodeId) => number) | undefined, isDebugging?: boolean); | ||
addVertex(vertex: NodeId, properties?: VertexProperties): void; | ||
addEdge(vertex1: NodeId, vertex2: NodeId, properties?: EdgeProperties): void; | ||
addVertex(vertex: NodeId, properties?: VertexProperties<RESOURCES>): void; | ||
addEdge(vertex1: NodeId, vertex2: NodeId, properties?: EdgeProperties<RESOURCES>): void; | ||
debug(...args: any[]): void; | ||
calculateShortestRouteAsLinkedListResults(nodes: NodeId[], properties?: Omit<PathProperties<RESOURCES>, 'priority'>): { | ||
finalPath: LinkedListItem<RESOURCES>[]; | ||
pathProperties: PathReturnProperties<RESOURCES>; | ||
}; | ||
/** | ||
@@ -61,5 +78,5 @@ * Given the provided weights of each edge | ||
*/ | ||
calculateShortestPathAsLinkedListResult(start: NodeId, finish: NodeId, properties?: Omit<PathProperties, 'priority'>): { | ||
finalPath: LinkedListItem[]; | ||
pathProperties: PathReturnProperties; | ||
calculateShortestPathAsLinkedListResult(start: NodeId, finish: NodeId, properties?: Omit<PathProperties<RESOURCES>, 'priority'>): { | ||
finalPath: LinkedListItem<RESOURCES>[]; | ||
pathProperties: PathReturnProperties<RESOURCES>; | ||
}; | ||
@@ -72,6 +89,7 @@ /** | ||
*/ | ||
calculateShortestPath(start: NodeId, finish: NodeId, properties?: Omit<PathProperties, 'priority'>): { | ||
calculateShortestPath(start: NodeId, finish: NodeId, properties?: Omit<PathProperties<RESOURCES>, 'priority'>): { | ||
finalPath: string[]; | ||
pathProperties: PathReturnProperties; | ||
pathProperties: PathReturnProperties<RESOURCES>; | ||
}; | ||
} | ||
export {}; |
@@ -93,2 +93,67 @@ class PriorityQueue { | ||
} | ||
calculateShortestRouteAsLinkedListResults(nodes, properties = {}) { | ||
// calculate route from first node hitting all specified nodes in order | ||
const startNode = nodes.shift(); | ||
if (!startNode) { | ||
throw new Error('No nodes provided'); | ||
} | ||
const results = { | ||
finalPath: [], | ||
pathProperties: { | ||
priority: 0, | ||
timeTaken: 0, | ||
supplies: {}, | ||
totalConsumed: {}, | ||
totalRecovered: {}, | ||
resourceWeight: {}, | ||
}, | ||
}; | ||
let currentNode = startNode; | ||
while (nodes.length > 0) { | ||
const nextNode = nodes.shift(); | ||
if (!nextNode) { | ||
throw new Error('No nodes provided'); | ||
} | ||
const route = this.calculateShortestPathAsLinkedListResult(currentNode, nextNode, { | ||
...properties, | ||
supplies: { | ||
...properties.supplies, | ||
...results.pathProperties.supplies, | ||
}, | ||
}); | ||
results.finalPath = results.finalPath.concat(route.finalPath); | ||
results.pathProperties.priority += route.pathProperties.priority; | ||
results.pathProperties.timeTaken += route.pathProperties.timeTaken; | ||
for (const supply in route.pathProperties.supplies) { | ||
if (results.pathProperties.supplies) { | ||
results.pathProperties.supplies[supply] = | ||
(results.pathProperties.supplies[supply] ?? 0) + | ||
(route.pathProperties.supplies?.[supply] ?? 0); | ||
} | ||
} | ||
for (const supply in route.pathProperties.totalConsumed) { | ||
if (results.pathProperties.totalConsumed) { | ||
results.pathProperties.totalConsumed[supply] = | ||
(results.pathProperties.totalConsumed[supply] ?? 0) + | ||
(route.pathProperties.totalConsumed?.[supply] ?? 0); | ||
} | ||
} | ||
for (const supply in route.pathProperties.totalRecovered) { | ||
if (results.pathProperties.totalRecovered) { | ||
results.pathProperties.totalRecovered[supply] = | ||
(results.pathProperties.totalRecovered[supply] ?? 0) + | ||
(route.pathProperties.totalRecovered?.[supply] ?? 0); | ||
} | ||
} | ||
for (const supply in route.pathProperties.resourceWeight) { | ||
if (results.pathProperties.resourceWeight) { | ||
results.pathProperties.resourceWeight[supply] = | ||
(results.pathProperties.resourceWeight[supply] ?? 0) + | ||
(route.pathProperties.resourceWeight?.[supply] ?? 0); | ||
} | ||
} | ||
currentNode = nextNode; | ||
} | ||
return results; | ||
} | ||
/** | ||
@@ -146,17 +211,31 @@ * Given the provided weights of each edge | ||
(this.heuristic ? this.heuristic(nextNode.id, finish) : 0); | ||
const newSupplies = { ...distances[smallest].supplies }; | ||
let recoverHere = {}; | ||
const newSupplies = { | ||
...distances[smallest].supplies, | ||
}; | ||
const totalConsumed = { | ||
...distances[smallest].totalConsumed, | ||
}; | ||
const totalRecovered = { | ||
...distances[smallest].totalRecovered, | ||
}; | ||
const totalResourceWeight = { | ||
...distances[smallest].resourceWeight, | ||
}; | ||
let weightFromResources = 0; | ||
const recoverHere = {}; | ||
if (nextNode.properties.consumes) { | ||
for (const supply in nextNode.properties.consumes) { | ||
if (newSupplies[supply]) { | ||
newSupplies[supply] -= nextNode.properties.consumes[supply]; | ||
} | ||
else { | ||
newSupplies[supply] = -nextNode.properties.consumes[supply]; | ||
} | ||
if (newSupplies[supply] < 0) { | ||
candidate += 1000000000; | ||
} | ||
const consumed = nextNode.properties.consumes[supply] ?? 0; | ||
const originalSupply = newSupplies[supply] ?? 0; | ||
newSupplies[supply] = originalSupply - consumed; | ||
totalConsumed[supply] = (totalConsumed[supply] ?? 0) + consumed; | ||
} | ||
} | ||
// any step with negative supplies is a step we can't take | ||
for (const supply in newSupplies) { | ||
const supp = newSupplies[supply]; | ||
if (supp && supp < 0) { | ||
candidate += Math.abs(supp) * 100000; | ||
} | ||
} | ||
if (nextVertexProperties && nextVertexProperties.recover) { | ||
@@ -166,10 +245,22 @@ this.debug('recover found'); | ||
const smallestSupplies = distances[smallest].supplies; | ||
if (properties.maxSupplies && | ||
properties.maxSupplies[supply] && | ||
smallestSupplies && | ||
smallestSupplies[supply]) { | ||
const recoverAmount = properties.maxSupplies[supply] - newSupplies[supply]; | ||
const supplyFunction = nextVertexProperties.recover[supply]; | ||
const supplyCapacity = properties.supplyCapacity?.[supply]; | ||
const currentSupply = newSupplies[supply] ?? 0; | ||
if (!supplyCapacity) { | ||
throw new Error('No capacity for supply ' + supply + ', cannot recover.'); | ||
} | ||
if (smallestSupplies && | ||
smallestSupplies[supply] && | ||
supplyFunction) { | ||
const { recoverAmount, cost } = supplyFunction(currentSupply, supplyCapacity); | ||
// increase cost of path by the amount of resources we need to recover times the cost of recovering here | ||
candidate += cost; | ||
weightFromResources += cost; | ||
recoverHere[supply] = recoverAmount; | ||
totalResourceWeight[supply] = | ||
(totalResourceWeight[supply] ?? 0) + cost; | ||
totalRecovered[supply] = | ||
(totalRecovered[supply] ?? 0) + recoverAmount; | ||
} | ||
newSupplies[supply] = properties.maxSupplies?.[supply] ?? 0; | ||
newSupplies[supply] = properties.supplyCapacity?.[supply] ?? 0; | ||
} | ||
@@ -180,4 +271,7 @@ } | ||
priority: candidate, | ||
totalConsumed, | ||
totalRecovered, | ||
resourceWeight: totalResourceWeight, | ||
}; | ||
this.debug('On ', smallest, ' traveling to ', nextNode.id, ' state at end of trip ', newProperties); | ||
this.debug('On ', smallest, ' over ', nextNode.properties.id, ' traveling to ', nextNode.id, ' state at end of trip ', newProperties); | ||
const nextNeighbor = nextNode.id; | ||
@@ -193,2 +287,3 @@ if (candidate < distances[nextNeighbor].priority) { | ||
recover: recoverHere, | ||
weightFromResources, | ||
}; | ||
@@ -233,2 +328,5 @@ //enqueue in priority queue with new priority | ||
weight: finalPath[i + 1].weight, | ||
weightFromResources: finalPath[i + 1].weightFromResources, | ||
totalConsumed: finalPath[i + 1].totalConsumed, | ||
totalRecovered: finalPath[i + 1].totalRecovered, | ||
} | ||
@@ -256,3 +354,3 @@ : { | ||
const result = this.calculateShortestPathAsLinkedListResult(start, finish, properties); | ||
let finalPath = []; | ||
const finalPath = []; | ||
if (result.finalPath.length > 0) { | ||
@@ -271,2 +369,2 @@ result.finalPath.forEach((item, index) => { | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sYUFBYTtJQUNqQixNQUFNLENBQVM7SUFFZjtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVSxFQUFFLFVBQTBCO1FBQzVDLE1BQU0sT0FBTyxHQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFBRSxNQUFNO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzFCLEdBQUcsR0FBRyxTQUFTLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBQ0QsT0FBTztRQUNM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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sYUFBYTtJQUNqQixNQUFNLENBQW9CO0lBRTFCO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFVLEVBQUUsVUFBcUM7UUFDdkQsTUFBTSxPQUFPLEdBQW9CLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFBRSxNQUFNO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzFCLEdBQUcsR0FBRyxTQUFTLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBQ0QsT0FBTztR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 |
{ | ||
"name": "@aeolun/dijkstra-calculator", | ||
"version": "1.3.2", | ||
"version": "1.4.0", | ||
"description": "Dijkstra calculator for the shortest path in a graph of nodes given a weight.", | ||
@@ -15,8 +15,7 @@ "main": "build/main/index.js", | ||
"devDependencies": { | ||
"@types/node": "^18.15.3", | ||
"@ava/typescript": "^1.1.1", | ||
"@istanbuljs/nyc-config-typescript": "^1.0.1", | ||
"@types/node": "^18.15.3", | ||
"@typescript-eslint/eslint-plugin": "^4.0.1", | ||
"@typescript-eslint/parser": "^4.0.1", | ||
"ava": "5.3.1", | ||
"codecov": "^3.5.0", | ||
@@ -37,4 +36,6 @@ "cspell": "^4.1.0", | ||
"ts-node": "^9.0.0", | ||
"tsx": "^3.14.0", | ||
"typedoc": "^0.24.8", | ||
"typescript": "^4.5.5" | ||
"typescript": "^4.5.5", | ||
"vitest": "^0.34.6" | ||
}, | ||
@@ -50,14 +51,2 @@ "files": [ | ||
], | ||
"ava": { | ||
"failFast": true, | ||
"timeout": "60s", | ||
"typescript": { | ||
"rewritePaths": { | ||
"src/": "build/main/" | ||
} | ||
}, | ||
"files": [ | ||
"!build/module/**" | ||
] | ||
}, | ||
"config": {}, | ||
@@ -82,5 +71,3 @@ "prettier": { | ||
"test:lint": "eslint src --ext .ts", | ||
"test:prettier": "prettier \"src/**/*.ts\" --list-different", | ||
"test:spelling": "cspell \"{README.md,.github/*.md,src/**/*.ts}\"", | ||
"test:unit": "nyc --silent ava", | ||
"test:unit": "vitest", | ||
"check-cli": "./node_modules/.bin/npm-run-all -s test diff-integration-tests check-integration-tests", | ||
@@ -87,0 +74,0 @@ "check-integration-tests": "./node_modules/.bin/npm-run-all -s check-integration-test:*", |
@@ -5,3 +5,3 @@ ![Dijkstra's Calculator](./banner.jpg) | ||
> @aeolun: This is mildly modified from the original to return the final weight for a route | ||
> @aeolun: This is fairly seriously modified from the original to return the final weight for a route, and take into account a variety of limits like fuel | ||
@@ -8,0 +8,0 @@ - **GitHub URL**: https://github.com/getditto/dijkstra-calculator |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
238599
26
3980
24
3
1