From bad3c0cf7dd75220e56110098b19b81491c9abc5 Mon Sep 17 00:00:00 2001 From: robertmartin8 Date: Mon, 20 Jan 2020 20:46:35 +0000 Subject: [PATCH] added hidden API for opt_method --- pypfopt/base_optimizer.py | 2 ++ pypfopt/efficient_frontier.py | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pypfopt/base_optimizer.py b/pypfopt/base_optimizer.py index b0e6605..aa4b735 100644 --- a/pypfopt/base_optimizer.py +++ b/pypfopt/base_optimizer.py @@ -107,6 +107,7 @@ class BaseScipyOptimizer(BaseOptimizer): - ``bounds`` - float tuple OR (float tuple) list - ``initial_guess`` - np.ndarray - ``constraints`` - dict list + - ``opt_method`` - the optimisation algorithm to use. Defaults to SLSQP. """ def __init__(self, n_assets, tickers=None, weight_bounds=(0, 1)): @@ -121,6 +122,7 @@ class BaseScipyOptimizer(BaseOptimizer): # Optimisation parameters self.initial_guess = np.array([1 / self.n_assets] * self.n_assets) self.constraints = [{"type": "eq", "fun": lambda x: np.sum(x) - 1}] + self.opt_method = "SLSQP" def _make_valid_bounds(self, test_bounds): """ diff --git a/pypfopt/efficient_frontier.py b/pypfopt/efficient_frontier.py index e8c0eeb..fb67e7b 100644 --- a/pypfopt/efficient_frontier.py +++ b/pypfopt/efficient_frontier.py @@ -31,6 +31,7 @@ class EfficientFrontier(base_optimizer.BaseScipyOptimizer): - ``initial_guess`` - np.ndarray - ``constraints`` - dict list + - ``opt_method`` - the optimisation algorithm to use. Defaults to SLSQP. - Output: ``weights`` - np.ndarray @@ -110,7 +111,7 @@ class EfficientFrontier(base_optimizer.BaseScipyOptimizer): objective_functions.negative_sharpe, x0=self.initial_guess, args=args, - method="SLSQP", + method=self.opt_method, bounds=self.bounds, constraints=self.constraints, ) @@ -129,7 +130,7 @@ class EfficientFrontier(base_optimizer.BaseScipyOptimizer): objective_functions.volatility, x0=self.initial_guess, args=args, - method="SLSQP", + method=self.opt_method, bounds=self.bounds, constraints=self.constraints, ) @@ -176,7 +177,7 @@ class EfficientFrontier(base_optimizer.BaseScipyOptimizer): objective_function, x0=self.initial_guess, args=args, - method="SLSQP", + method=self.opt_method, bounds=self.bounds, constraints=self.constraints, ) @@ -235,7 +236,7 @@ class EfficientFrontier(base_optimizer.BaseScipyOptimizer): objective_functions.negative_sharpe, x0=self.initial_guess, args=args, - method="SLSQP", + method=self.opt_method, bounds=self.bounds, constraints=constraints, ) @@ -294,7 +295,7 @@ class EfficientFrontier(base_optimizer.BaseScipyOptimizer): objective_functions.volatility, x0=self.initial_guess, args=args, - method="SLSQP", + method=self.opt_method, bounds=self.bounds, constraints=constraints, )