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
JavaScript
/* --------------------------------------------------------------------------------------------
* Copyright (c) Jan Dolejsi 2020. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
* ------------------------------------------------------------------------------------------ */
;
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