solver-core-compute
Version:
Shared solver library for floorplan optimization - compatible with Node.js and Deno
166 lines (142 loc) • 3.17 kB
text/typescript
/**
* Type Definitions for Solver Core
* Shared between Node.js and Deno runtimes
*/
// ===== CORE TYPES =====
export interface Position {
id?: string;
x: number;
y: number;
width: number;
height: number;
rotation?: number;
}
export interface Constraint {
type: 'overlap' | 'boundary' | 'aspect_ratio' | 'proximity' | 'alignment' | 'min_width' | 'min_height' | 'min_clearance' | 'work_triangle';
params: any;
id?: string;
weight?: number;
}
export interface ConstraintResult {
satisfied: boolean;
violations: Array<{
constraint: Constraint;
positions: [Position, Position] | Position[];
penalty: number;
}>;
}
// ===== SOLVER TYPES =====
export interface SolveParams {
positions: Position[];
constraints: Constraint[];
timeLimit?: number;
useParallel?: boolean;
useMultiObjective?: boolean;
}
// Note: Solution type is exported from io-contract.ts
export interface SolveStrategy {
name: string;
timeLimit?: number;
maxIterations?: number;
}
// ===== ALGORITHM TYPES =====
// Simulated Annealing
export interface SAConfig {
initialTemperature: number;
finalTemperature: number;
coolingRate: number;
maxIterations: number;
perturbation: number;
minImprovement: number;
}
export interface SABestSolution {
positions: Position[];
cost: number;
iteration: number;
algorithm: string;
}
// Genetic Algorithm
export interface GAConfig {
populationSize: number;
maxGenerations: number;
mutationRate: number;
crossoverRate: number;
eliteSize: number;
tournamentSize: number;
elitism: boolean;
}
export interface GAIndividual {
chromosome: Position[];
fitness: number;
age: number;
}
export interface GASolution {
positions: Position[];
fitness: number;
generation: number;
algorithm: string;
metrics: {
populationSize: number;
averageFitness: number;
diversity: number;
};
}
// Local Search
export interface LSConfig {
maxIterations: number;
stepSize: number;
perturbation: number;
neighborsPerIteration: number;
restartLimit: number;
tabuListSize?: number;
}
export interface LSNeighbor {
positions: Position[];
cost: number;
moveType: string;
}
export interface LSSolution {
positions: Position[];
cost: number;
iterations: number;
algorithm: string;
metrics: {
improvements: number;
restarts: number;
neighborhoodEvaluations: number;
};
}
// Pareto Front / Multi-Objective
export interface Objective {
name: string;
type: 'minimize' | 'maximize';
weight: number;
evaluator: (solution: Position[]) => number;
}
export interface MultiObjectiveSolution {
positions: Position[];
objectiveValues: number[];
isDominated: boolean;
}
// Optimization
export interface PrunedSearchSpace {
domains: Map<number, PositionDomain>;
reducedConstraints: Constraint[];
}
export interface PositionDomain {
minX: number;
maxX: number;
minY: number;
maxY: number;
}
export interface AdaptiveResolutionConfig {
initialGridSize: number;
maxGridSize: number;
refinementThreshold: number;
}
export interface GridCell {
x: number;
y: number;
size: number;
occupied: boolean;
}