pick-distinct-colors
Version:
A collection of algorithms and utilities for analyzing and selecting maximally distinct colors. Now includes a unified pickDistinctColors API for easy color selection.
1 lines • 83.5 kB
Source Map (JSON)
{"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","../js/algorithms/exactMaximum.js","../js/algorithms/exactMinimum.js","../js/algorithms/random.js","../js/utils/pickDistinctColors.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\n// Seedable PRNG (mulberry32)\nexport function mulberry32(seed) {\n let t = seed >>> 0;\n return function() {\n t += 0x6D2B79F5;\n let r = Math.imul(t ^ t >>> 15, 1 | t);\n r ^= r + Math.imul(r ^ r >>> 7, 61 | r);\n return ((r ^ r >>> 14) >>> 0) / 4294967296;\n };\n}\n\n/**\n * Generate a random RGB color using the provided PRNG.\n * @param {function} [prng=Math.random] - Optional PRNG function.\n * @returns {number[]} RGB color [r, g, b]\n */\nexport function randomColor(prng = Math.random) {\n return [\n Math.floor(prng() * 256),\n Math.floor(prng() * 256),\n Math.floor(prng() * 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, mulberry32 } 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, seed) {\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 // Use seeded PRNG if seed is provided\n const prng = typeof seed === 'number' ? mulberry32(seed) : Math.random;\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(prng() * 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, mulberry32 } from '../utils/colorUtils.js';\n\nexport function greedySelection(colors, selectCount, seed) {\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 // Use seeded PRNG if seed is provided\n const prng = typeof seed === 'number' ? mulberry32(seed) : Math.random;\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(prng() * 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, mulberry32 } from '../utils/colorUtils.js';\n\nexport function kmeansppSelection(colors, selectCount, seed) {\n console.log('Starting K-means++ calculation...');\n const start = performance.now();\n \n const labColors = colors.map(rgb2lab);\n \n // Use seeded PRNG if seed is provided\n const prng = typeof seed === 'number' ? mulberry32(seed) : Math.random;\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(prng() * 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 = prng() * 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, mulberry32 } 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 // Use seeded PRNG if settings.seed is provided\n const prng = typeof settings.seed === 'number' ? mulberry32(settings.seed) : Math.random;\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(() => prng() - 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(prng() * selectCount);\n const availableIndices = Array.from({length: colors.length}, (_, i) => i)\n .filter(i => !currentSolution.includes(i));\n const newIndex = availableIndices[Math.floor(prng() * 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 || prng() < 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, mulberry32 } 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 // Use seeded PRNG if settings.seed is provided\n const prng = typeof settings.seed === 'number' ? mulberry32(settings.seed) : Math.random;\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(() => prng() - 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(prng() * populationSize));\n const tournament2 = Array(3).fill().map(() => Math.floor(prng() * 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(prng() * 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(prng() * available.length)]);\n }\n \n // Mutation\n if (prng() < mutationRate) {\n const mutationIndex = Math.floor(prng() * selectCount);\n const available = Array.from({length: colors.length}, (_, i) => i)\n .filter(i => !child.includes(i));\n child[mutationIndex] = available[Math.floor(prng() * 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, mulberry32 } 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 // Use seeded PRNG if settings.seed is provided\n const prng = typeof settings.seed === 'number' ? mulberry32(settings.seed) : Math.random;\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(() => prng() - 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 = prng();\n const r2 = prng();\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(prng() * 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, mulberry32 } 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 // Use seeded PRNG if settings.seed is provided\n const prng = typeof settings.seed === 'number' ? mulberry32(settings.seed) : Math.random;\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(prng() * 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 = prng() * 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} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function exactMaximum(colors, selectCount) {\n console.log('Starting Exact Maximum calculation...');\n const start = performance.now();\n \n const labColors = colors.map(rgb2lab);\n let bestSelection = null;\n let bestMaxDistance = -Infinity;\n \n // Helper function to calculate maximum distance between selected colors\n function calculateMaxDistance(selection) {\n let maxDist = -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 maxDist = Math.max(maxDist, dist);\n }\n }\n return maxDist;\n }\n \n // Generate all possible combinations\n function* combinations(arr, r) {\n if (r === 1) {\n for (let i = 0; i < arr.length; i++) {\n yield [arr[i]];\n }\n return;\n }\n \n for (let i = 0; i < arr.length - r + 1; i++) {\n const head = arr[i];\n const remaining = arr.slice(i + 1);\n for (const tail of combinations(remaining, r - 1)) {\n yield [head, ...tail];\n }\n }\n }\n \n // Try all combinations\n const indices = Array.from({length: colors.length}, (_, i) => i);\n for (const selection of combinations(indices, selectCount)) {\n const maxDistance = calculateMaxDistance(selection);\n if (maxDistance > bestMaxDistance) {\n bestMaxDistance = maxDistance;\n bestSelection = selection;\n }\n }\n \n return {\n colors: sortColors(bestSelection.map(i => colors[i])),\n time: performance.now() - start\n };\n} ","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\n\nexport function exactMinimum(colors, selectCount) {\n console.log('Starting Exact Minimum calculation...');\n const start = performance.now();\n \n const labColors = colors.map(rgb2lab);\n let bestSelection = null;\n let bestMinDistance = -Infinity;\n \n // Helper function to calculate minimum distance between selected colors\n function calculateMinDistance(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 all possible combinations\n function* combinations(arr, r) {\n if (r === 1) {\n for (let i = 0; i < arr.length; i++) {\n yield [arr[i]];\n }\n return;\n }\n \n for (let i = 0; i < arr.length - r + 1; i++) {\n const head = arr[i];\n const remaining = arr.slice(i + 1);\n for (const tail of combinations(remaining, r - 1)) {\n yield [head, ...tail];\n }\n }\n }\n \n // Try all combinations\n const indices = Array.from({length: colors.length}, (_, i) => i);\n for (const selection of combinations(indices, selectCount)) {\n const minDistance = calculateMinDistance(selection);\n if (minDistance > bestMinDistance) {\n bestMinDistance = minDistance;\n bestSelection = selection;\n }\n }\n \n return {\n colors: sortColors(bestSelection.map(i => colors[i])),\n time: performance.now() - start\n };\n} ","import { sortColors, mulberry32 } from '../utils/colorUtils.js';\n\nexport function randomSelection(colors, selectCount, seed) {\n console.log('Starting Random Selection...');\n const start = performance.now();\n \n // Use seeded PRNG if seed is provided\n const prng = typeof seed === 'number' ? mulberry32(seed) : Math.random;\n \n // Randomly select indices without replacement\n const indices = Array.from({length: colors.length}, (_, i) => i);\n const selected = [];\n \n for (let i = 0; i < selectCount; i++) {\n const randomIndex = Math.floor(prng() * indices.length);\n selected.push(indices[randomIndex]);\n indices.splice(randomIndex, 1);\n }\n \n return {\n colors: sortColors(selected.map(i => colors[i])),\n time: performance.now() - start\n };\n} ","import { randomColor, mulberry32 } from './colorUtils.js';\nimport { maxSumDistancesGlobal, maxSumDistancesSequential } from '../algorithms/maxSumDistances.js';\nimport { greedySelection } from '../algorithms/greedy.js';\nimport { kmeansppSelection } from '../algorithms/kmeans.js';\nimport { simulatedAnnealing } from '../algorithms/simulatedAnnealing.js';\nimport { geneticAlgorithm } from '../algorithms/genetic.js';\nimport { particleSwarmOptimization } from '../algorithms/particleSwarm.js';\nimport { antColonyOptimization } from '../algorithms/antColony.js';\nimport { tabuSearch } from '../algorithms/tabu.js';\nimport { exactMaximum } from '../algorithms/exactMaximum.js';\nimport { exactMinimum } from '../algorithms/exactMinimum.js';\nimport { randomSelection } from '../algorithms/random.js';\n\nconst ALGORITHMS = {\n greedy: greedySelection,\n maxSumDistancesGlobal,\n maxSumDistancesSequential,\n kmeansppSelection,\n simulatedAnnealing,\n geneticAlgorithm,\n particleSwarmOptimization,\n antColonyOptimization,\n tabuSearch,\n exactMaximum,\n exactMinimum,\n randomSelection,\n};\n\n/**\n * Pick a set of maximally distinct colors using the specified algorithm.\n *\n * Recommended usage (named arguments):\n * pickDistinctColors({ count, algorithm, poolSize, colors, options, seed })\n *\n * @param {object|number} args - Either an options object or the count (legacy positional signature).\n * @param {number} args.count - Number of colors to select.\n * @param {string} [args.algorithm='greedy'] - Algorithm name (see docs for options).\n * @param {number} [args.poolSize] - Number of random colors to generate if no pool is provided (default: Math.max(count * 16, 128)).\n * @param {number[][]} [args.colors] - Optional array of RGB colors to select from.\n * @param {object} [args.options] - Optional algorithm-specific options.\n * @param {number} [args.seed=42] - Seed for deterministic random color generation.\n * @returns {Promise<{colors: number[][], time: number}>} Selected colors and execution time.\n */\nexport async function pickDistinctColors(args, algorithm, poolSize, colors, options, seed) {\n // Support both: pickDistinctColors({ ... }) and pickDistinctColors(count, ...)\n let count, _algorithm, _poolSize, _colors, _options, _seed;\n if (typeof args === 'object' && args !== null && !Array.isArray(args)) {\n count = args.count;\n _algorithm = args.algorithm ?? 'greedy';\n _poolSize = args.poolSize;\n _colors = args.colors;\n _options = args.options;\n _seed = args.seed ?? 42;\n } else {\n // Legacy positional signature\n count = args;\n _algorithm = algorithm ?? 'greedy';\n _poolSize = poolSize;\n _colors = colors;\n _options = options;\n _seed = seed ?? 42;\n }\n if (!ALGORITHMS[_algorithm]) {\n throw new Error(`Unknown algorithm: ${_algorithm}`);\n }\n let pool = _colors;\n if (!Array.isArray(pool) || pool.length === 0) {\n const size = _poolSize || Math.max(count * 16, 128);\n const prng = mulberry32(_seed);\n pool = Array.from({ length: size }, () => randomColor(prng));\n }\n if (_algorithm === 'maxSumDistancesGlobal') {\n return await maxSumDistancesGlobal(pool, count);\n }\n if (_algorithm === 'maxSumDistancesSequential') {\n return maxSumDistancesSequential(pool, count, _seed);\n }\n if (_algorithm === 'greedy') {\n return greedySelection(pool, count, _seed);\n }\n if (_algorithm === 'kmeansppSelection') {\n return kmeansppSelection(pool, count, _seed);\n }\n if (_algorithm === 'simulatedAnnealing') {\n const opts = { ...(_options || {}), seed: _seed };\n return simulatedAnnealing(pool, count, opts);\n }\n if (_algorithm === 'geneticAlgorithm') {\n const opts = { ...(_options || {}), seed: _seed };\n return geneticAlgorithm(pool, count, opts);\n }\n if (_algorithm === 'particleSwarmOptimization') {\n const opts = { ...(_options || {}), seed: _seed };\n return particleSwarmOptimization(pool, count, opts);\n }\n if (_algorithm === 'antColonyOptimization') {\n const opts = { ...(_options || {}), seed: _seed };\n return antColonyOptimization(pool, count, opts);\n }\n if (_algorithm === 'tabuSearch') {\n const opts = { ...(_options || {}), seed: _seed };\n return tabuSearch(pool, count, opts);\n }\n if (_algorithm === 'exactMaximum') {\n return exactMaximum(pool, count);\n }\n if (_algorithm === 'exactMinimum') {\n return exactMinimum(pool, count);\n }\n if (_algorithm === 'randomSelection') {\n return randomSelection(pool, count, _seed);\n }\n throw new Error(`Algorithm not implemented: ${_algorithm}`);\n} "],"names":["rgb2lab","rgb","r","g","b","Math","pow","x","y","z","deltaE","labA","labB","deltaL","deltaA","deltaB","sqrt","mulberry32","seed","t","imul","randomColor","prng","random","floor","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","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","exactMaximum","bestSelection","bestMaxDistance","calculateMaxDistance","combinations","arr","head","remaining","tail","maxDistance","exactMinimum","randomSelection","randomIndex","ALGORITHMS","greedy","pickDistinctColors","args","algorithm","poolSize","options","_algorithm","_poolSize","_colors","_options","_seed","isArray","pool","size","opts"],"mappings":"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"}