/** * @file src/expressions.ts * @description Core expression classes for building optimization models * * Defines the building blocks for programmatic model construction: * - Variable: Decision variable with cost and bounds * - IntegerVariable: Variable restricted to integer values * - SlackVariable: Internal variable for constraint conversion * - Term: Variable-coefficient pair in a constraint * - Constraint: Linear inequality (<=, >=) with terms * - Equality: Equality constraint (=) represented as two inequalities * * These classes support the fluent API: model.smallerThan(10).addTerm(2, x) */ import type Model from "./model"; export type Priority = number | "required" | "strong" | "medium" | "weak"; export declare class Variable { id: string; cost: number; index: number; value: number; priority: number; isInteger?: true; isSlack?: true; constructor(id: string, cost: number, index: number, priority: number); } export declare class IntegerVariable extends Variable { isInteger: true; constructor(id: string, cost: number, index: number, priority: number); } export declare class SlackVariable extends Variable { isSlack: true; constructor(id: string, index: number); } export declare class Term { variable: Variable; coefficient: number; constructor(variable: Variable, coefficient: number); } type RelaxationModel = Model & { addVariable(cost: number, id: string, isInteger?: boolean, isUnrestricted?: boolean, priority?: number): Variable; }; export declare function createRelaxationVariable(model: RelaxationModel, weight?: number, priority?: Priority): Variable | null; export declare class Constraint { slack: SlackVariable; index: number; model: RelaxationModel; rhs: number; isUpperBound: boolean; terms: Term[]; termsByVarIndex: Record; relaxation: Variable | null; constructor(rhs: number, isUpperBound: boolean, index: number, model: RelaxationModel); addTerm(coefficient: number, variable: Variable): this; removeTerm(_term: Term): this; setRightHandSide(newRhs: number): this; setVariableCoefficient(newCoefficient: number, variable: Variable): this | void; relax(weight?: number, priority?: Priority): void; _relax(relaxationVariable: Variable | null): void; } export declare class Equality { upperBound: Constraint; lowerBound: Constraint; model: RelaxationModel; rhs: number; relaxation: Variable | null; isEquality: true; constructor(constraintUpper: Constraint, constraintLower: Constraint); addTerm(coefficient: number, variable: Variable): this; removeTerm(_term: Term): this; setRightHandSide(rhs: number): void; relax(weight?: number, priority?: Priority): void; } export declare class Numeral { value: number; constructor(value: number); } export {};