| """
|
| Solver Configuration for Portfolio Optimization
|
|
|
| This module sets up the SolverForge solver with:
|
| - Solution class (PortfolioOptimizationPlan)
|
| - Entity class (StockSelection)
|
| - Constraint provider (define_constraints)
|
| - Termination config (configurable, default 30 seconds)
|
|
|
| The solver explores different stock selections and finds the best
|
| portfolio that satisfies all constraints while maximizing return.
|
| """
|
| from solverforge_legacy.solver import SolverManager, SolverFactory, SolutionManager
|
| from solverforge_legacy.solver.config import (
|
| SolverConfig,
|
| ScoreDirectorFactoryConfig,
|
| TerminationConfig,
|
| Duration,
|
| )
|
|
|
| from .domain import PortfolioOptimizationPlan, StockSelection
|
| from .constraints import define_constraints
|
|
|
|
|
| def create_solver_config(termination_seconds: int = 30) -> SolverConfig:
|
| """
|
| Create a solver configuration with specified termination time.
|
|
|
| Args:
|
| termination_seconds: How long to run the solver (default 30 seconds)
|
|
|
| Returns:
|
| SolverConfig configured for portfolio optimization
|
| """
|
| return SolverConfig(
|
|
|
| solution_class=PortfolioOptimizationPlan,
|
|
|
|
|
| entity_class_list=[StockSelection],
|
|
|
|
|
| score_director_factory_config=ScoreDirectorFactoryConfig(
|
| constraint_provider_function=define_constraints
|
| ),
|
|
|
|
|
| termination_config=TerminationConfig(spent_limit=Duration(seconds=termination_seconds)),
|
| )
|
|
|
|
|
|
|
| solver_config: SolverConfig = create_solver_config()
|
|
|
|
|
| solver_manager: SolverManager = SolverManager.create(SolverFactory.create(solver_config))
|
|
|
|
|
| solution_manager: SolutionManager = SolutionManager.create(solver_manager)
|
|
|