{"version":3,"file":"index.cjs","sources":["../js/utils/colorUtils.js","../js/algorithms/maxSumDistances.js","../js/algorithms/greedy.js","../js/algorithms/kmeans.js","../js/algorithms/simulatedAnnealing.js","../js/algorithms/genetic.js","../js/algorithms/particleSwarm.js","../js/algorithms/antColony.js","../js/algorithms/tabu.js"],"sourcesContent":["export function rgb2lab(rgb) {\n    let r = rgb[0] / 255,\n        g = rgb[1] / 255,\n        b = rgb[2] / 255;\n\n    r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n    g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n    b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n\n    let x = (r * 0.4124 + g * 0.3576 + b * 0.1805) * 100;\n    let y = (r * 0.2126 + g * 0.7152 + b * 0.0722) * 100;\n    let z = (r * 0.0193 + g * 0.1192 + b * 0.9505) * 100;\n\n    x /= 95.047;\n    y /= 100;\n    z /= 108.883;\n\n    x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + 16/116;\n    y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + 16/116;\n    z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + 16/116;\n\n    return [(116 * y) - 16, 500 * (x - y), 200 * (y - z)];\n}\n\nexport function deltaE(labA, labB) {\n    let deltaL = labA[0] - labB[0];\n    let deltaA = labA[1] - labB[1];\n    let deltaB = labA[2] - labB[2];\n    return Math.sqrt(deltaL * deltaL + deltaA * deltaA + deltaB * deltaB);\n}\n\nexport function randomColor() {\n    return [\n        Math.floor(Math.random() * 256),\n        Math.floor(Math.random() * 256),\n        Math.floor(Math.random() * 256)\n    ];\n}\n\nexport function sortColors(colors) {\n    const labColors = colors.map(rgb2lab);\n    const indices = Array.from({length: colors.length}, (_, i) => i);\n    \n    // Sort by L, then a, then b\n    indices.sort((i, j) => {\n        const [L1, a1, b1] = labColors[i];\n        const [L2, a2, b2] = labColors[j];\n        if (L1 !== L2) return L2 - L1;\n        if (a1 !== a2) return a2 - a1;\n        return b2 - b1;\n    });\n    \n    return indices.map(i => colors[i]);\n}\n\nexport function calculateMetrics(colors) {\n    const labColors = colors.map(rgb2lab);\n    let minDist = Infinity;\n    let maxDist = -Infinity;\n    let sumDist = 0;\n    let count = 0;\n    \n    for (let i = 0; i < colors.length - 1; i++) {\n        for (let j = i + 1; j < colors.length; j++) {\n            const dist = deltaE(labColors[i], labColors[j]);\n            minDist = Math.min(minDist, dist);\n            maxDist = Math.max(maxDist, dist);\n            sumDist += dist;\n            count++;\n        }\n    }\n    \n    return {\n        min: minDist,\n        max: maxDist,\n        avg: sumDist / count,\n        sum: sumDist\n    };\n}\n\nexport function analyzeColorDistribution(colors) {\n    if (!colors || colors.length === 0) return 'No colors to analyze';\n    \n    try {\n        const labColors = colors.map(rgb2lab);\n        \n        // Initialize stats with first color\n        const stats = {\n            L: { min: labColors[0][0], max: labColors[0][0], range: [0, 100] },\n            a: { min: labColors[0][1], max: labColors[0][1], range: [-128, 127] },\n            b: { min: labColors[0][2], max: labColors[0][2], range: [-128, 127] }\n        };\n        \n        // Process colors in chunks\n        const chunkSize = 500;\n        for (let i = 1; i < labColors.length; i += chunkSize) {\n            const chunk = labColors.slice(i, i + chunkSize);\n            for (const lab of chunk) {\n                stats.L.min = Math.min(stats.L.min, lab[0]);\n                stats.L.max = Math.max(stats.L.max, lab[0]);\n                stats.a.min = Math.min(stats.a.min, lab[1]);\n                stats.a.max = Math.max(stats.a.max, lab[1]);\n                stats.b.min = Math.min(stats.b.min, lab[2]);\n                stats.b.max = Math.max(stats.b.max, lab[2]);\n            }\n        }\n        \n        // Calculate coverage percentages\n        const coverage = {\n            L: ((stats.L.max - stats.L.min) / (stats.L.range[1] - stats.L.range[0]) * 100).toFixed(1),\n            a: ((stats.a.max - stats.a.min) / (stats.a.range[1] - stats.a.range[0]) * 100).toFixed(1),\n            b: ((stats.b.max - stats.b.min) / (stats.b.range[1] - stats.b.range[0]) * 100).toFixed(1)\n        };\n        \n        return `\n            <strong>Color Space Coverage:</strong><br>\n            Lightness (L*): ${coverage.L}%<br>\n            Green-Red (a*): ${coverage.a}%<br>\n            Blue-Yellow (b*): ${coverage.b}%\n        `;\n    } catch (error) {\n        console.error('Error in analyzeColorDistribution:', error);\n        return 'Error analyzing color distribution';\n    }\n}\n\nexport function rgbToHex(rgb) {\n    return '#' + rgb.map(x => {\n        const hex = x.toString(16);\n        return hex.length === 1 ? '0' + hex : hex;\n    }).join('');\n}\n\nexport function calculateDistanceMatrix(colors) {\n    const labColors = colors.map(rgb2lab);\n    const matrix = [];\n    for (let i = 0; i < colors.length; i++) {\n        matrix[i] = [];\n        for (let j = 0; j < colors.length; j++) {\n            matrix[i][j] = deltaE(labColors[i], labColors[j]);\n        }\n    }\n    return matrix;\n}\n\nexport function findClosestPair(colors) {\n    const labColors = colors.map(rgb2lab);\n    let minDist = Infinity;\n    let closestPair = [0, 1];\n    \n    for (let i = 0; i < colors.length; i++) {\n        for (let j = i + 1; j < colors.length; j++) {\n            const dist = deltaE(labColors[i], labColors[j]);\n            if (dist < minDist) {\n                minDist = dist;\n                closestPair = [i, j];\n            }\n        }\n    }\n    \n    return {\n        colors: [colors[closestPair[0]], colors[closestPair[1]]],\n        distance: minDist\n    };\n} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function maxSumDistancesGlobal(colors, selectCount) {\n    return new Promise((resolve, reject) => {\n        // Create worker code with utility functions in scope\n        const workerCode = `\n            // Import utility functions from parent\n            const rgb2lab = ${rgb2lab.toString()};\n            const deltaE = ${deltaE.toString()};\n            const sortColors = ${sortColors.toString()};\n\n            // Main worker function\n            function maxSumDistancesGlobal(colors, selectCount) {\n                const start = performance.now();\n                const labColors = colors.map(rgb2lab);\n                \n                // Calculate total distances from each color to all other colors\n                const totalDistances = colors.map((_, i) => {\n                    let sum = 0;\n                    for (let j = 0; j < colors.length; j++) {\n                        if (i !== j) {\n                            sum += deltaE(labColors[i], labColors[j]);\n                        }\n                    }\n                    return { index: i, sum };\n                });\n                \n                // Sort colors by their total distance to all other colors\n                totalDistances.sort((a, b) => b.sum - a.sum);\n                \n                // Take the top selectCount colors that have the highest total distances\n                const selectedIndices = totalDistances.slice(0, selectCount).map(item => item.index);\n                const selectedColors = selectedIndices.map(i => colors[i]);\n                \n                return {\n                    colors: sortColors(selectedColors),\n                    time: performance.now() - start\n                };\n            }\n\n            // Worker message handler\n            self.onmessage = function(e) {\n                const { colors, selectCount } = e.data;\n                try {\n                    const result = maxSumDistancesGlobal(colors, selectCount);\n                    self.postMessage({ type: 'complete', result });\n                } catch (error) {\n                    self.postMessage({ type: 'error', error: error.message });\n                }\n            };\n        `;\n\n        // Create blob and worker\n        const blob = new Blob([workerCode], { type: 'application/javascript' });\n        const worker = new Worker(URL.createObjectURL(blob));\n\n        // Set up worker message handlers\n        worker.onmessage = function(e) {\n            if (e.data.type === 'complete') {\n                resolve(e.data.result);\n            } else if (e.data.type === 'error') {\n                reject(new Error(e.data.error));\n            }\n            worker.terminate();\n        };\n\n        worker.onerror = function(error) {\n            reject(error);\n            worker.terminate();\n        };\n\n        // Start the worker\n        worker.postMessage({ colors, selectCount });\n    });\n}\n\nexport function maxSumDistancesSequential(colors, selectCount) {\n    console.log('Starting Maximum Sum (Sequential) calculation...');\n    const start = performance.now();\n    \n    const labColors = colors.map(rgb2lab);\n    const selected = [];\n    const available = Array.from({length: colors.length}, (_, i) => i);\n    \n    // Helper function to calculate total distance from a point to selected points\n    function calculateTotalDistance(index) {\n        return selected.reduce((sum, selectedIndex) => \n            sum + deltaE(labColors[index], labColors[selectedIndex]), 0);\n    }\n    \n    // Select first point randomly\n    const firstIndex = Math.floor(Math.random() * available.length);\n    selected.push(available[firstIndex]);\n    available.splice(firstIndex, 1);\n    \n    // Select remaining points\n    while (selected.length < selectCount) {\n        let bestIndex = 0;\n        let bestDistance = -Infinity;\n        \n        // Find point with maximum sum of distances to selected points\n        for (let i = 0; i < available.length; i++) {\n            const totalDistance = calculateTotalDistance(available[i]);\n            if (totalDistance > bestDistance) {\n                bestDistance = totalDistance;\n                bestIndex = i;\n            }\n        }\n        \n        selected.push(available[bestIndex]);\n        available.splice(bestIndex, 1);\n    }\n    \n    return {\n        colors: sortColors(selected.map(i => colors[i])),\n        time: performance.now() - start\n    };\n} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function greedySelection(colors, selectCount) {\n    console.log('Starting Greedy calculation...');\n    const start = performance.now();\n    \n    const labColors = colors.map(rgb2lab);\n    const selected = [];\n    const available = Array.from({length: colors.length}, (_, i) => i);\n    \n    // Helper function to calculate minimum distance from a point to selected points\n    function calculateMinDistance(index) {\n        if (selected.length === 0) return Infinity;\n        return Math.min(...selected.map(selectedIndex => \n            deltaE(labColors[index], labColors[selectedIndex])\n        ));\n    }\n    \n    // Select first point randomly\n    const firstIndex = Math.floor(Math.random() * available.length);\n    selected.push(available[firstIndex]);\n    available.splice(firstIndex, 1);\n    \n    // Select remaining points\n    while (selected.length < selectCount) {\n        let bestIndex = 0;\n        let bestMinDistance = -Infinity;\n        \n        // Find point with maximum minimum distance to selected points\n        for (let i = 0; i < available.length; i++) {\n            const minDistance = calculateMinDistance(available[i]);\n            if (minDistance > bestMinDistance) {\n                bestMinDistance = minDistance;\n                bestIndex = i;\n            }\n        }\n        \n        selected.push(available[bestIndex]);\n        available.splice(bestIndex, 1);\n    }\n    \n    return {\n        colors: sortColors(selected.map(i => colors[i])),\n        time: performance.now() - start\n    };\n} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function kmeansppSelection(colors, selectCount) {\n    console.log('Starting K-means++ calculation...');\n    const start = performance.now();\n    \n    const labColors = colors.map(rgb2lab);\n    \n    // Helper function to find minimum distance to existing centers\n    function minDistanceToCenters(point, centers) {\n        if (centers.length === 0) return Infinity;\n        return Math.min(...centers.map(center => \n            deltaE(labColors[point], labColors[center])\n        ));\n    }\n    \n    // Select initial center randomly\n    const selected = [Math.floor(Math.random() * colors.length)];\n    \n    // Select remaining centers using k-means++ initialization\n    while (selected.length < selectCount) {\n        const distances = Array.from({length: colors.length}, (_, i) => {\n            if (selected.includes(i)) return 0;\n            const dist = minDistanceToCenters(i, selected);\n            return dist * dist; // Square distances for k-means++\n        });\n        \n        const sum = distances.reduce((a, b) => a + b, 0);\n        let random = Math.random() * sum;\n        let selectedIndex = 0;\n        \n        while (random > 0 && selectedIndex < distances.length) {\n            if (!selected.includes(selectedIndex)) {\n                random -= distances[selectedIndex];\n            }\n            if (random > 0) selectedIndex++;\n        }\n        \n        selected.push(selectedIndex);\n    }\n    \n    return {\n        colors: sortColors(selected.map(i => colors[i])),\n        time: performance.now() - start\n    };\n} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function simulatedAnnealing(colors, selectCount, settings = {}) {\n    console.log('Starting Simulated Annealing calculation...');\n    const start = performance.now();\n    \n    const labColors = colors.map(rgb2lab);\n    const maxIterations = 10000;\n    const initialTemp = settings.initialTemp ?? 1000;\n    const coolingRate = settings.coolingRate ?? 0.995;\n    const minTemp = settings.minTemp ?? 0.1;\n    \n    // Helper function to calculate minimum distance between selected colors\n    function calculateFitness(selection) {\n        let minDist = Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                minDist = Math.min(minDist, dist);\n            }\n        }\n        return minDist;\n    }\n    \n    // Generate initial solution\n    let currentSolution = Array.from({length: colors.length}, (_, i) => i)\n        .sort(() => Math.random() - 0.5)\n        .slice(0, selectCount);\n    let currentFitness = calculateFitness(currentSolution);\n    \n    let bestSolution = [...currentSolution];\n    let bestFitness = currentFitness;\n    \n    let temperature = initialTemp;\n    \n    // Main loop\n    for (let i = 0; i < maxIterations && temperature > minTemp; i++) {\n        // Generate neighbor by swapping one selected color with an unselected one\n        const neighborSolution = [...currentSolution];\n        const swapIndex = Math.floor(Math.random() * selectCount);\n        const availableIndices = Array.from({length: colors.length}, (_, i) => i)\n            .filter(i => !currentSolution.includes(i));\n        const newIndex = availableIndices[Math.floor(Math.random() * availableIndices.length)];\n        neighborSolution[swapIndex] = newIndex;\n        \n        const neighborFitness = calculateFitness(neighborSolution);\n        \n        // Decide if we should accept the neighbor\n        const delta = neighborFitness - currentFitness;\n        if (delta > 0 || Math.random() < Math.exp(delta / temperature)) {\n            currentSolution = neighborSolution;\n            currentFitness = neighborFitness;\n            \n            if (currentFitness > bestFitness) {\n                bestSolution = [...currentSolution];\n                bestFitness = currentFitness;\n            }\n        }\n        \n        temperature *= coolingRate;\n    }\n    \n    return {\n        colors: sortColors(bestSolution.map(i => colors[i])),\n        time: performance.now() - start\n    };\n} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function geneticAlgorithm(colors, selectCount, settings = {}) {\n    console.log('Starting Genetic Algorithm calculation...');\n    const start = performance.now();\n    \n    const labColors = colors.map(rgb2lab);\n    const populationSize = settings.populationSize ?? 100;\n    const generations = settings.generations ?? 100;\n    const mutationRate = settings.mutationRate ?? 0.1;\n    \n    // Helper function to calculate minimum distance between selected colors\n    function calculateFitness(selection) {\n        let minDist = Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                minDist = Math.min(minDist, dist);\n            }\n        }\n        return minDist;\n    }\n    \n    // Generate initial population\n    let population = Array(populationSize).fill().map(() => \n        Array.from({length: colors.length}, (_, i) => i)\n            .sort(() => Math.random() - 0.5)\n            .slice(0, selectCount)\n    );\n    \n    let bestSolution = population[0];\n    let bestFitness = calculateFitness(bestSolution);\n    \n    // Main loop\n    for (let generation = 0; generation < generations; generation++) {\n        // Calculate fitness for each solution\n        const fitnesses = population.map(calculateFitness);\n        \n        // Update best solution\n        const maxFitnessIndex = fitnesses.indexOf(Math.max(...fitnesses));\n        if (fitnesses[maxFitnessIndex] > bestFitness) {\n            bestSolution = [...population[maxFitnessIndex]];\n            bestFitness = fitnesses[maxFitnessIndex];\n        }\n        \n        // Create new population through selection and crossover\n        const newPopulation = [];\n        \n        while (newPopulation.length < populationSize) {\n            // Tournament selection\n            const tournament1 = Array(3).fill().map(() => Math.floor(Math.random() * populationSize));\n            const tournament2 = Array(3).fill().map(() => Math.floor(Math.random() * populationSize));\n            \n            const parent1 = population[tournament1.reduce((a, b) => \n                fitnesses[a] > fitnesses[b] ? a : b)];\n            const parent2 = population[tournament2.reduce((a, b) => \n                fitnesses[a] > fitnesses[b] ? a : b)];\n            \n            // Crossover\n            const crossoverPoint = Math.floor(Math.random() * selectCount);\n            const child = [...new Set([\n                ...parent1.slice(0, crossoverPoint),\n                ...parent2.slice(crossoverPoint)\n            ])];\n            \n            // Fill up with random colors if needed\n            while (child.length < selectCount) {\n                const available = Array.from({length: colors.length}, (_, i) => i)\n                    .filter(i => !child.includes(i));\n                child.push(available[Math.floor(Math.random() * available.length)]);\n            }\n            \n            // Mutation\n            if (Math.random() < mutationRate) {\n                const mutationIndex = Math.floor(Math.random() * selectCount);\n                const available = Array.from({length: colors.length}, (_, i) => i)\n                    .filter(i => !child.includes(i));\n                child[mutationIndex] = available[Math.floor(Math.random() * available.length)];\n            }\n            \n            newPopulation.push(child);\n        }\n        \n        population = newPopulation;\n    }\n    \n    return {\n        colors: sortColors(bestSolution.map(i => colors[i])),\n        time: performance.now() - start\n    };\n} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function particleSwarmOptimization(colors, selectCount, settings = {}) {\n    console.log('Starting Particle Swarm Optimization...');\n    const start = performance.now();\n    \n    const labColors = colors.map(rgb2lab);\n    const numParticles = settings.numParticles ?? 30;\n    const maxIterations = settings.psoIterations ?? 100;\n    const w = settings.inertiaWeight ?? 0.7;  // inertia weight\n    const c1 = settings.cognitiveWeight ?? 1.5; // cognitive weight\n    const c2 = settings.socialWeight ?? 1.5; // social weight\n    \n    // Helper function to calculate minimum distance between selected colors\n    function calculateFitness(selection) {\n        let minDist = Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                minDist = Math.min(minDist, dist);\n            }\n        }\n        return minDist;\n    }\n    \n    // Initialize particles\n    const particles = Array(numParticles).fill().map(() => ({\n        position: Array.from({length: colors.length}, (_, i) => i)\n            .sort(() => Math.random() - 0.5)\n            .slice(0, selectCount),\n        velocity: Array(selectCount).fill(0),\n        bestPosition: null,\n        bestFitness: -Infinity\n    }));\n    \n    let globalBestPosition = null;\n    let globalBestFitness = -Infinity;\n    \n    // Main loop\n    for (let iteration = 0; iteration < maxIterations; iteration++) {\n        for (const particle of particles) {\n            // Calculate fitness\n            const fitness = calculateFitness(particle.position);\n            \n            // Update particle's best\n            if (fitness > particle.bestFitness) {\n                particle.bestPosition = [...particle.position];\n                particle.bestFitness = fitness;\n                \n                // Update global best\n                if (fitness > globalBestFitness) {\n                    globalBestPosition = [...particle.position];\n                    globalBestFitness = fitness;\n                }\n            }\n            \n            // Update velocity and position\n            for (let i = 0; i < selectCount; i++) {\n                const r1 = Math.random();\n                const r2 = Math.random();\n                \n                particle.velocity[i] = Math.floor(\n                    w * particle.velocity[i] +\n                    c1 * r1 * (particle.bestPosition[i] - particle.position[i]) +\n                    c2 * r2 * (globalBestPosition[i] - particle.position[i])\n                );\n                \n                // Apply velocity (swap with another color)\n                if (particle.velocity[i] !== 0) {\n                    const available = Array.from({length: colors.length}, (_, i) => i)\n                        .filter(j => !particle.position.includes(j));\n                    if (available.length > 0) {\n                        const swapIndex = Math.floor(Math.random() * available.length);\n                        particle.position[i] = available[swapIndex];\n                    }\n                }\n            }\n        }\n    }\n    \n    return {\n        colors: sortColors(globalBestPosition.map(i => colors[i])),\n        time: performance.now() - start\n    };\n} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function antColonyOptimization(colors, selectCount, settings = {}) {\n    console.log('Starting Ant Colony Optimization...');\n    const start = performance.now();\n    \n    const labColors = colors.map(rgb2lab);\n    const numAnts = settings.numAnts ?? 20;\n    const maxIterations = settings.acoIterations ?? 100;\n    const evaporationRate = settings.evaporationRate ?? 0.1;\n    const alpha = settings.pheromoneImportance ?? 1; // pheromone importance\n    const beta = settings.heuristicImportance ?? 2;  // heuristic importance\n    \n    // Initialize pheromone trails\n    const pheromones = Array(colors.length).fill(1);\n    \n    // Calculate heuristic information (distances between colors)\n    const distances = Array(colors.length).fill().map(() => Array(colors.length));\n    for (let i = 0; i < colors.length; i++) {\n        for (let j = i + 1; j < colors.length; j++) {\n            const distance = deltaE(labColors[i], labColors[j]);\n            distances[i][j] = distance;\n            distances[j][i] = distance;\n        }\n    }\n    \n    let bestSolution = null;\n    let bestFitness = -Infinity;\n    \n    // Main ACO loop\n    for (let iteration = 0; iteration < maxIterations; iteration++) {\n        // Solutions found by ants in this iteration\n        const solutions = [];\n        \n        // Each ant constructs a solution\n        for (let ant = 0; ant < numAnts; ant++) {\n            const available = Array.from({length: colors.length}, (_, i) => i);\n            const solution = [];\n            \n            // Randomly select first color\n            const firstIndex = Math.floor(Math.random() * available.length);\n            solution.push(available[firstIndex]);\n            available.splice(firstIndex, 1);\n            \n            // Select remaining colors\n            while (solution.length < selectCount) {\n                // Calculate probabilities for each available color\n                const probabilities = available.map(i => {\n                    const pheromone = Math.pow(pheromones[i], alpha);\n                    const minDist = Math.min(...solution.map(j => distances[i][j]));\n                    const heuristic = Math.pow(minDist, beta);\n                    return pheromone * heuristic;\n                });\n                \n                // Select next color using roulette wheel selection\n                const total = probabilities.reduce((a, b) => a + b, 0);\n                let random = Math.random() * total;\n                let selectedIndex = 0;\n                \n                while (random > 0 && selectedIndex < probabilities.length) {\n                    random -= probabilities[selectedIndex];\n                    if (random > 0) selectedIndex++;\n                }\n                \n                solution.push(available[selectedIndex]);\n                available.splice(selectedIndex, 1);\n            }\n            \n            solutions.push(solution);\n        }\n        \n        // Evaluate solutions and update best\n        for (const solution of solutions) {\n            const fitness = Math.min(...solution.map((i, idx) => \n                solution.slice(idx + 1).map(j => \n                    deltaE(labColors[i], labColors[j])\n                )\n            ).flat());\n            \n            if (fitness > bestFitness) {\n                bestFitness = fitness;\n                bestSolution = solution;\n            }\n        }\n        \n        // Update pheromones\n        for (let i = 0; i < pheromones.length; i++) {\n            pheromones[i] *= (1 - evaporationRate);\n        }\n        \n        // Add new pheromones from solutions\n        for (const solution of solutions) {\n            const deposit = 1 / solution.length;\n            for (const i of solution) {\n                pheromones[i] += deposit;\n            }\n        }\n    }\n    \n    return {\n        colors: sortColors(bestSolution.map(i => colors[i])),\n        time: performance.now() - start\n    };\n} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function tabuSearch(colors, selectCount, settings = {}) {\n    console.log('Starting Tabu Search...');\n    const start = performance.now();\n    \n    const labColors = colors.map(rgb2lab);\n    const maxIterations = settings.tabuIterations ?? 1000;\n    const tabuTenure = settings.tabuTenure ?? 5;\n    \n    // Helper function to calculate minimum distance between selected colors\n    function calculateFitness(selection) {\n        let minDist = Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                minDist = Math.min(minDist, dist);\n            }\n        }\n        return minDist;\n    }\n    \n    // Initialize solution\n    let current = Array.from({length: selectCount}, (_, i) => i);\n    let best = [...current];\n    let bestFitness = calculateFitness(best);\n    \n    // Tabu list implementation using a Map to store move expiration\n    const tabuList = new Map();\n    \n    // Generate move key for tabu list\n    function getMoveKey(oldColor, newColor) {\n        return `${oldColor}-${newColor}`;\n    }\n    \n    for (let iteration = 0; iteration < maxIterations; iteration++) {\n        let bestNeighborSolution = null;\n        let bestNeighborFitness = -Infinity;\n        \n        // Examine all possible moves\n        for (let i = 0; i < selectCount; i++) {\n            for (let j = 0; j < colors.length; j++) {\n                if (!current.includes(j)) {\n                    const moveKey = getMoveKey(current[i], j);\n                    const neighbor = [...current];\n                    neighbor[i] = j;\n                    \n                    const fitness = calculateFitness(neighbor);\n                    \n                    // Accept if better than current best neighbor and not tabu\n                    // or if satisfies aspiration criterion (better than global best)\n                    if ((fitness > bestNeighborFitness && \n                         (!tabuList.has(moveKey) || tabuList.get(moveKey) <= iteration)) ||\n                        fitness > bestFitness) {\n                        bestNeighborSolution = neighbor;\n                        bestNeighborFitness = fitness;\n                    }\n                }\n            }\n        }\n        \n        if (!bestNeighborSolution) break;\n        \n        // Update current solution\n        current = bestNeighborSolution;\n        \n        // Update best solution if improved\n        if (bestNeighborFitness > bestFitness) {\n            best = [...current];\n            bestFitness = bestNeighborFitness;\n        }\n        \n        // Update tabu list\n        for (let i = 0; i < selectCount; i++) {\n            const moveKey = getMoveKey(current[i], best[i]);\n            tabuList.set(moveKey, iteration + tabuTenure);\n        }\n        \n        // Clean expired tabu moves\n        for (const [move, expiration] of tabuList.entries()) {\n            if (expiration <= iteration) {\n                tabuList.delete(move);\n            }\n        }\n    }\n    \n    return {\n        colors: sortColors(best.map(i => colors[i])),\n        time: performance.now() - start\n    };\n} "],"names":["rgb2lab","rgb","r","g","b","Math","pow","x","y","z","deltaE","labA","labB","deltaL","deltaA","deltaB","sqrt","sortColors","colors","labColors","map","indices","Array","from","length","_","i","sort","j","L1","a1","b1","L2","a2","b2","calculateMetrics","minDist","Infinity","maxDist","sumDist","count","dist","min","max","avg","sum","analyzeColorDistribution","stats","L","range","a","chunkSize","chunk","slice","lab","coverage","toFixed","error","console","findClosestPair","closestPair","distance","maxSumDistancesGlobal","selectCount","Promise","resolve","reject","workerCode","toString","blob","Blob","type","worker","Worker","URL","createObjectURL","onmessage","e","data","result","Error","terminate","onerror","postMessage","maxSumDistancesSequential","log","start","performance","now","selected","available","calculateTotalDistance","index","reduce","selectedIndex","firstIndex","floor","random","push","splice","bestIndex","bestDistance","totalDistance","time","greedySelection","calculateMinDistance","bestMinDistance","minDistance","kmeansppSelection","minDistanceToCenters","point","centers","center","distances","includes","simulatedAnnealing","settings","maxIterations","initialTemp","coolingRate","minTemp","calculateFitness","selection","currentSolution","currentFitness","bestSolution","bestFitness","temperature","neighborSolution","swapIndex","availableIndices","filter","newIndex","neighborFitness","delta","exp","geneticAlgorithm","populationSize","generations","mutationRate","population","fill","generation","fitnesses","maxFitnessIndex","indexOf","newPopulation","tournament1","tournament2","parent1","parent2","crossoverPoint","child","Set","mutationIndex","particleSwarmOptimization","numParticles","psoIterations","w","inertiaWeight","c1","cognitiveWeight","c2","socialWeight","particles","position","velocity","bestPosition","globalBestPosition","globalBestFitness","iteration","particle","fitness","r1","r2","antColonyOptimization","numAnts","acoIterations","evaporationRate","alpha","pheromoneImportance","beta","heuristicImportance","pheromones","solutions","ant","solution","probabilities","pheromone","heuristic","total","idx","flat","deposit","tabuSearch","tabuIterations","tabuTenure","current","best","tabuList","Map","getMoveKey","oldColor","newColor","bestNeighborSolution","bestNeighborFitness","moveKey","neighbor","has","get","set","move","expiration","entries","delete"],"mappings":"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"}