import AntColonyOptimizationOption from "./interfaces/AntColonyOptimizationOption"; import AntColonyOptimizationOptionState from "./interfaces/AntColonyOptimizationOptionState"; import AntColonyOptimizationResult from "./interfaces/AntColonyOptimizationResult"; import Vector from "./interfaces/Vector"; export default class AntColonyOptimization { /** * 預設配置參數 */ static readonly DEFAULT_OPTION_STATE: AntColonyOptimizationOptionState; /** * 向量序列 */ private readonly vectorList; /** * 配置參數 */ private readonly optionState; /** * 距離矩陣 */ private distanceMatrix; /** * 能見度矩陣 */ private visibilityMatrix; /** * 費洛蒙矩陣 */ private pheromoneMatrix; /** * 螞蟻演算法計算結果 */ private result; /** * 構造器 * @param vectorList 向量序列 * @param option 配置參數 */ constructor(vectorList: V[], option?: AntColonyOptimizationOption); /** * 獲得 螞蟻演算法計算結果 * @returns 螞蟻演算法計算結果 */ getResult(): Promise | undefined>; /** * 開始計算螞蟻演算法 * @param maximumRounds 最大迭代回合 * @param antAmount 螞蟻數量 * @param pheromoneWeight 費洛蒙權重 * @param pheromoneWeakeningRate 費洛蒙衰退率 (0~1) * @param pheromoneIncrement 每隻螞蟻經過路徑費洛蒙增量 (增量 / 螞蟻行走距離) * @param onRoundEnds [回調] 回合結束時 * @returns 螞蟻演算法計算結果 */ private start; /** * 回合開始,陸續送螞蟻走完旅程 * @param antAmount 螞蟻數量 * @param pheromoneWeight 費洛蒙權重 * @returns 本回合所有螞蟻的旅行結果 */ private roundStart; /** * 送一隻螞蟻出去走一趟旅程 * @param vectoryList 旅程座標向量序列 * @param pheromoneWeight 費洛蒙權重 * @returns 此之螞蟻依序走訪的向量 index 序列 */ private antTripStart; /** * 獲取回合結果集中的最佳結果 * @param tripResultList 回合結果集 * @returns 最佳結果 */ private getBestTripResult; /** * 獲取 下一回合的 費洛蒙矩陣 * @param tripResultList 此回合所有螞蟻的旅行結果 * @param pheromoneWeakeningRate 費洛蒙衰退率 (0~1) * @param pheromoneIncrement 每隻螞蟻經過路徑費洛蒙增量 (增量 / 螞蟻行走距離) * @returns 下一回合的 費洛蒙矩陣 */ private getNextRoundPheromonMatrix; /** * 獲取 螞蟻旅行結果 * @param tripIndexList 螞蟻旅行經過的向量 index 途徑 * @returns 螞蟻旅行結果 */ private getTripResult; /** * 獲得 費洛蒙訊息削弱矩陣 * @param pheromoneWeakeningRate 費洛蒙衰退率 0~1 * @returns 費洛蒙訊息削弱矩陣 */ private getPheromoneMatrixWeakening; /** * 挑起 下一個前往的向量,使用隨機輪盤法 * @param currentVectorIndex 當前所在的 向量 index * @param candidateVectorMap 候選的向量 Map (key 將會被挑起) * @param pheromoneWeight 費洛蒙權重 * @returns 下個前往的向量 Key ; index */ private pickKeyByRouletteWheel; /** * [初始化] 獲取 所有候選向量前往機率(0~1) Map * @param currentVectorIndex 當前所在的 向量 index * @param candidateVectorMap 候選的向量 Map * @param pheromoneWeight 費洛蒙權重 * @returns 所有候選向量前往機率(0~1) Map */ private getInitCandidateVectorProbabilityMap; /** * 挑起 集合的隨機的一個 key 值 * @param collection 集合類 (key 將會被挑起) * @returns key */ private pickRandomKey; /** * 獲取 集合的隨機的一個 key 值 * @param collection 集合類 * @returns key */ private getRandomKey; /** * [初始化] 獲取 候選向量 Map 物件 * @param vectorList 向量序列 * @returns 候選向量 Map 物件 */ private getInitCandidateVectorMap; /** * [初始化] 獲取 this.pheromoneMatrix 初始值 * @param vectorList 向量序列 * @param initialPheromone 初始費洛蒙 * @returns this.pheromoneMatrix 初始值 */ private getInitPheromoneMatrix; /** * [初始化] 獲取 this.visibilityMatrix 初始值 * @param distanceMatrix 距離矩陣 * @returns this.visibilityMatrix 初始值 */ private getInitVisibilityMatrix; /** * [初始化] 獲取 this.distanceMatrix 初始值 * @param vectorList 向量序列 * @returns this.distanceMatrix 初始值 */ private getInitDistanceMatrix; /** * [初始化] 獲取 this.optionState 初始值 * @param option 配置設定 * @returns this.optionState 初始值 */ private getInitOptionState; /** * [驗證] 檢查 vectorList 是否合規 * @param vectorList Vector3D[] 物件 * @returns 是否合規 */ private checkVectorListValidity; /** * [驗證] 檢查 optionState 是否合規 * @param optionState AntColonyOptimizationOptionState 物件 * @returns 是否合規 */ private checkOptionStateValidity; /** * [初始化] 獲取 this.vectorList 初始值 * @param vectorList 向量類序列 * @returns this.vectorList 初始值 */ private getInitVector3DList; /** * 等待一段時間,可以強制讓計算進入宏任務,以防止頁面卡頓 * @param ms 微秒 1000 = 1 秒 * @returns undefined */ private sleep; }