elemento-alpha-tools 1.2.21 → 1.2.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/index.d.ts +9 -0
  2. package/dist/index.js +19 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/optimization/population/Individual.d.ts +9 -0
  5. package/dist/optimization/population/Individual.js +10 -0
  6. package/dist/optimization/population/Individual.js.map +1 -0
  7. package/dist/optimization/population/PopulationGenerator.d.ts +9 -0
  8. package/dist/optimization/population/PopulationGenerator.js +21 -0
  9. package/dist/optimization/population/PopulationGenerator.js.map +1 -0
  10. package/dist/optimization/search/Goal.d.ts +9 -0
  11. package/dist/optimization/search/Goal.js +16 -0
  12. package/dist/optimization/search/Goal.js.map +1 -0
  13. package/dist/optimization/search/MultiObjectivePopulationSearch.d.ts +20 -0
  14. package/dist/optimization/search/MultiObjectivePopulationSearch.js +34 -0
  15. package/dist/optimization/search/MultiObjectivePopulationSearch.js.map +1 -0
  16. package/dist/optimization/search/Space.d.ts +7 -0
  17. package/dist/optimization/search/Space.js +3 -0
  18. package/dist/optimization/search/Space.js.map +1 -0
  19. package/dist/optimization/search/portfolio/PortfolioIndividual.d.ts +5 -0
  20. package/dist/optimization/search/portfolio/PortfolioIndividual.js +14 -0
  21. package/dist/optimization/search/portfolio/PortfolioIndividual.js.map +1 -0
  22. package/dist/optimization/search/portfolio/PortfolioIndividualBuilder.d.ts +5 -0
  23. package/dist/optimization/search/portfolio/PortfolioIndividualBuilder.js +11 -0
  24. package/dist/optimization/search/portfolio/PortfolioIndividualBuilder.js.map +1 -0
  25. package/dist/optimization/search/portfolio/PortfolioSearch.d.ts +18 -0
  26. package/dist/optimization/search/portfolio/PortfolioSearch.js +72 -0
  27. package/dist/optimization/search/portfolio/PortfolioSearch.js.map +1 -0
  28. package/dist/optimization/search/portfolio/PortfolioSpace.d.ts +32 -0
  29. package/dist/optimization/search/portfolio/PortfolioSpace.js +131 -0
  30. package/dist/optimization/search/portfolio/PortfolioSpace.js.map +1 -0
  31. package/dist/optimization/search/portfolio/PortfolioTypes.d.ts +26 -0
  32. package/dist/optimization/search/portfolio/PortfolioTypes.js +3 -0
  33. package/dist/optimization/search/portfolio/PortfolioTypes.js.map +1 -0
  34. package/dist/optimization/search/portfolio/goals/ReturnGoal.d.ts +17 -0
  35. package/dist/optimization/search/portfolio/goals/ReturnGoal.js +72 -0
  36. package/dist/optimization/search/portfolio/goals/ReturnGoal.js.map +1 -0
  37. package/dist/optimization/search/portfolio/goals/VolatilityGoal.d.ts +17 -0
  38. package/dist/optimization/search/portfolio/goals/VolatilityGoal.js +93 -0
  39. package/dist/optimization/search/portfolio/goals/VolatilityGoal.js.map +1 -0
  40. package/dist/optimization/search/portfolio/noDominanceSelector/EnviromentSelector.d.ts +21 -0
  41. package/dist/optimization/search/portfolio/noDominanceSelector/EnviromentSelector.js +98 -0
  42. package/dist/optimization/search/portfolio/noDominanceSelector/EnviromentSelector.js.map +1 -0
  43. package/dist/optimization/search/portfolio/tournament/TournamentSelector.d.ts +11 -0
  44. package/dist/optimization/search/portfolio/tournament/TournamentSelector.js +52 -0
  45. package/dist/optimization/search/portfolio/tournament/TournamentSelector.js.map +1 -0
  46. package/dist/optimization/search/portfolio/variate/PortfolioMutation.d.ts +8 -0
  47. package/dist/optimization/search/portfolio/variate/PortfolioMutation.js +26 -0
  48. package/dist/optimization/search/portfolio/variate/PortfolioMutation.js.map +1 -0
  49. package/dist/optimization/search/portfolio/variate/PortfolioXOver.d.ts +8 -0
  50. package/dist/optimization/search/portfolio/variate/PortfolioXOver.js +23 -0
  51. package/dist/optimization/search/portfolio/variate/PortfolioXOver.js.map +1 -0
  52. package/dist/optimization/search/variate/Variation.d.ts +9 -0
  53. package/dist/optimization/search/variate/Variation.js +13 -0
  54. package/dist/optimization/search/variate/Variation.js.map +1 -0
  55. package/dist/sort/Order.d.ts +4 -0
  56. package/dist/sort/Order.js +3 -0
  57. package/dist/sort/Order.js.map +1 -0
  58. package/dist/sort/ReversedOrder.d.ts +7 -0
  59. package/dist/sort/ReversedOrder.js +16 -0
  60. package/dist/sort/ReversedOrder.js.map +1 -0
  61. package/dist/sort/real/RealOrder.d.ts +7 -0
  62. package/dist/sort/real/RealOrder.js +18 -0
  63. package/dist/sort/real/RealOrder.js.map +1 -0
  64. package/package.json +5 -5
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ReturnGoal = void 0;
13
+ const Goal_1 = require("../../Goal");
14
+ class ReturnGoal extends Goal_1.Goal {
15
+ constructor(order, portfolioData, marketData) {
16
+ var _a, _b;
17
+ super(order);
18
+ this.assetIds = [];
19
+ this.assetIds = ((_b = (_a = portfolioData === null || portfolioData === void 0 ? void 0 : portfolioData.settings) === null || _a === void 0 ? void 0 : _a.constraints) === null || _b === void 0 ? void 0 : _b.map(c => c.assetId)) || [];
20
+ this.marketData = this.normaliceMarketData(marketData);
21
+ this.cachedReturns = new Map();
22
+ }
23
+ normaliceMarketData(marketData) {
24
+ const marketDataByAsset = new Map();
25
+ for (const assetMarketData of marketData) {
26
+ const assetId = Array.isArray(assetMarketData.assetId) ? assetMarketData.assetId[0] : assetMarketData.assetId;
27
+ if (!marketDataByAsset.has(assetId))
28
+ marketDataByAsset.set(assetId, []);
29
+ marketDataByAsset.get(assetId).push(assetMarketData);
30
+ }
31
+ return marketDataByAsset;
32
+ }
33
+ calculateDailyReturns(prices) {
34
+ const returns = [];
35
+ for (let i = 1; i < prices.length; i++) {
36
+ returns.push(prices[i] / prices[i - 1] - 1);
37
+ }
38
+ return returns;
39
+ }
40
+ calculateAnnualReturn(dailyReturns) {
41
+ const avgDailyReturn = dailyReturns.reduce((sum, r) => sum + r, 0) / dailyReturns.length;
42
+ return Math.pow(1 + avgDailyReturn, 365) - 1;
43
+ }
44
+ getAssetReturn(assetId) {
45
+ if (!this.cachedReturns.has(assetId)) {
46
+ const data = this.marketData.get(assetId);
47
+ const sortedData = [...data].sort((a, b) => a.date - b.date);
48
+ const prices = sortedData.map(d => d.value);
49
+ const dailyReturns = this.calculateDailyReturns(prices);
50
+ const annualReturn = this.calculateAnnualReturn(dailyReturns);
51
+ this.cachedReturns.set(assetId, annualReturn);
52
+ return annualReturn;
53
+ }
54
+ return this.cachedReturns.get(assetId);
55
+ }
56
+ compute(individual) {
57
+ const weights = individual.genotype;
58
+ let portfolioReturn = 0;
59
+ for (let i = 0; i < weights.length; i++) {
60
+ const assetId = this.assetIds[i];
61
+ const assetReturn = this.getAssetReturn(assetId);
62
+ portfolioReturn += weights[i] * assetReturn;
63
+ }
64
+ return portfolioReturn;
65
+ }
66
+ init() {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ });
69
+ }
70
+ }
71
+ exports.ReturnGoal = ReturnGoal;
72
+ //# sourceMappingURL=ReturnGoal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReturnGoal.js","sourceRoot":"","sources":["../../../../../src/optimization/search/portfolio/goals/ReturnGoal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { IMarketData } from '../../../../crud/MarketDataManager';
2
+ import { Order } from '../../../../sort/Order';
3
+ import { Individual } from '../../../population/Individual';
4
+ import { Goal } from '../../Goal';
5
+ import { IPortfolioData } from '../PortfolioTypes';
6
+ export declare class VolatilityGoal extends Goal<Individual<number[], number[], number[]>, number> {
7
+ private marketData;
8
+ private assetIds;
9
+ private covarianceMatrix;
10
+ constructor(order: Order<number>, portfolioData?: IPortfolioData, marketData?: IMarketData[]);
11
+ private normalizeMarketData;
12
+ private calculateDailyReturns;
13
+ private calculateCovariance;
14
+ private buildCovarianceMatrix;
15
+ compute(individual: Individual<number[], number[], number[]>): number;
16
+ init(): Promise<void>;
17
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.VolatilityGoal = void 0;
13
+ const Goal_1 = require("../../Goal");
14
+ class VolatilityGoal extends Goal_1.Goal {
15
+ constructor(order, portfolioData, marketData) {
16
+ var _a, _b;
17
+ super(order);
18
+ this.assetIds = [];
19
+ this.covarianceMatrix = [];
20
+ this.assetIds = ((_b = (_a = portfolioData === null || portfolioData === void 0 ? void 0 : portfolioData.settings) === null || _a === void 0 ? void 0 : _a.constraints) === null || _b === void 0 ? void 0 : _b.map(c => c.assetId)) || [];
21
+ this.marketData = this.normalizeMarketData(marketData);
22
+ if (this.assetIds.length > 0 && this.marketData.size > 0)
23
+ this.buildCovarianceMatrix();
24
+ }
25
+ normalizeMarketData(marketData) {
26
+ const marketDataByAsset = new Map();
27
+ if (!marketData)
28
+ return marketDataByAsset;
29
+ for (const point of marketData) {
30
+ const assetId = Array.isArray(point.assetId) ? point.assetId[0] : point.assetId;
31
+ if (!marketDataByAsset.has(assetId)) {
32
+ marketDataByAsset.set(assetId, []);
33
+ }
34
+ marketDataByAsset.get(assetId).push(point);
35
+ }
36
+ return marketDataByAsset;
37
+ }
38
+ calculateDailyReturns(prices) {
39
+ const returns = [];
40
+ for (let i = 1; i < prices.length; i++) {
41
+ returns.push(prices[i] / prices[i - 1] - 1);
42
+ }
43
+ return returns;
44
+ }
45
+ calculateCovariance(returns1, returns2) {
46
+ const limitedArraySize = Math.min(returns1.length, returns2.length);
47
+ const mean1 = returns1.reduce((s, returnValue) => s + returnValue, 0) / limitedArraySize;
48
+ const mean2 = returns2.reduce((s, returnValue) => s + returnValue, 0) / limitedArraySize;
49
+ let covariance = 0;
50
+ for (let i = 0; i < limitedArraySize; i++) {
51
+ covariance += (returns1[i] - mean1) * (returns2[i] - mean2);
52
+ }
53
+ return covariance / limitedArraySize;
54
+ }
55
+ buildCovarianceMatrix() {
56
+ var _a;
57
+ const totalAssets = this.assetIds.length;
58
+ const returnsMatrix = [];
59
+ for (const assetId of this.assetIds) {
60
+ const data = this.marketData.get(assetId);
61
+ if (!data) {
62
+ returnsMatrix.push([]);
63
+ continue;
64
+ }
65
+ const sorted = [...data].sort((a, b) => a.date - b.date);
66
+ const prices = (_a = sorted.map(priceData => priceData.value)) !== null && _a !== void 0 ? _a : [];
67
+ returnsMatrix.push(this.calculateDailyReturns(prices));
68
+ }
69
+ this.covarianceMatrix = [];
70
+ for (let i = 0; i < totalAssets; i++) {
71
+ this.covarianceMatrix[i] = [];
72
+ for (let j = 0; j < totalAssets; j++) {
73
+ const cov = this.calculateCovariance(returnsMatrix[i], returnsMatrix[j]);
74
+ this.covarianceMatrix[i][j] = cov * 365;
75
+ }
76
+ }
77
+ }
78
+ compute(individual) {
79
+ const weights = individual.genotype;
80
+ let variance = 0;
81
+ for (let i = 0; i < weights.length; i++) {
82
+ for (let j = 0; j < weights.length; j++) {
83
+ variance += weights[i] * weights[j] * this.covarianceMatrix[i][j];
84
+ }
85
+ }
86
+ return Math.sqrt(variance);
87
+ }
88
+ init() {
89
+ return __awaiter(this, void 0, void 0, function* () { });
90
+ }
91
+ }
92
+ exports.VolatilityGoal = VolatilityGoal;
93
+ //# sourceMappingURL=VolatilityGoal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VolatilityGoal.js","sourceRoot":"","sources":["../../../../../src/optimization/search/portfolio/goals/VolatilityGoal.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,qCAAkC;AAGlC,MAAa,cAAe,SAAQ,WAAsD;IAKxF,YAAY,KAAoB,EAAE,aAA8B,EAAE,UAA0B;;QAC1F,KAAK,CAAC,KAAK,CAAC,CAAC;QAJP,aAAQ,GAAa,EAAE,CAAC;QACxB,qBAAgB,GAAe,EAAE,CAAC;QAIxC,IAAI,CAAC,QAAQ,GAAG,CAAA,MAAA,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,QAAQ,0CAAE,WAAW,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAI,EAAE,CAAC;QAChF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;YACtD,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAEO,mBAAmB,CAAC,UAA0B;QACpD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC3D,IAAI,CAAC,UAAU;YAAE,OAAO,iBAAiB,CAAC;QAE1C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAQ,CAAC;YACjF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,qBAAqB,CAAC,MAAgB;QAC5C,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,mBAAmB,CAAC,QAAkB,EAAE,QAAkB;QAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEpE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC;QACzF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC;QAEzF,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,UAAU,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,UAAU,GAAG,gBAAgB,CAAC;IACvC,CAAC;IAEO,qBAAqB;;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,MAAM,aAAa,GAAe,EAAE,CAAC;QAErC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvB,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAK,GAAG,CAAC,CAAC,IAAK,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAA,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,KAAM,CAAC,mCAAI,EAAE,CAAC;YAC/D,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAEM,OAAO,CAAC,UAAoD;QACjE,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;QACpC,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAEY,IAAI;8DAAmB,CAAC;KAAA;CACtC;AAzFD,wCAyFC"}
@@ -0,0 +1,21 @@
1
+ import { Individual } from '../../../population/Individual';
2
+ import { Goal } from '../../Goal';
3
+ import { Space } from '../../Space';
4
+ export declare class EnvironmentSelector<G, P, F> {
5
+ private goals;
6
+ private growthRate;
7
+ private maxPopulation;
8
+ private space;
9
+ constructor(space: Space<G>, goals: Goal<Individual<G, P, F[]>, F>[], growthRate?: number, maxPopulation?: number);
10
+ reduceEquals(population: Individual<G, P, F[]>[]): Individual<G, P, F[]>[];
11
+ private isUnique;
12
+ chooseNonDominated(population: Individual<G, P, F[]>[]): {
13
+ indexes: number[];
14
+ individuals: Individual<G, P, F[]>[];
15
+ };
16
+ private isDominated;
17
+ private dominates;
18
+ private distance;
19
+ private truncate;
20
+ apply(population: Individual<G, P, F[]>[], currentSize: number): Individual<G, P, F[]>[];
21
+ }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnvironmentSelector = void 0;
4
+ class EnvironmentSelector {
5
+ constructor(space, goals, growthRate = 1.1, maxPopulation = 200) {
6
+ this.space = space;
7
+ this.goals = goals;
8
+ this.growthRate = growthRate;
9
+ this.maxPopulation = maxPopulation;
10
+ }
11
+ reduceEquals(population) {
12
+ let uniquePopulation = [];
13
+ for (let individual of population)
14
+ if (this.isUnique(individual, uniquePopulation))
15
+ uniquePopulation.push(individual);
16
+ return uniquePopulation;
17
+ }
18
+ isUnique(individual, uniquePopulation) {
19
+ for (let uniqueIndividual of uniquePopulation)
20
+ if (this.space.equals(individual.genotype, uniqueIndividual.genotype))
21
+ return false;
22
+ return true;
23
+ }
24
+ chooseNonDominated(population) {
25
+ let result = { indexes: [], individuals: [] };
26
+ for (let i = 0; i < population.length; i++)
27
+ if (!this.isDominated(i, population)) {
28
+ result.indexes.push(i);
29
+ result.individuals.push(population[i]);
30
+ }
31
+ return result;
32
+ }
33
+ isDominated(i, population) {
34
+ for (let j = 0; j < population.length; j++)
35
+ if (i !== j && this.dominates(population[j], population[i]))
36
+ return true;
37
+ return false;
38
+ }
39
+ dominates(first, second) {
40
+ let isBetterInAtLeastOne = false;
41
+ for (let i = 0; i < this.goals.length; i++) {
42
+ const comparison = this.goals[i].getOrder().compare(first.fitness[i], second.fitness[i]);
43
+ if (comparison < 0)
44
+ return false;
45
+ if (comparison > 0)
46
+ isBetterInAtLeastOne = true;
47
+ }
48
+ return isBetterInAtLeastOne;
49
+ }
50
+ distance(ind1, ind2) {
51
+ let sum = 0;
52
+ for (let i = 0; i < ind1.fitness.length; i++) {
53
+ const diff = ind1.fitness[i] - ind2.fitness[i];
54
+ sum += diff * diff;
55
+ }
56
+ return Math.sqrt(sum);
57
+ }
58
+ truncate(population, maxPopulationSize) {
59
+ while (population.length > maxPopulationSize) {
60
+ let minimumDistance = Infinity;
61
+ let toRemove = 0;
62
+ for (let i = 0; i < population.length; i++) {
63
+ let nearest = Infinity;
64
+ for (let j = 0; j < population.length; j++) {
65
+ if (i !== j) {
66
+ const distanceBetweenIndividuals = this.distance(population[i], population[j]);
67
+ if (distanceBetweenIndividuals < nearest)
68
+ nearest = distanceBetweenIndividuals;
69
+ }
70
+ }
71
+ if (nearest < minimumDistance) {
72
+ minimumDistance = nearest;
73
+ toRemove = i;
74
+ }
75
+ }
76
+ population.splice(toRemove, 1);
77
+ }
78
+ return population;
79
+ }
80
+ apply(population, currentSize) {
81
+ const target = Math.min(Math.floor(currentSize * this.growthRate), this.maxPopulation);
82
+ let nextPopulation = [];
83
+ while (nextPopulation.length < target && population.length > 0) {
84
+ let nonDominated = this.chooseNonDominated(population);
85
+ if (nextPopulation.length + nonDominated.individuals.length <= target) {
86
+ nextPopulation = nextPopulation.concat(this.reduceEquals(nonDominated.individuals));
87
+ }
88
+ else {
89
+ const needed = target - nextPopulation.length;
90
+ nextPopulation = nextPopulation.concat(this.truncate(this.reduceEquals(nonDominated.individuals), needed));
91
+ }
92
+ population = population.filter((_, i) => !nonDominated.indexes.includes(i));
93
+ }
94
+ return nextPopulation;
95
+ }
96
+ }
97
+ exports.EnvironmentSelector = EnvironmentSelector;
98
+ //# sourceMappingURL=EnviromentSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnviromentSelector.js","sourceRoot":"","sources":["../../../../../src/optimization/search/portfolio/noDominanceSelector/EnviromentSelector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Individual } from '../../../population/Individual';
2
+ import { Goal } from '../../Goal';
3
+ export declare class TournamentSelector<G, P, F> {
4
+ private goals;
5
+ constructor(goals: Goal<Individual<G, P, F[]>, F>[]);
6
+ selectOne(population: Individual<G, P, F[]>[]): Individual<G, P, F[]>;
7
+ private selectParticipants;
8
+ private combat;
9
+ private selectRandomGoal;
10
+ private calculateStrength;
11
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TournamentSelector = void 0;
4
+ class TournamentSelector {
5
+ constructor(goals) {
6
+ this.goals = goals;
7
+ }
8
+ selectOne(population) {
9
+ const participants = this.selectParticipants(population, 4);
10
+ const semifinalists = [
11
+ this.combat(participants[0], participants[1]),
12
+ this.combat(participants[2], participants[3])
13
+ ];
14
+ const winner = this.combat(semifinalists[0], semifinalists[1]);
15
+ return winner;
16
+ }
17
+ selectParticipants(population, count) {
18
+ const participants = [];
19
+ const indices = new Set();
20
+ while (indices.size < count) {
21
+ const randomIndex = Math.floor(Math.random() * population.length);
22
+ if (!indices.has(randomIndex)) {
23
+ indices.add(randomIndex);
24
+ participants.push(population[randomIndex]);
25
+ }
26
+ }
27
+ return participants;
28
+ }
29
+ combat(first, second) {
30
+ const goalIndex = this.selectRandomGoal();
31
+ const strength = this.calculateStrength(first, second, goalIndex);
32
+ const random = Math.random();
33
+ const winner = random < strength ? first : second;
34
+ return winner;
35
+ }
36
+ selectRandomGoal() {
37
+ return Math.floor(Math.random() * this.goals.length);
38
+ }
39
+ calculateStrength(firstIndividual, secondIndividual, goalIndex) {
40
+ const firstValue = Math.abs(firstIndividual.fitness[goalIndex]);
41
+ const secondValue = Math.abs(secondIndividual.fitness[goalIndex]);
42
+ const total = firstValue + secondValue;
43
+ let strength = firstValue / total;
44
+ const goal = this.goals[goalIndex];
45
+ const isMinimization = goal.getOrder().compare(firstIndividual.fitness[goalIndex], secondIndividual.fitness[goalIndex]) > 0;
46
+ if (isMinimization)
47
+ strength = 1 - strength;
48
+ return strength;
49
+ }
50
+ }
51
+ exports.TournamentSelector = TournamentSelector;
52
+ //# sourceMappingURL=TournamentSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TournamentSelector.js","sourceRoot":"","sources":["../../../../../src/optimization/search/portfolio/tournament/TournamentSelector.ts"],"names":[],"mappings":";;;AAGA,MAAa,kBAAkB;IAG7B,YAAY,KAAuC;QACjD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,SAAS,CAAC,UAAmC;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG;YACpB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,kBAAkB,CAAC,UAAmC,EAAE,KAAa;QAC3E,MAAM,YAAY,GAA4B,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,OAAO,OAAO,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACzB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,MAAM,CAAC,KAA4B,EAAE,MAA6B;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAEO,iBAAiB,CAAC,eAAsC,EAAE,gBAAuC,EAAE,SAAiB;QAC1H,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAQ,CAAC,SAAS,CAAW,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAQ,CAAC,SAAS,CAAW,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,UAAU,GAAG,WAAW,CAAC;QAEvC,IAAI,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,OAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;QAE9H,IAAI,cAAc;YAAE,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC;QAE5C,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAzDD,gDAyDC"}
@@ -0,0 +1,8 @@
1
+ import { Variation } from "../../variate/Variation";
2
+ import { PortfolioSpace } from "../PortfolioSpace";
3
+ export declare class PortfolioMutation extends Variation<number[]> {
4
+ constructor(space: PortfolioSpace);
5
+ arity(): number;
6
+ range_arity(): number;
7
+ protected variate(parents: number[][]): number[][];
8
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PortfolioMutation = void 0;
4
+ const Variation_1 = require("../../variate/Variation");
5
+ class PortfolioMutation extends Variation_1.Variation {
6
+ constructor(space) {
7
+ super(space);
8
+ }
9
+ arity() {
10
+ return 1;
11
+ }
12
+ range_arity() {
13
+ return 1;
14
+ }
15
+ variate(parents) {
16
+ let child = parents[0].slice();
17
+ let mutationProbability = 1.0 / child.length;
18
+ let restrictions = this.space.getRestrictions();
19
+ for (let i = 0; i < child.length; i++)
20
+ if (Math.random() < mutationProbability)
21
+ child[i] = (Math.random() * (restrictions.constraints[i].maxWeight - restrictions.constraints[i].minWeigth)) + restrictions.constraints[i].minWeigth;
22
+ return [child];
23
+ }
24
+ }
25
+ exports.PortfolioMutation = PortfolioMutation;
26
+ //# sourceMappingURL=PortfolioMutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PortfolioMutation.js","sourceRoot":"","sources":["../../../../../src/optimization/search/portfolio/variate/PortfolioMutation.ts"],"names":[],"mappings":";;;AAAA,uDAAoD;AAGpD,MAAa,iBAAkB,SAAQ,qBAAmB;IACtD,YAAY,KAAqB;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IACM,KAAK;QACR,OAAO,CAAC,CAAC;IACb,CAAC;IACM,WAAW;QACd,OAAO,CAAC,CAAC;IACb,CAAC;IACS,OAAO,CAAC,OAAmB;QACjC,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,mBAAmB,GAAW,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACrD,IAAI,YAAY,GAAI,IAAI,CAAC,KAAwB,CAAC,eAAe,EAAE,CAAC;QACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YACjC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,mBAAmB;gBACnC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7J,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;CACJ;AAnBD,8CAmBC"}
@@ -0,0 +1,8 @@
1
+ import { Variation } from "../../variate/Variation";
2
+ import { PortfolioSpace } from "../PortfolioSpace";
3
+ export declare class PortfolioXOver extends Variation<number[]> {
4
+ constructor(space: PortfolioSpace);
5
+ arity(): number;
6
+ range_arity(): number;
7
+ protected variate(parents: number[][]): number[][];
8
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PortfolioXOver = void 0;
4
+ const Variation_1 = require("../../variate/Variation");
5
+ class PortfolioXOver extends Variation_1.Variation {
6
+ constructor(space) {
7
+ super(space);
8
+ }
9
+ arity() {
10
+ return 2;
11
+ }
12
+ range_arity() {
13
+ return 2;
14
+ }
15
+ variate(parents) {
16
+ let point = Math.floor(Math.random() * parents[0].length);
17
+ let child1 = parents[0].slice(0, point).concat(parents[1].slice(point));
18
+ let child2 = parents[1].slice(0, point).concat(parents[0].slice(point));
19
+ return [child1, child2];
20
+ }
21
+ }
22
+ exports.PortfolioXOver = PortfolioXOver;
23
+ //# sourceMappingURL=PortfolioXOver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PortfolioXOver.js","sourceRoot":"","sources":["../../../../../src/optimization/search/portfolio/variate/PortfolioXOver.ts"],"names":[],"mappings":";;;AAAA,uDAAoD;AAGpD,MAAa,cAAe,SAAQ,qBAAmB;IACnD,YAAY,KAAqB;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAEM,KAAK;QACR,OAAO,CAAC,CAAC;IACb,CAAC;IAEM,WAAW;QACd,OAAO,CAAC,CAAC;IACb,CAAC;IAES,OAAO,CAAC,OAAmB;QACjC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;CACJ;AAnBD,wCAmBC"}
@@ -0,0 +1,9 @@
1
+ import { Space } from "../Space";
2
+ export declare abstract class Variation<T> {
3
+ protected space: Space<T>;
4
+ constructor(space: Space<T>);
5
+ abstract arity(): number;
6
+ abstract range_arity(): number;
7
+ apply(parents: T[]): T[];
8
+ protected abstract variate(parents: T[]): T[];
9
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Variation = void 0;
4
+ class Variation {
5
+ constructor(space) {
6
+ this.space = space;
7
+ }
8
+ apply(parents) {
9
+ return this.space.repairMany(this.variate(parents));
10
+ }
11
+ }
12
+ exports.Variation = Variation;
13
+ //# sourceMappingURL=Variation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Variation.js","sourceRoot":"","sources":["../../../../src/optimization/search/variate/Variation.ts"],"names":[],"mappings":";;;AAEA,MAAsB,SAAS;IAG3B,YAAY,KAAe;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAKM,KAAK,CAAC,OAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;CAGJ;AAfD,8BAeC"}
@@ -0,0 +1,4 @@
1
+ export interface Order<T> {
2
+ compare(one: T, two: T): number;
3
+ equals(one: T, two: T): boolean;
4
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Order.js","sourceRoot":"","sources":["../../src/sort/Order.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { Order } from "./Order";
2
+ export declare class ReversedOrder<T> implements Order<T> {
3
+ protected originalOrder: Order<T>;
4
+ constructor(originalOrder: Order<T>);
5
+ compare(one: T, two: T): number;
6
+ equals(one: T, two: T): boolean;
7
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReversedOrder = void 0;
4
+ class ReversedOrder {
5
+ constructor(originalOrder) {
6
+ this.originalOrder = originalOrder;
7
+ }
8
+ compare(one, two) {
9
+ return this.originalOrder.compare(two, one);
10
+ }
11
+ equals(one, two) {
12
+ return this.originalOrder.equals(one, two);
13
+ }
14
+ }
15
+ exports.ReversedOrder = ReversedOrder;
16
+ //# sourceMappingURL=ReversedOrder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReversedOrder.js","sourceRoot":"","sources":["../../src/sort/ReversedOrder.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IAGtB,YAAY,aAAuB;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAEM,OAAO,CAAC,GAAM,EAAE,GAAM;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,GAAM,EAAE,GAAM;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;CACJ;AAdD,sCAcC"}
@@ -0,0 +1,7 @@
1
+ import { Order } from "../Order";
2
+ export declare class RealOrder implements Order<number> {
3
+ private minimize;
4
+ constructor(minimize?: boolean);
5
+ compare(one: number, two: number): number;
6
+ equals(one: number, two: number): boolean;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RealOrder = void 0;
4
+ class RealOrder {
5
+ constructor(minimize) {
6
+ this.minimize = minimize !== null && minimize !== void 0 ? minimize : false;
7
+ }
8
+ compare(one, two) {
9
+ if (this.minimize)
10
+ return this.equals(one, two) ? 0 : (one < two ? 1 : -1);
11
+ return this.equals(one, two) ? 0 : (one < two ? -1 : 1);
12
+ }
13
+ equals(one, two) {
14
+ return Math.abs(one - two) < 1e-6;
15
+ }
16
+ }
17
+ exports.RealOrder = RealOrder;
18
+ //# sourceMappingURL=RealOrder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealOrder.js","sourceRoot":"","sources":["../../../src/sort/real/RealOrder.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;IAGlB,YAAY,QAAkB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,KAAK,CAAC;IACtC,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,GAAW;QACnC,IAAI,IAAI,CAAC,QAAQ;YACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEM,MAAM,CAAC,GAAW,EAAE,GAAW;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;IACtC,CAAC;CACJ;AAhBD,8BAgBC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "elemento-alpha-tools",
3
- "version": "1.2.21",
3
+ "version": "1.2.23",
4
4
  "description": "Librería para los servicios de elemento alpha",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -34,17 +34,17 @@
34
34
  "@types/express": "^5.0.5",
35
35
  "@types/jest": "^30.0.0",
36
36
  "@types/morgan": "^1.9.9",
37
- "@types/node": "^24.9.2",
37
+ "@types/node": "^24.10.1",
38
38
  "jest": "^30.2.0",
39
- "rimraf": "^6.0.1",
39
+ "rimraf": "^6.1.0",
40
40
  "ts-jest": "^29.4.5",
41
41
  "typescript": "^5.9.3"
42
42
  },
43
43
  "dependencies": {
44
- "axios": "^1.13.1",
44
+ "axios": "^1.13.2",
45
45
  "crypto-js": "^4.2.0",
46
46
  "dotenv": "^17.2.3",
47
- "itrm-tools": "^1.3.19",
47
+ "itrm-tools": "^1.3.22",
48
48
  "morgan": "^1.10.0"
49
49
  },
50
50
  "optionalDependencies": {