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.
- package/dist/index.d.ts +9 -0
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/optimization/population/Individual.d.ts +9 -0
- package/dist/optimization/population/Individual.js +10 -0
- package/dist/optimization/population/Individual.js.map +1 -0
- package/dist/optimization/population/PopulationGenerator.d.ts +9 -0
- package/dist/optimization/population/PopulationGenerator.js +21 -0
- package/dist/optimization/population/PopulationGenerator.js.map +1 -0
- package/dist/optimization/search/Goal.d.ts +9 -0
- package/dist/optimization/search/Goal.js +16 -0
- package/dist/optimization/search/Goal.js.map +1 -0
- package/dist/optimization/search/MultiObjectivePopulationSearch.d.ts +20 -0
- package/dist/optimization/search/MultiObjectivePopulationSearch.js +34 -0
- package/dist/optimization/search/MultiObjectivePopulationSearch.js.map +1 -0
- package/dist/optimization/search/Space.d.ts +7 -0
- package/dist/optimization/search/Space.js +3 -0
- package/dist/optimization/search/Space.js.map +1 -0
- package/dist/optimization/search/portfolio/PortfolioIndividual.d.ts +5 -0
- package/dist/optimization/search/portfolio/PortfolioIndividual.js +14 -0
- package/dist/optimization/search/portfolio/PortfolioIndividual.js.map +1 -0
- package/dist/optimization/search/portfolio/PortfolioIndividualBuilder.d.ts +5 -0
- package/dist/optimization/search/portfolio/PortfolioIndividualBuilder.js +11 -0
- package/dist/optimization/search/portfolio/PortfolioIndividualBuilder.js.map +1 -0
- package/dist/optimization/search/portfolio/PortfolioSearch.d.ts +18 -0
- package/dist/optimization/search/portfolio/PortfolioSearch.js +72 -0
- package/dist/optimization/search/portfolio/PortfolioSearch.js.map +1 -0
- package/dist/optimization/search/portfolio/PortfolioSpace.d.ts +32 -0
- package/dist/optimization/search/portfolio/PortfolioSpace.js +131 -0
- package/dist/optimization/search/portfolio/PortfolioSpace.js.map +1 -0
- package/dist/optimization/search/portfolio/PortfolioTypes.d.ts +26 -0
- package/dist/optimization/search/portfolio/PortfolioTypes.js +3 -0
- package/dist/optimization/search/portfolio/PortfolioTypes.js.map +1 -0
- package/dist/optimization/search/portfolio/goals/ReturnGoal.d.ts +17 -0
- package/dist/optimization/search/portfolio/goals/ReturnGoal.js +72 -0
- package/dist/optimization/search/portfolio/goals/ReturnGoal.js.map +1 -0
- package/dist/optimization/search/portfolio/goals/VolatilityGoal.d.ts +17 -0
- package/dist/optimization/search/portfolio/goals/VolatilityGoal.js +93 -0
- package/dist/optimization/search/portfolio/goals/VolatilityGoal.js.map +1 -0
- package/dist/optimization/search/portfolio/noDominanceSelector/EnviromentSelector.d.ts +21 -0
- package/dist/optimization/search/portfolio/noDominanceSelector/EnviromentSelector.js +98 -0
- package/dist/optimization/search/portfolio/noDominanceSelector/EnviromentSelector.js.map +1 -0
- package/dist/optimization/search/portfolio/tournament/TournamentSelector.d.ts +11 -0
- package/dist/optimization/search/portfolio/tournament/TournamentSelector.js +52 -0
- package/dist/optimization/search/portfolio/tournament/TournamentSelector.js.map +1 -0
- package/dist/optimization/search/portfolio/variate/PortfolioMutation.d.ts +8 -0
- package/dist/optimization/search/portfolio/variate/PortfolioMutation.js +26 -0
- package/dist/optimization/search/portfolio/variate/PortfolioMutation.js.map +1 -0
- package/dist/optimization/search/portfolio/variate/PortfolioXOver.d.ts +8 -0
- package/dist/optimization/search/portfolio/variate/PortfolioXOver.js +23 -0
- package/dist/optimization/search/portfolio/variate/PortfolioXOver.js.map +1 -0
- package/dist/optimization/search/variate/Variation.d.ts +9 -0
- package/dist/optimization/search/variate/Variation.js +13 -0
- package/dist/optimization/search/variate/Variation.js.map +1 -0
- package/dist/sort/Order.d.ts +4 -0
- package/dist/sort/Order.js +3 -0
- package/dist/sort/Order.js.map +1 -0
- package/dist/sort/ReversedOrder.d.ts +7 -0
- package/dist/sort/ReversedOrder.js +16 -0
- package/dist/sort/ReversedOrder.js.map +1 -0
- package/dist/sort/real/RealOrder.d.ts +7 -0
- package/dist/sort/real/RealOrder.js +18 -0
- package/dist/sort/real/RealOrder.js.map +1 -0
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -19,6 +19,15 @@ export { IStatus as IStatus, IStatusSearchDetails as IStatusSearchDetails, Statu
|
|
|
19
19
|
export { IType as IType, ITypeSearchDetails as ITypeSearchDetails, TypeManager as TypeManager } from "./crud/TypeManager";
|
|
20
20
|
export { IUserCredentials as IUserCredentials, IUserCredentialsSearchDetails as IUserCredentialsSearchDetails, UserCredentialsManager as UserCredentialsManager } from "./crud/UserCredentialsManager";
|
|
21
21
|
export { IUser as IUser, IUserSearchDetails as IUserSearchDetails, UserManager as UserManager } from "./crud/UserManager";
|
|
22
|
+
export { PortfolioSpace as PortfolioSpace } from "./optimization/search/portfolio/PortfolioSpace";
|
|
23
|
+
export { PortfolioIndividualBuilder as PortfolioIndividualBuilder } from "./optimization/search/portfolio/PortfolioIndividualBuilder";
|
|
24
|
+
export { PopulationGenerator as PopulationGenerator } from "./optimization/population/PopulationGenerator";
|
|
25
|
+
export { PortfolioMutation as PortfolioMutation } from "./optimization/search/portfolio/variate/PortfolioMutation";
|
|
26
|
+
export { PortfolioXOver as PortfolioXOver } from "./optimization/search/portfolio/variate/PortfolioXOver";
|
|
27
|
+
export { RealOrder as RealOrder } from "./sort/real/RealOrder";
|
|
28
|
+
export { ReturnGoal as ReturnGoal } from "./optimization/search/portfolio/goals/ReturnGoal";
|
|
29
|
+
export { VolatilityGoal as VolatilityGoal } from "./optimization/search/portfolio/goals/VolatilityGoal";
|
|
30
|
+
export { PortfolioSearch as PortfolioSearch } from "./optimization/search/portfolio/PortfolioSearch";
|
|
22
31
|
export { applyLoginMocks as applyLoginMocks } from "./crud/test/LoginServiceMocks";
|
|
23
32
|
export { applyPlatformMocks as applyPlatformMocks } from "./crud/test/PlatformMocks";
|
|
24
33
|
export { applyRoleMocks as applyRoleMocks } from "./crud/test/RoleMocks";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.applyTypeMocks = exports.applyStatusMocks = exports.applyRoleMocks = exports.applyPlatformMocks = exports.applyLoginMocks = exports.UserManager = exports.UserCredentialsManager = exports.TypeManager = exports.StatusManager = exports.SourcesManager = exports.RoleManager = exports.PortfolioBenchmarkManager = exports.PlatformManager = exports.OptimizationManager = exports.MarketDataManager = exports.IntermediaryDataManager = exports.IntermediaryManager = exports.ForecastManager = exports.ComponentManager = exports.BusinessManager = exports.AvailablePlataformManager = exports.ConfigManager = exports.AssetsManager = exports.RoleServicePermissionsChecker = exports.ServiceSessionChecker = exports.ExpressLogableConfig = void 0;
|
|
3
|
+
exports.applyTypeMocks = exports.applyStatusMocks = exports.applyRoleMocks = exports.applyPlatformMocks = exports.applyLoginMocks = exports.PortfolioSearch = exports.VolatilityGoal = exports.ReturnGoal = exports.RealOrder = exports.PortfolioXOver = exports.PortfolioMutation = exports.PopulationGenerator = exports.PortfolioIndividualBuilder = exports.PortfolioSpace = exports.UserManager = exports.UserCredentialsManager = exports.TypeManager = exports.StatusManager = exports.SourcesManager = exports.RoleManager = exports.PortfolioBenchmarkManager = exports.PlatformManager = exports.OptimizationManager = exports.MarketDataManager = exports.IntermediaryDataManager = exports.IntermediaryManager = exports.ForecastManager = exports.ComponentManager = exports.BusinessManager = exports.AvailablePlataformManager = exports.ConfigManager = exports.AssetsManager = exports.RoleServicePermissionsChecker = exports.ServiceSessionChecker = exports.ExpressLogableConfig = void 0;
|
|
4
4
|
var ExpressLogableConfig_1 = require("./ap\u00ED/ExpressLogableConfig");
|
|
5
5
|
Object.defineProperty(exports, "ExpressLogableConfig", { enumerable: true, get: function () { return ExpressLogableConfig_1.ExpressLogableConfig; } });
|
|
6
6
|
var ServiceSessionChecker_1 = require("./ap\u00ED/checkers/ServiceSessionChecker");
|
|
@@ -43,6 +43,24 @@ var UserCredentialsManager_1 = require("./crud/UserCredentialsManager");
|
|
|
43
43
|
Object.defineProperty(exports, "UserCredentialsManager", { enumerable: true, get: function () { return UserCredentialsManager_1.UserCredentialsManager; } });
|
|
44
44
|
var UserManager_1 = require("./crud/UserManager");
|
|
45
45
|
Object.defineProperty(exports, "UserManager", { enumerable: true, get: function () { return UserManager_1.UserManager; } });
|
|
46
|
+
var PortfolioSpace_1 = require("./optimization/search/portfolio/PortfolioSpace");
|
|
47
|
+
Object.defineProperty(exports, "PortfolioSpace", { enumerable: true, get: function () { return PortfolioSpace_1.PortfolioSpace; } });
|
|
48
|
+
var PortfolioIndividualBuilder_1 = require("./optimization/search/portfolio/PortfolioIndividualBuilder");
|
|
49
|
+
Object.defineProperty(exports, "PortfolioIndividualBuilder", { enumerable: true, get: function () { return PortfolioIndividualBuilder_1.PortfolioIndividualBuilder; } });
|
|
50
|
+
var PopulationGenerator_1 = require("./optimization/population/PopulationGenerator");
|
|
51
|
+
Object.defineProperty(exports, "PopulationGenerator", { enumerable: true, get: function () { return PopulationGenerator_1.PopulationGenerator; } });
|
|
52
|
+
var PortfolioMutation_1 = require("./optimization/search/portfolio/variate/PortfolioMutation");
|
|
53
|
+
Object.defineProperty(exports, "PortfolioMutation", { enumerable: true, get: function () { return PortfolioMutation_1.PortfolioMutation; } });
|
|
54
|
+
var PortfolioXOver_1 = require("./optimization/search/portfolio/variate/PortfolioXOver");
|
|
55
|
+
Object.defineProperty(exports, "PortfolioXOver", { enumerable: true, get: function () { return PortfolioXOver_1.PortfolioXOver; } });
|
|
56
|
+
var RealOrder_1 = require("./sort/real/RealOrder");
|
|
57
|
+
Object.defineProperty(exports, "RealOrder", { enumerable: true, get: function () { return RealOrder_1.RealOrder; } });
|
|
58
|
+
var ReturnGoal_1 = require("./optimization/search/portfolio/goals/ReturnGoal");
|
|
59
|
+
Object.defineProperty(exports, "ReturnGoal", { enumerable: true, get: function () { return ReturnGoal_1.ReturnGoal; } });
|
|
60
|
+
var VolatilityGoal_1 = require("./optimization/search/portfolio/goals/VolatilityGoal");
|
|
61
|
+
Object.defineProperty(exports, "VolatilityGoal", { enumerable: true, get: function () { return VolatilityGoal_1.VolatilityGoal; } });
|
|
62
|
+
var PortfolioSearch_1 = require("./optimization/search/portfolio/PortfolioSearch");
|
|
63
|
+
Object.defineProperty(exports, "PortfolioSearch", { enumerable: true, get: function () { return PortfolioSearch_1.PortfolioSearch; } });
|
|
46
64
|
var LoginServiceMocks_1 = require("./crud/test/LoginServiceMocks");
|
|
47
65
|
Object.defineProperty(exports, "applyLoginMocks", { enumerable: true, get: function () { return LoginServiceMocks_1.applyLoginMocks; } });
|
|
48
66
|
var PlatformMocks_1 = require("./crud/test/PlatformMocks");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAA0F;AAAjF,4HAAA,oBAAoB,OAAwB;AACrD,mFAAkM;AAA7F,8HAAA,qBAAqB,OAAyB;AACnJ,qGAA+H;AAAtH,+IAAA,6BAA6B,OAAiC;AACvE,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,8EAAuN;AAAhG,sIAAA,wBAAwB,OAA6B;AAC5K,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,4DAA2P;AAAtE,oHAAA,gBAAgB,OAAoB;AACzN,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,wDAA6K;AAA1E,qHAAA,mBAAmB,OAAuB;AAC7I,0EAAkM;AAA3F,kIAAA,uBAAuB,OAA2B;AACzJ,8DAAoK;AAAzE,sHAAA,iBAAiB,OAAqB;AACjI,kEAAiL;AAA9E,0HAAA,mBAAmB,OAAuB;AAC7I,0DAA4L;AAAnE,kHAAA,eAAe,OAAmB;AAC3J,8EAA4N;AAAjG,sIAAA,yBAAyB,OAA6B;AACjL,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wDAA2I;AAAhE,gHAAA,cAAc,OAAkB;AAC3G,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wEAAuM;AAAxF,gIAAA,sBAAsB,OAA0B;AAC/J,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAA0F;AAAjF,4HAAA,oBAAoB,OAAwB;AACrD,mFAAkM;AAA7F,8HAAA,qBAAqB,OAAyB;AACnJ,qGAA+H;AAAtH,+IAAA,6BAA6B,OAAiC;AACvE,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,8EAAuN;AAAhG,sIAAA,wBAAwB,OAA6B;AAC5K,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,4DAA2P;AAAtE,oHAAA,gBAAgB,OAAoB;AACzN,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,wDAA6K;AAA1E,qHAAA,mBAAmB,OAAuB;AAC7I,0EAAkM;AAA3F,kIAAA,uBAAuB,OAA2B;AACzJ,8DAAoK;AAAzE,sHAAA,iBAAiB,OAAqB;AACjI,kEAAiL;AAA9E,0HAAA,mBAAmB,OAAuB;AAC7I,0DAA4L;AAAnE,kHAAA,eAAe,OAAmB;AAC3J,8EAA4N;AAAjG,sIAAA,yBAAyB,OAA6B;AACjL,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wDAA2I;AAAhE,gHAAA,cAAc,OAAkB;AAC3G,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wEAAuM;AAAxF,gIAAA,sBAAsB,OAA0B;AAC/J,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,iFAAkG;AAAzF,gHAAA,cAAc,OAAkB;AACzC,yGAAsI;AAA7H,wIAAA,0BAA0B,OAA8B;AACjE,qFAA2G;AAAlG,0HAAA,mBAAmB,OAAuB;AACnD,+FAAmH;AAA1G,sHAAA,iBAAiB,OAAqB;AAC/C,yFAA0G;AAAjG,gHAAA,cAAc,OAAkB;AACzC,mDAA+D;AAAtD,sGAAA,SAAS,OAAa;AAC/B,+EAA4F;AAAnF,wGAAA,UAAU,OAAc;AACjC,uFAAwG;AAA/F,gHAAA,cAAc,OAAkB;AACzC,mFAAqG;AAA5F,kHAAA,eAAe,OAAmB;AAE3C,mEAAmF;AAA1E,oHAAA,eAAe,OAAmB;AAC3C,2DAAqF;AAA5E,mHAAA,kBAAkB,OAAsB;AACjD,mDAAyE;AAAhE,2GAAA,cAAc,OAAkB;AACzC,uDAA+E;AAAtE,+GAAA,gBAAgB,OAAoB;AAC7C,mDAAyE;AAAhE,2GAAA,cAAc,OAAkB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Individual = void 0;
|
|
4
|
+
class Individual {
|
|
5
|
+
constructor(genotype) {
|
|
6
|
+
this.genotype = genotype;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.Individual = Individual;
|
|
10
|
+
//# sourceMappingURL=Individual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Individual.js","sourceRoot":"","sources":["../../../src/optimization/population/Individual.ts"],"names":[],"mappings":";;;AAAA,MAAsB,UAAU;IAI5B,YAAY,QAAW;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CAGJ;AATD,gCASC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Individual, IndividualBuilder } from "./Individual";
|
|
2
|
+
import { Space } from "../search/Space";
|
|
3
|
+
export declare class PopulationGenerator<G, P, F> {
|
|
4
|
+
private space;
|
|
5
|
+
private builder;
|
|
6
|
+
constructor(generator: Space<G>, builder: IndividualBuilder<G, P, F>);
|
|
7
|
+
generate(count: number): Individual<G, P, F>[];
|
|
8
|
+
getSpace(): Space<G>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PopulationGenerator = void 0;
|
|
4
|
+
class PopulationGenerator {
|
|
5
|
+
constructor(generator, builder) {
|
|
6
|
+
this.space = generator;
|
|
7
|
+
this.builder = builder;
|
|
8
|
+
}
|
|
9
|
+
generate(count) {
|
|
10
|
+
let genotypes = this.space.generateMany(count);
|
|
11
|
+
let population = [];
|
|
12
|
+
for (let genotype of genotypes)
|
|
13
|
+
population.push(this.builder.apply(genotype));
|
|
14
|
+
return population;
|
|
15
|
+
}
|
|
16
|
+
getSpace() {
|
|
17
|
+
return this.space;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.PopulationGenerator = PopulationGenerator;
|
|
21
|
+
//# sourceMappingURL=PopulationGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopulationGenerator.js","sourceRoot":"","sources":["../../../src/optimization/population/PopulationGenerator.ts"],"names":[],"mappings":";;;AAGA,MAAa,mBAAmB;IAI5B,YAAY,SAAmB,EAAE,OAAmC;QAChE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEM,QAAQ,CAAC,KAAa;QACzB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,KAAK,IAAI,QAAQ,IAAI,SAAS;YAC1B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,OAAO,UAAU,CAAC;IACtB,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;CACJ;AApBD,kDAoBC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Order } from "../../sort/Order";
|
|
2
|
+
export declare abstract class Goal<T, R> {
|
|
3
|
+
protected order: Order<R>;
|
|
4
|
+
constructor(order: Order<R>);
|
|
5
|
+
getOrder(): Order<R>;
|
|
6
|
+
abstract compute(x: T): R;
|
|
7
|
+
compare(x: T, y: T): number;
|
|
8
|
+
abstract init(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Goal = void 0;
|
|
4
|
+
class Goal {
|
|
5
|
+
constructor(order) {
|
|
6
|
+
this.order = order;
|
|
7
|
+
}
|
|
8
|
+
getOrder() {
|
|
9
|
+
return this.order;
|
|
10
|
+
}
|
|
11
|
+
compare(x, y) {
|
|
12
|
+
return this.order.compare(this.compute(x), this.compute(y));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Goal = Goal;
|
|
16
|
+
//# sourceMappingURL=Goal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Goal.js","sourceRoot":"","sources":["../../../src/optimization/search/Goal.ts"],"names":[],"mappings":";;;AAEA,MAAsB,IAAI;IAGtB,YAAY,KAAe;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAIM,OAAO,CAAC,CAAI,EAAE,CAAI;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;CAGJ;AAlBD,oBAkBC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PopulationGenerator } from "../population/PopulationGenerator";
|
|
2
|
+
import { Individual } from "../population/Individual";
|
|
3
|
+
import { Variation } from "./variate/Variation";
|
|
4
|
+
import { Goal } from "./Goal";
|
|
5
|
+
export interface Coupling<G, P, F> {
|
|
6
|
+
operIndex: number;
|
|
7
|
+
parents: Individual<G, P, F>[];
|
|
8
|
+
}
|
|
9
|
+
export declare abstract class MultiObjectivePopulationSearch<G, P, F, R> {
|
|
10
|
+
protected generator: PopulationGenerator<G, P, F[]>;
|
|
11
|
+
protected goals: Goal<Individual<G, P, F[]>, F>[];
|
|
12
|
+
protected opers: Variation<G>[];
|
|
13
|
+
constructor(generator: PopulationGenerator<G, P, F[]>, goals: Goal<Individual<G, P, F[]>, F>[], opers: Variation<G>[]);
|
|
14
|
+
apply(iters: number, popSize: number): Promise<Individual<G, P, F[]>[]>;
|
|
15
|
+
protected abstract evaluate(population: Individual<G, P, F[]>[]): Promise<void>;
|
|
16
|
+
protected abstract select(population: Individual<G, P, F[]>[]): Coupling<G, P, F[]>[];
|
|
17
|
+
protected abstract reproduce(couplings: Coupling<G, P, F[]>[]): Individual<G, P, F[]>[];
|
|
18
|
+
protected abstract replace(population: Individual<G, P, F[]>[], offspring: Individual<G, P, F[]>[], popSize: number): Individual<G, P, F[]>[];
|
|
19
|
+
protected abstract choose(population: Individual<G, P, F[]>[]): Individual<G, P, F[]>[];
|
|
20
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
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.MultiObjectivePopulationSearch = void 0;
|
|
13
|
+
class MultiObjectivePopulationSearch {
|
|
14
|
+
constructor(generator, goals, opers) {
|
|
15
|
+
this.generator = generator;
|
|
16
|
+
this.goals = goals;
|
|
17
|
+
this.opers = opers;
|
|
18
|
+
}
|
|
19
|
+
apply(iters, popSize) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
let population = this.generator.generate(popSize);
|
|
22
|
+
yield this.evaluate(population);
|
|
23
|
+
for (let iter = 1; iter <= iters; iter++) {
|
|
24
|
+
let couplings = this.select(population);
|
|
25
|
+
let offspring = this.reproduce(couplings);
|
|
26
|
+
yield this.evaluate(offspring);
|
|
27
|
+
population = this.replace(population, offspring, popSize);
|
|
28
|
+
}
|
|
29
|
+
return this.choose(population);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.MultiObjectivePopulationSearch = MultiObjectivePopulationSearch;
|
|
34
|
+
//# sourceMappingURL=MultiObjectivePopulationSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiObjectivePopulationSearch.js","sourceRoot":"","sources":["../../../src/optimization/search/MultiObjectivePopulationSearch.ts"],"names":[],"mappings":";;;;;;;;;;;;AAUA,MAAsB,8BAA8B;IAKhD,YAAY,SAAyC,EAAE,KAAuC,EAAE,KAAqB;QACjH,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEY,KAAK,CAAC,KAAa,EAAE,OAAe;;YAC7C,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAChC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;gBACvC,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACxC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC/B,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;KAAA;CAQJ;AA7BD,wEA6BC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Space.js","sourceRoot":"","sources":["../../../src/optimization/search/Space.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PortfolioIndividual = void 0;
|
|
4
|
+
const Individual_1 = require("../../population/Individual");
|
|
5
|
+
class PortfolioIndividual extends Individual_1.Individual {
|
|
6
|
+
constructor(genotype) {
|
|
7
|
+
super(genotype);
|
|
8
|
+
}
|
|
9
|
+
grow() {
|
|
10
|
+
return this.genotype;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.PortfolioIndividual = PortfolioIndividual;
|
|
14
|
+
//# sourceMappingURL=PortfolioIndividual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortfolioIndividual.js","sourceRoot":"","sources":["../../../../src/optimization/search/portfolio/PortfolioIndividual.ts"],"names":[],"mappings":";;;AAAA,4DAAyD;AAEzD,MAAa,mBAAoB,SAAQ,uBAAwC;IAC/E,YAAY,QAAkB;QAC5B,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AARD,kDAQC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IndividualBuilder } from "../../population/Individual";
|
|
2
|
+
import { PortfolioIndividual } from "./PortfolioIndividual";
|
|
3
|
+
export declare class PortfolioIndividualBuilder implements IndividualBuilder<number[], number[], number[]> {
|
|
4
|
+
apply(genotype: number[]): PortfolioIndividual;
|
|
5
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PortfolioIndividualBuilder = void 0;
|
|
4
|
+
const PortfolioIndividual_1 = require("./PortfolioIndividual");
|
|
5
|
+
class PortfolioIndividualBuilder {
|
|
6
|
+
apply(genotype) {
|
|
7
|
+
return new PortfolioIndividual_1.PortfolioIndividual(genotype);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.PortfolioIndividualBuilder = PortfolioIndividualBuilder;
|
|
11
|
+
//# sourceMappingURL=PortfolioIndividualBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortfolioIndividualBuilder.js","sourceRoot":"","sources":["../../../../src/optimization/search/portfolio/PortfolioIndividualBuilder.ts"],"names":[],"mappings":";;;AACA,+DAA4D;AAE5D,MAAa,0BAA0B;IAC9B,KAAK,CAAC,QAAkB;QAC7B,OAAO,IAAI,yCAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;CACF;AAJD,gEAIC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Individual } from '../../population/Individual';
|
|
2
|
+
import { PopulationGenerator } from '../../population/PopulationGenerator';
|
|
3
|
+
import { Goal } from '../Goal';
|
|
4
|
+
import { Coupling, MultiObjectivePopulationSearch } from '../MultiObjectivePopulationSearch';
|
|
5
|
+
import { Space } from '../Space';
|
|
6
|
+
import { Variation } from '../variate/Variation';
|
|
7
|
+
export declare class PortfolioSearch extends MultiObjectivePopulationSearch<number[], number[], number, Individual<number[], number[], number[]>> {
|
|
8
|
+
private selector;
|
|
9
|
+
private archive;
|
|
10
|
+
private environmentalSelector;
|
|
11
|
+
private space;
|
|
12
|
+
constructor(space: Space<number[]>, generator: PopulationGenerator<number[], number[], number[]>, goals: Goal<Individual<number[], number[], number[]>, number>[], operators: Variation<number[]>[]);
|
|
13
|
+
protected evaluate(population: Individual<number[], number[], number[]>[]): Promise<void>;
|
|
14
|
+
protected select(population: Individual<number[], number[], number[]>[]): Coupling<number[], number[], number[]>[];
|
|
15
|
+
protected reproduce(couplings: Coupling<number[], number[], number[]>[]): Individual<number[], number[], number[]>[];
|
|
16
|
+
protected replace(population: Individual<number[], number[], number[]>[], offspring: Individual<number[], number[], number[]>[], popSize: number): Individual<number[], number[], number[]>[];
|
|
17
|
+
protected choose(population: Individual<number[], number[], number[]>[]): Individual<number[], number[], number[]>[];
|
|
18
|
+
}
|
|
@@ -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.PortfolioSearch = void 0;
|
|
13
|
+
const MultiObjectivePopulationSearch_1 = require("../MultiObjectivePopulationSearch");
|
|
14
|
+
const EnviromentSelector_1 = require("./noDominanceSelector/EnviromentSelector");
|
|
15
|
+
const PortfolioIndividual_1 = require("./PortfolioIndividual");
|
|
16
|
+
const TournamentSelector_1 = require("./tournament/TournamentSelector");
|
|
17
|
+
class PortfolioSearch extends MultiObjectivePopulationSearch_1.MultiObjectivePopulationSearch {
|
|
18
|
+
constructor(space, generator, goals, operators) {
|
|
19
|
+
super(generator, goals, operators);
|
|
20
|
+
this.archive = [];
|
|
21
|
+
this.space = space;
|
|
22
|
+
this.selector = new TournamentSelector_1.TournamentSelector(goals);
|
|
23
|
+
this.environmentalSelector = new EnviromentSelector_1.EnvironmentSelector(space, goals);
|
|
24
|
+
}
|
|
25
|
+
evaluate(population) {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
for (let individual of population)
|
|
28
|
+
if (individual.fitness === undefined || individual.fitness.length !== this.goals.length) {
|
|
29
|
+
let fitnessValues = [];
|
|
30
|
+
for (let goal of this.goals) {
|
|
31
|
+
const value = goal.compute(individual);
|
|
32
|
+
fitnessValues.push(value);
|
|
33
|
+
}
|
|
34
|
+
individual.fitness = fitnessValues;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
select(population) {
|
|
39
|
+
const couplings = [];
|
|
40
|
+
for (let individual of population) {
|
|
41
|
+
const operIndex = Math.floor(Math.random() * this.opers.length);
|
|
42
|
+
const operator = this.opers[operIndex];
|
|
43
|
+
let coupling = { operIndex, parents: [individual] };
|
|
44
|
+
for (let i = 1; i < operator.arity(); i++)
|
|
45
|
+
coupling.parents.push(this.selector.selectOne(population));
|
|
46
|
+
couplings.push(coupling);
|
|
47
|
+
}
|
|
48
|
+
return couplings;
|
|
49
|
+
}
|
|
50
|
+
reproduce(couplings) {
|
|
51
|
+
let offspring = [];
|
|
52
|
+
for (let coupling of couplings) {
|
|
53
|
+
const parentGenotypes = coupling.parents.map(p => p.genotype);
|
|
54
|
+
const childrenGenotypes = this.opers[coupling.operIndex].apply(parentGenotypes);
|
|
55
|
+
for (let childGenotype of childrenGenotypes)
|
|
56
|
+
offspring.push(new PortfolioIndividual_1.PortfolioIndividual(this.space.repair(childGenotype)));
|
|
57
|
+
}
|
|
58
|
+
return offspring;
|
|
59
|
+
}
|
|
60
|
+
replace(population, offspring, popSize) {
|
|
61
|
+
this.archive = this.environmentalSelector.reduceEquals(this.environmentalSelector.chooseNonDominated(population.concat(offspring).concat(this.archive)).individuals);
|
|
62
|
+
console.log("Population before enviromental selection: ", population.length, "Population after adding offspring: ", population.length + offspring.length, "Archive size: ", this.archive.length);
|
|
63
|
+
return this.environmentalSelector.apply(population.concat(offspring), population.length);
|
|
64
|
+
// this.archive = this.environmentalSelector.chooseSurvivors(population, offspring, population.length);
|
|
65
|
+
// return this.archive;
|
|
66
|
+
}
|
|
67
|
+
choose(population) {
|
|
68
|
+
return this.archive;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.PortfolioSearch = PortfolioSearch;
|
|
72
|
+
//# sourceMappingURL=PortfolioSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortfolioSearch.js","sourceRoot":"","sources":["../../../../src/optimization/search/portfolio/PortfolioSearch.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,sFAA6F;AAG7F,iFAA+E;AAC/E,+DAA4D;AAC5D,wEAAqE;AAErE,MAAa,eAAgB,SAAQ,+DAAoG;IAMvI,YAAY,KAAsB,EAAE,SAA4D,EAAE,KAA+D,EAAE,SAAgC;QACjM,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAL7B,YAAO,GAA+C,EAAE,CAAC;QAM/D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,uCAAkB,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,qBAAqB,GAAG,IAAI,wCAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IAEe,QAAQ,CAAC,UAAsD;;YAC7E,KAAK,IAAI,UAAU,IAAI,UAAU;gBAC/B,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBACxF,IAAI,aAAa,GAAa,EAAE,CAAC;oBACjC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBACvC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,CAAC;oBACD,UAAU,CAAC,OAAO,GAAG,aAAa,CAAC;gBACrC,CAAC;QACL,CAAC;KAAA;IAES,MAAM,CAAC,UAAsD;QACrE,MAAM,SAAS,GAA6C,EAAE,CAAC;QAE/D,KAAK,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,QAAQ,GAA2C,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE;gBAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACtG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,SAAS,CAAC,SAAmD;QACrE,IAAI,SAAS,GAA+C,EAAE,CAAC;QAC/D,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAChF,KAAK,IAAI,aAAa,IAAI,iBAAiB;gBACzC,SAAS,CAAC,IAAI,CAAC,IAAI,yCAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,OAAO,CAAC,UAAsD,EAAE,SAAqD,EAAE,OAAe;QAC9I,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACrK,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,UAAU,CAAC,MAAM,EAAE,qCAAqC,EAAE,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEjM,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACzF,uGAAuG;QACvG,uBAAuB;IACzB,CAAC;IAES,MAAM,CAAC,UAAsD;QACrE,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AA7DD,0CA6DC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Space } from '../Space';
|
|
2
|
+
export interface PorfolioRestrictions {
|
|
3
|
+
constraints: {
|
|
4
|
+
minWeigth: number;
|
|
5
|
+
maxWeight: number;
|
|
6
|
+
}[];
|
|
7
|
+
groupedConstraints: {
|
|
8
|
+
constraintIndices: number[];
|
|
9
|
+
minWeight: number;
|
|
10
|
+
maxWeight: number;
|
|
11
|
+
}[];
|
|
12
|
+
}
|
|
13
|
+
export declare class PortfolioSpace implements Space<number[]> {
|
|
14
|
+
private maxIterations;
|
|
15
|
+
private tolerance;
|
|
16
|
+
private gradient;
|
|
17
|
+
private groupGradient;
|
|
18
|
+
private restrictions;
|
|
19
|
+
constructor(restrictions: PorfolioRestrictions, maxIterations?: number, tolerance?: number, gradient?: number, groupGradient?: number);
|
|
20
|
+
equals(one: number[], two: number[]): boolean;
|
|
21
|
+
getRestrictions(): PorfolioRestrictions;
|
|
22
|
+
generateMany(count: number): number[][];
|
|
23
|
+
generateOne(): number[];
|
|
24
|
+
repairMany(population: number[][]): number[][];
|
|
25
|
+
repair(individual: number[]): number[];
|
|
26
|
+
private repairGroupConstraints;
|
|
27
|
+
private decreaseGroupWeights;
|
|
28
|
+
private increaseGroupeWeights;
|
|
29
|
+
private applyBoxConstraints;
|
|
30
|
+
private checkRestrictions;
|
|
31
|
+
private normalize;
|
|
32
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PortfolioSpace = void 0;
|
|
4
|
+
class PortfolioSpace {
|
|
5
|
+
constructor(restrictions, maxIterations = 500, tolerance = 1e-7, gradient = 0.6, groupGradient = 0.9) {
|
|
6
|
+
this.maxIterations = maxIterations;
|
|
7
|
+
this.tolerance = tolerance;
|
|
8
|
+
this.gradient = gradient;
|
|
9
|
+
this.groupGradient = groupGradient;
|
|
10
|
+
this.restrictions = restrictions;
|
|
11
|
+
}
|
|
12
|
+
equals(one, two) {
|
|
13
|
+
for (let i = 0; i < one.length; i++)
|
|
14
|
+
if (Math.abs(one[i] - two[i]) > 1e-4)
|
|
15
|
+
return false;
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
getRestrictions() {
|
|
19
|
+
return this.restrictions;
|
|
20
|
+
}
|
|
21
|
+
generateMany(count) {
|
|
22
|
+
let porforlios = [];
|
|
23
|
+
for (let i = 0; i < count; i++)
|
|
24
|
+
porforlios.push(this.generateOne());
|
|
25
|
+
return porforlios;
|
|
26
|
+
}
|
|
27
|
+
generateOne() {
|
|
28
|
+
let portfolio = [];
|
|
29
|
+
for (let constraint of this.restrictions.constraints)
|
|
30
|
+
portfolio.push(Math.random() * (constraint.maxWeight - constraint.minWeigth) + constraint.minWeigth);
|
|
31
|
+
return this.repair(portfolio);
|
|
32
|
+
}
|
|
33
|
+
repairMany(population) {
|
|
34
|
+
return population.map(individual => this.repair(individual));
|
|
35
|
+
}
|
|
36
|
+
repair(individual) {
|
|
37
|
+
individual = this.normalize(individual);
|
|
38
|
+
for (let iter = 1; iter <= this.maxIterations && !this.checkRestrictions(individual); iter++) {
|
|
39
|
+
individual = this.applyBoxConstraints(individual);
|
|
40
|
+
individual = this.normalize(individual);
|
|
41
|
+
if (this.restrictions.groupedConstraints.length > 0) {
|
|
42
|
+
individual = this.repairGroupConstraints(individual);
|
|
43
|
+
individual = this.normalize(individual);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return individual;
|
|
47
|
+
}
|
|
48
|
+
repairGroupConstraints(currentWeights) {
|
|
49
|
+
const current = [...currentWeights];
|
|
50
|
+
for (const group of this.restrictions.groupedConstraints) {
|
|
51
|
+
const groupSum = group.constraintIndices.reduce((sum, index) => sum + current[index], 0);
|
|
52
|
+
if (groupSum < group.minWeight - this.tolerance) {
|
|
53
|
+
this.increaseGroupeWeights(current, group, groupSum);
|
|
54
|
+
}
|
|
55
|
+
else if (groupSum > group.maxWeight + this.tolerance) {
|
|
56
|
+
this.decreaseGroupWeights(current, group, groupSum);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return current;
|
|
60
|
+
}
|
|
61
|
+
decreaseGroupWeights(current, group, groupSum) {
|
|
62
|
+
let excess = groupSum - group.maxWeight;
|
|
63
|
+
if (excess * this.groupGradient > this.tolerance)
|
|
64
|
+
excess *= this.groupGradient;
|
|
65
|
+
const availableDecrease = group.constraintIndices.map(index => current[index] - this.restrictions.constraints[index].minWeigth);
|
|
66
|
+
const totalAvailable = availableDecrease.reduce((sum, val) => sum + val, 0);
|
|
67
|
+
if (totalAvailable > excess) {
|
|
68
|
+
for (let j = 0; j < group.constraintIndices.length; j++) {
|
|
69
|
+
const idx = group.constraintIndices[j];
|
|
70
|
+
const proportion = availableDecrease[j] / totalAvailable;
|
|
71
|
+
current[idx] -= proportion * excess;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
for (const idx of group.constraintIndices) {
|
|
76
|
+
current[idx] = this.restrictions.constraints[idx].minWeigth;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
increaseGroupeWeights(currentWeight, group, groupSum) {
|
|
81
|
+
let deficit = group.minWeight - groupSum;
|
|
82
|
+
if (deficit * this.groupGradient > this.tolerance)
|
|
83
|
+
deficit *= this.groupGradient;
|
|
84
|
+
const availableIncrease = group.constraintIndices.map(index => this.restrictions.constraints[index].maxWeight - currentWeight[index]);
|
|
85
|
+
const totalAvailable = availableIncrease.reduce((sum, val) => sum + val, 0);
|
|
86
|
+
if (totalAvailable > deficit) {
|
|
87
|
+
for (let j = 0; j < group.constraintIndices.length; j++) {
|
|
88
|
+
const idx = group.constraintIndices[j];
|
|
89
|
+
const proportion = availableIncrease[j] / totalAvailable;
|
|
90
|
+
currentWeight[idx] += proportion * deficit;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
for (const idx of group.constraintIndices) {
|
|
95
|
+
currentWeight[idx] = this.restrictions.constraints[idx].maxWeight;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
applyBoxConstraints(currentWeights) {
|
|
100
|
+
return currentWeights.map((weight, index) => {
|
|
101
|
+
const min = this.restrictions.constraints[index].minWeigth;
|
|
102
|
+
const max = this.restrictions.constraints[index].maxWeight;
|
|
103
|
+
if (weight < min) {
|
|
104
|
+
let diference = (min - weight) * this.gradient;
|
|
105
|
+
return diference < this.tolerance ? min : weight + diference;
|
|
106
|
+
}
|
|
107
|
+
else if (weight > max) {
|
|
108
|
+
let diference = (weight - max) * this.gradient;
|
|
109
|
+
return diference < this.tolerance ? max : weight - diference;
|
|
110
|
+
}
|
|
111
|
+
return weight;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
checkRestrictions(individual) {
|
|
115
|
+
for (let i = 0; i < individual.length; i++)
|
|
116
|
+
if (individual[i] < this.restrictions.constraints[i].minWeigth - this.tolerance || individual[i] > this.restrictions.constraints[i].maxWeight + this.tolerance)
|
|
117
|
+
return false;
|
|
118
|
+
for (let group of this.restrictions.groupedConstraints) {
|
|
119
|
+
let groupSum = group.constraintIndices.reduce((sum, index) => sum + individual[index], 0);
|
|
120
|
+
if (groupSum < group.minWeight - this.tolerance || groupSum > group.maxWeight + this.tolerance)
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
normalize(weights) {
|
|
126
|
+
const total = weights.reduce((sum, weight) => sum + weight, 0);
|
|
127
|
+
return weights.map(weight => weight / total);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.PortfolioSpace = PortfolioSpace;
|
|
131
|
+
//# sourceMappingURL=PortfolioSpace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortfolioSpace.js","sourceRoot":"","sources":["../../../../src/optimization/search/portfolio/PortfolioSpace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface IAssetConstraint {
|
|
2
|
+
assetId: number;
|
|
3
|
+
asset: string;
|
|
4
|
+
allocation?: number;
|
|
5
|
+
constraint: {
|
|
6
|
+
minWeight: number;
|
|
7
|
+
maxWeight: number;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export interface IGroupedConstraint {
|
|
11
|
+
constraintIndices: number[];
|
|
12
|
+
minWeight: number;
|
|
13
|
+
maxWeight: number;
|
|
14
|
+
}
|
|
15
|
+
export interface IPortfolioSettings {
|
|
16
|
+
constraints: IAssetConstraint[];
|
|
17
|
+
groupedConstraints: IGroupedConstraint[];
|
|
18
|
+
isValid?: boolean;
|
|
19
|
+
validationMessage?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface IPortfolioData {
|
|
22
|
+
businessId: number;
|
|
23
|
+
userId: number;
|
|
24
|
+
type: string;
|
|
25
|
+
settings: IPortfolioSettings;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortfolioTypes.js","sourceRoot":"","sources":["../../../../src/optimization/search/portfolio/PortfolioTypes.ts"],"names":[],"mappings":""}
|
|
@@ -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 ReturnGoal extends Goal<Individual<number[], number[], number[]>, number> {
|
|
7
|
+
private marketData;
|
|
8
|
+
private assetIds;
|
|
9
|
+
private cachedReturns;
|
|
10
|
+
constructor(order: Order<number>, portfolioData?: IPortfolioData, marketData?: IMarketData[]);
|
|
11
|
+
private normaliceMarketData;
|
|
12
|
+
private calculateDailyReturns;
|
|
13
|
+
private calculateAnnualReturn;
|
|
14
|
+
private getAssetReturn;
|
|
15
|
+
compute(individual: Individual<number[], number[], number[]>): number;
|
|
16
|
+
init(): Promise<void>;
|
|
17
|
+
}
|