{"version":3,"file":"ml-direct.js","sources":["../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheck.js","../node_modules/ml-spectra-processing/lib-esm/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xNorm.js","../src/util/antiLowerConvexHull.js","../src/index.js"],"sourcesContent":["const toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array).\n *\n * @param {any} value - Object to check.\n * @returns {boolean} True if the object is an array.\n */\nexport function isAnyArray(value) {\n    return toString.call(value).endsWith('Array]');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if input is of type array\n *\n * @param input - input\n */\nexport function xCheck(input, options = {}) {\n    const { minLength } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    //@ts-expect-error we already checked that input is an array\n    if (minLength && input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n *\n * @param array - array of numbers\n * @param target - target\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from './xFindClosestIndex';\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n *\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex, from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the maximal value of an array of values\n *\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the minimal value of an array of values\n *\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","/**\n * This function calculate the norm of a vector\n *\n * @example xNorm([3, 4]) -> 5\n * @param array - array\n * @returns - calculated norm\n */\nexport function xNorm(array) {\n    let result = 0;\n    for (const element of array) {\n        result += element ** 2;\n    }\n    return Math.sqrt(result);\n}\n//# sourceMappingURL=xNorm.js.map","/**\n * Preparata, F. P., & Shamos, M. I. (2012). Computational geometry: an introduction. Springer Science & Business Media.\n * @param {Array} x - The array with x coordinates of the points.\n * @param {Array} y - The array with y coordinates of the points.\n * @return {Array} The indices of the points of anticlockwise lower convex hull\n * @private\n */\nexport default function antiLowerConvexHull(x, y) {\n  if (x.length !== y.length) {\n    throw new RangeError('X and Y vectors has different dimensions');\n  }\n\n  const nbPoints = x.length - 1;\n  if (nbPoints === 0) return [0];\n  if (nbPoints === 1) return [0, 1];\n\n  let currentPoint = 0;\n  let result = new Array(x.length).fill(true);\n  while (true) {\n    const a = currentPoint;\n    const b = moveOn(currentPoint, nbPoints, result);\n    const c = moveOn(moveOn(currentPoint, nbPoints, result), nbPoints, result);\n\n    const det =\n      x[c] * (y[a] - y[b]) + x[a] * (y[b] - y[c]) + x[b] * (y[c] - y[a]);\n\n    const leftTurn = det >= 0;\n\n    if (leftTurn) {\n      currentPoint = b;\n    } else {\n      result[b] = false;\n      currentPoint = moveBack(currentPoint, nbPoints, result);\n    }\n    if (c === nbPoints) break;\n  }\n\n  return result\n    .map((item, index) => (item === false ? false : index))\n    .filter((item) => item !== false);\n}\n\n/**\n * @param {number} currentPoint - The index of the current point to make the move\n * @param {number} nbPoints - The total number of points in the array\n * @param {Array} vector - The array with the points\n * @return {number} the index of the point after the move\n * @private\n */\n\nfunction moveBack(currentPoint, nbPoints, vector) {\n  let counter = currentPoint - 1;\n  while (vector[counter] === false) counter--;\n  return currentPoint === 0 ? nbPoints : counter;\n}\n\nfunction moveOn(currentPoint, nbPoints, vector) {\n  let counter = currentPoint + 1;\n  while (vector[counter] === false) counter++;\n  return currentPoint === nbPoints ? 0 : counter;\n}\n","import { xNorm, xMaxValue, xMinValue } from 'ml-spectra-processing';\n\nimport antiLowerConvexHull from './util/antiLowerConvexHull';\n\n/**\n * Performs a global optimization of required parameters\n * It will return an object containing:\n * - `minFunctionValue`: The minimum value found for the objetive function\n * - `optima`: Array of Array of values for all the variables where the function reach its minimum value\n * - `iterations`: Number of iterations performed in the process\n * - `finalState`: Internal state allowing to continue optimization (initialState)\n * @param {function} objectiveFunction Function to evaluate. It should accept an array of variables\n * @param {Array} lowerBoundaries Array containing for each variable the lower boundary\n * @param {Array} upperBoundaries Array containing for each variable the higher boundary\n * @param {Object} [options={}]\n * @param {number} [options.iterations] - Number of iterations.\n * @param {number} [options.epsilon] - Tolerance to choose best current value.\n * @param {number} [options.tolerance] - Minimum tollerance of the function.\n * @param {number} [options.tolerance2] - Minimum tollerance of the function.\n * @param {Object} [options.initialState={}}] - finalState of previous optimization.\n * @return {Object} {finalState, iterations, minFunctionValue}\n * */\n\nexport default function direct(\n  objectiveFunction,\n  lowerBoundaries,\n  upperBoundaries,\n  options = {},\n) {\n  const {\n    iterations = 50,\n    epsilon = 1e-4,\n    tolerance = 1e-16,\n    tolerance2 = 1e-12,\n    initialState = {},\n  } = options;\n\n  if (\n    objectiveFunction === undefined ||\n    lowerBoundaries === undefined ||\n    upperBoundaries === undefined\n  ) {\n    throw new RangeError('There is something undefined');\n  }\n\n  lowerBoundaries = new Float64Array(lowerBoundaries);\n  upperBoundaries = new Float64Array(upperBoundaries);\n\n  if (lowerBoundaries.length !== upperBoundaries.length) {\n    throw new Error(\n      'Lower bounds and Upper bounds for x are not of the same length',\n    );\n  }\n\n  //-------------------------------------------------------------------------\n  //                        STEP 1. Initialization\n  //-------------------------------------------------------------------------\n  let n = lowerBoundaries.length;\n  let diffBorders = upperBoundaries.map((x, i) => x - lowerBoundaries[i]);\n\n  let {\n    numberOfRectangles = 0,\n    totalIterations = 0,\n    unitaryCoordinates = [new Float64Array(n).fill(0.5)],\n    middlePoint = new Float64Array(n).map((value, index) => {\n      return (\n        lowerBoundaries[index] +\n        unitaryCoordinates[0][index] * diffBorders[index]\n      );\n    }),\n    bestCurrentValue = objectiveFunction(middlePoint),\n    fCalls = 1,\n    smallerDistance = 0,\n    edgeSizes = [new Float64Array(n).fill(0.5)],\n    diagonalDistances = [Math.sqrt(n * Math.pow(0.5, 2))],\n    functionValues = [bestCurrentValue],\n    differentDistances = diagonalDistances,\n    smallerValuesByDistance = [bestCurrentValue],\n    choiceLimit = undefined,\n  } = initialState;\n  if (\n    initialState.originalCoordinates &&\n    initialState.originalCoordinates.length > 0\n  ) {\n    bestCurrentValue = xMinValue(functionValues);\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n    );\n\n    unitaryCoordinates = initialState.originalCoordinates.slice();\n    for (let j = 0; j < unitaryCoordinates.length; j++) {\n      for (let i = 0; i < lowerBoundaries.length; i++) {\n        unitaryCoordinates[j][i] =\n          (unitaryCoordinates[j][i] - lowerBoundaries[i]) / diffBorders[i];\n      }\n    }\n  }\n\n  let iteration = 0;\n  //-------------------------------------------------------------------------\n  //                          Iteration loop\n  //-------------------------------------------------------------------------\n\n  while (iteration < iterations) {\n    //----------------------------------------------------------------------\n    //  STEP 2. Identify the set S of all potentially optimal rectangles\n    //----------------------------------------------------------------------\n\n    let S1 = [];\n    let idx = differentDistances.findIndex(\n      // eslint-disable-next-line no-loop-func\n      (e) => e === diagonalDistances[smallerDistance],\n    );\n    let counter = 0;\n    for (let i = idx; i < differentDistances.length; i++) {\n      for (let f = 0; f < functionValues.length; f++) {\n        if (\n          (functionValues[f] === smallerValuesByDistance[i]) &\n          (diagonalDistances[f] === differentDistances[i])\n        ) {\n          S1[counter++] = f;\n        }\n      }\n    }\n\n    let optimumValuesIndex, S3;\n    if (differentDistances.length - idx > 1) {\n      let a1 = diagonalDistances[smallerDistance];\n      let b1 = functionValues[smallerDistance];\n      let a2 = differentDistances[differentDistances.length - 1];\n      let b2 = smallerValuesByDistance[differentDistances.length - 1];\n      let slope = (b2 - b1) / (a2 - a1);\n      let constant = b1 - slope * a1;\n      let S2 = new Uint32Array(counter);\n      counter = 0;\n      for (let i = 0; i < S2.length; i++) {\n        let j = S1[i];\n        if (\n          functionValues[j] <=\n          slope * diagonalDistances[j] + constant + tolerance2\n        ) {\n          S2[counter++] = j;\n        }\n      }\n\n      let xHull = [];\n      let yHull = [];\n      for (let i = 0; i < counter; i++) {\n        xHull.push(diagonalDistances[S2[i]]);\n        yHull.push(functionValues[S2[i]]);\n      }\n\n      let lowerIndexHull = antiLowerConvexHull(xHull, yHull);\n\n      S3 = [];\n      for (let i = 0; i < lowerIndexHull.length; i++) {\n        S3.push(S2[lowerIndexHull[i]]);\n      }\n    } else {\n      S3 = S1.slice(0, counter);\n    }\n    optimumValuesIndex = S3;\n    //--------------------------------------------------------------\n    // STEPS 3,5: Select any rectangle j in S\n    //--------------------------------------------------------------\n    for (let k = 0; k < optimumValuesIndex.length; k++) {\n      let j = optimumValuesIndex[k];\n      let largerSide = xMaxValue(edgeSizes[j]);\n      let largeSidesIndex = new Uint32Array(edgeSizes[j].length);\n      counter = 0;\n      for (let i = 0; i < edgeSizes[j].length; i++) {\n        if (Math.abs(edgeSizes[j][i] - largerSide) < tolerance) {\n          largeSidesIndex[counter++] = i;\n        }\n      }\n      let delta = (2 * largerSide) / 3;\n      let bestFunctionValues = [];\n      for (let r = 0; r < counter; r++) {\n        let i = largeSidesIndex[r];\n        let firstMiddleCenter = unitaryCoordinates[j].slice();\n        let secondMiddleCenter = unitaryCoordinates[j].slice();\n        firstMiddleCenter[i] += delta;\n        secondMiddleCenter[i] -= delta;\n        let firstMiddleValue = new Float64Array(firstMiddleCenter.length);\n        let secondMiddleValue = new Float64Array(secondMiddleCenter.length);\n        for (let i = 0; i < firstMiddleCenter.length; i++) {\n          firstMiddleValue[i] =\n            lowerBoundaries[i] + firstMiddleCenter[i] * diffBorders[i];\n          secondMiddleValue[i] =\n            lowerBoundaries[i] + secondMiddleCenter[i] * diffBorders[i];\n        }\n        let firstMinValue = objectiveFunction(firstMiddleValue);\n        let secondMinValue = objectiveFunction(secondMiddleValue);\n        fCalls += 2;\n        bestFunctionValues.push({\n          minValue: Math.min(firstMinValue, secondMinValue),\n          index: r,\n        });\n        // [Math.min(firstMinValue, secondMinValue), r];\n        unitaryCoordinates.push(firstMiddleCenter, secondMiddleCenter);\n        functionValues.push(firstMinValue, secondMinValue);\n      }\n\n      let b = bestFunctionValues.sort((a, b) => a.minValue - b.minValue);\n      for (let r = 0; r < counter; r++) {\n        let u = largeSidesIndex[b[r].index];\n        let ix1 = numberOfRectangles + 2 * (b[r].index + 1) - 1;\n        let ix2 = numberOfRectangles + 2 * (b[r].index + 1);\n        edgeSizes[j][u] = delta / 2;\n        edgeSizes[ix1] = edgeSizes[j].slice();\n        edgeSizes[ix2] = edgeSizes[j].slice();\n        diagonalDistances[j] = xNorm(edgeSizes[j]);\n        diagonalDistances[ix1] = diagonalDistances[j];\n        diagonalDistances[ix2] = diagonalDistances[j];\n      }\n      numberOfRectangles += 2 * counter;\n    }\n\n    //--------------------------------------------------------------\n    //                  Update\n    //--------------------------------------------------------------\n\n    bestCurrentValue = xMinValue(functionValues);\n\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n      iteration,\n    );\n\n    differentDistances = Array.from(new Set(diagonalDistances));\n    differentDistances = differentDistances.sort((a, b) => a - b);\n\n    smallerValuesByDistance = [];\n    for (let i = 0; i < differentDistances.length; i++) {\n      let minIndex;\n      let minValue = Number.POSITIVE_INFINITY;\n      for (let k = 0; k < diagonalDistances.length; k++) {\n        if (diagonalDistances[k] === differentDistances[i]) {\n          if (functionValues[k] < minValue) {\n            minValue = functionValues[k];\n            minIndex = k;\n          }\n        }\n      }\n      smallerValuesByDistance.push(functionValues[minIndex]);\n    }\n\n    let currentMin = [];\n    for (let j = 0; j < functionValues.length; j++) {\n      if (functionValues[j] === bestCurrentValue) {\n        let temp = [];\n        for (let i = 0; i < lowerBoundaries.length; i++) {\n          temp.push(\n            lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i],\n          );\n        }\n        currentMin.push(temp);\n      }\n    }\n    iteration += 1;\n  }\n  //--------------------------------------------------------------\n  //                  Saving results\n  //--------------------------------------------------------------\n\n  let result = {};\n  result.minFunctionValue = bestCurrentValue;\n  result.iterations = iteration;\n  let originalCoordinates = [];\n  for (let j = 0; j < numberOfRectangles + 1; j++) {\n    let pair = [];\n    for (let i = 0; i < lowerBoundaries.length; i++) {\n      pair.push(lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i]);\n    }\n    originalCoordinates.push(pair);\n  }\n\n  result.finalState = {\n    numberOfRectangles,\n    totalIterations: (totalIterations += iterations),\n    originalCoordinates,\n    middlePoint,\n    fCalls,\n    smallerDistance,\n    edgeSizes,\n    diagonalDistances,\n    functionValues,\n    differentDistances,\n    smallerValuesByDistance,\n    choiceLimit,\n  };\n\n  let minimizer = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    if (functionValues[i] === bestCurrentValue) {\n      minimizer.push(originalCoordinates[i]);\n    }\n  }\n\n  result.optima = minimizer;\n  return result;\n}\n\nfunction getMinIndex(\n  functionValues,\n  diagonalDistances,\n  choiceLimit,\n  bestCurrentValue,\n) {\n  let item = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    item[i] =\n      Math.abs(functionValues[i] - (bestCurrentValue + choiceLimit)) /\n      diagonalDistances[i];\n  }\n  const min = xMinValue(item);\n  let result = item.findIndex((x) => x === min);\n  return result;\n}\n"],"names":["toString","Object","prototype","isAnyArray","value","call","endsWith","xCheck","input","options","arguments","length","undefined","minLength","TypeError","Error","xFindClosestIndex","array","target","sorted","low","high","middle","Math","abs","index","diff","Number","POSITIVE_INFINITY","i","currentDiff","xGetFromToIndex","x","fromIndex","toIndex","from","to","xMaxValue","maxValue","xMinValue","minValue","xNorm","result","element","sqrt","antiLowerConvexHull","y","RangeError","nbPoints","currentPoint","Array","fill","a","b","moveOn","c","det","leftTurn","moveBack","map","item","filter","vector","counter","direct","objectiveFunction","lowerBoundaries","upperBoundaries","iterations","epsilon","tolerance","tolerance2","initialState","Float64Array","n","diffBorders","numberOfRectangles","totalIterations","unitaryCoordinates","middlePoint","bestCurrentValue","fCalls","smallerDistance","edgeSizes","diagonalDistances","pow","functionValues","differentDistances","smallerValuesByDistance","choiceLimit","originalCoordinates","getMinIndex","slice","j","iteration","S1","idx","findIndex","e","f","optimumValuesIndex","S3","a1","b1","a2","b2","slope","constant","S2","Uint32Array","xHull","yHull","push","lowerIndexHull","k","largerSide","largeSidesIndex","delta","bestFunctionValues","r","firstMiddleCenter","secondMiddleCenter","firstMiddleValue","secondMiddleValue","firstMinValue","secondMinValue","min","sort","u","ix1","ix2","Set","minIndex","temp","minFunctionValue","pair","finalState","minimizer","optima"],"mappings":"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"}