UNPKG

pddl-gantt

Version:

Plan visualization for AI-Planning plans. The package includes HTML components for Gantt, swimlane and line plot visualization of plan originating from AI Planning solvers.

72 lines 3.38 kB
/* -------------------------------------------------------------------------------------------- * Copyright (c) Jan Dolejsi 2020. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. * ------------------------------------------------------------------------------------------ */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.capitalizeStep = exports.capitalize = void 0; const pddl_workspace_1 = require("pddl-workspace"); /** Aligns action and object capitalization with the definitions in the domain and problem */ /* eslint-disable @typescript-eslint/no-use-before-define */ /** * Changes capitalization of the plan action names and object names to match the domain/problem. * This is assuming the case-insensitive PDDL treatment. * @param plan orig plan */ function capitalize(plan) { if (!plan.domain || !plan.problem) { return plan; } const actionNames = plan.domain.getActions().map(a => { var _a; return (_a = a.name) !== null && _a !== void 0 ? _a : ''; }); const capitalizedSteps = plan.steps // eslint-disable-next-line @typescript-eslint/no-non-null-assertion .map(step => capitalizeStep(step, actionNames, plan.problem)); const capitalizedPlan = new pddl_workspace_1.Plan(capitalizedSteps, plan.domain, plan.problem, plan.now, plan.helpfulActions); if (plan.isMetricDefined()) { capitalizedPlan.metric = plan.metric; } return capitalizedPlan; } exports.capitalize = capitalize; function capitalizeStep(step, actionNames, problem) { var _a, _b, _c; let changed = false; let changedActionName = step.getActionName(); if (!actionNames.includes(step.getActionName())) { const matchingDomainAction = actionNames.find(name => name.toLowerCase() === step.getActionName().toLowerCase()); if (matchingDomainAction) { changed = true; changedActionName = matchingDomainAction; } } const changedObjects = []; for (let i = 0; i < step.getObjects().length; i++) { const origObject = step.getObjects()[i]; const objectExists = (_a = problem.getObjectsTypeMap().getTypeOf(origObject)) === null || _a === void 0 ? void 0 : _a.hasObject(origObject); if (!objectExists) { const matchingObject = (_c = (_b = problem.getObjectsTypeMap().getTypeOfCaseInsensitive(origObject)) === null || _b === void 0 ? void 0 : _b.getObjects()) === null || _c === void 0 ? void 0 : _c.find(o => o.toLowerCase() === origObject.toLowerCase()); if (matchingObject) { changed = true; changedObjects[i] = matchingObject; } else { changedObjects[i] = origObject; } } else { changedObjects[i] = origObject; } } if (changed) { let fullActionName = changedActionName; if (changedObjects.length) { fullActionName += ' ' + changedObjects.join(' '); } return new pddl_workspace_1.PlanStep(step.getStartTime(), fullActionName, step.isDurative, step.getDuration(), step.lineIndex, step.commitment, step.getIterations()); } else { return step; } } exports.capitalizeStep = capitalizeStep; //# sourceMappingURL=planCapitalization.js.map