import type { Blackboard } from "./BehaviorTree";
export type UtilityCurve = "linear" | "inverse" | "quadratic" | "cubic" | "boolean" | "logistic";
export type UtilityScoring = "multiply" | "average" | "min" | "max" | "sum";
export interface UtilityContext {
    readonly blackboard?: Blackboard;
    readonly values?: Record<string, number | boolean | string | undefined>;
}
export interface UtilityConsiderationOptions {
    readonly name: string;
    readonly input: (context: UtilityContext) => number | boolean;
    readonly curve?: UtilityCurve;
    readonly weight?: number;
    readonly threshold?: number;
    readonly slope?: number;
}
export interface UtilityActionOptions {
    readonly name: string;
    readonly considerations: readonly UtilityConsideration[];
    readonly scoring?: UtilityScoring;
    readonly baseScore?: number;
    readonly enabled?: boolean;
}
export interface UtilityActionScore {
    readonly action: string;
    readonly score: number;
    readonly considerationScores: Record<string, number>;
}
export declare class UtilityConsideration {
    readonly name: string;
    readonly curve: UtilityCurve;
    readonly weight: number;
    readonly threshold: number;
    readonly slope: number;
    private readonly input;
    constructor(options: UtilityConsiderationOptions);
    evaluate(context: UtilityContext): number;
}
export declare class UtilityAction {
    readonly name: string;
    readonly considerations: readonly UtilityConsideration[];
    readonly scoring: UtilityScoring;
    readonly baseScore: number;
    enabled: boolean;
    constructor(options: UtilityActionOptions);
    score(context: UtilityContext): UtilityActionScore;
}
export declare class UtilityAI {
    private readonly actions;
    addAction(action: UtilityAction): void;
    removeAction(name: string): boolean;
    setActionEnabled(name: string, enabled: boolean): void;
    evaluate(context: UtilityContext): readonly UtilityActionScore[];
    select(context: UtilityContext): UtilityActionScore | undefined;
}
//# sourceMappingURL=UtilityAI.d.ts.map