Team Ai
Apppublic

blackopsrepl/portfolio-optimization-python

sourceHugging Faceapache-2.0updated 10mo agoView on Hugging Face
1likes
1"""
2Solver Configuration for Portfolio Optimization
3
4This module sets up the SolverForge solver with:
5- Solution class (PortfolioOptimizationPlan)
6- Entity class (StockSelection)
7- Constraint provider (define_constraints)
8- Termination config (configurable, default 30 seconds)
9
10The solver explores different stock selections and finds the best
11portfolio that satisfies all constraints while maximizing return.
12"""
13from solverforge_legacy.solver import SolverManager, SolverFactory, SolutionManager
14from solverforge_legacy.solver.config import (
15    SolverConfig,
16    ScoreDirectorFactoryConfig,
17    TerminationConfig,
18    Duration,
19)
20
21from .domain import PortfolioOptimizationPlan, StockSelection
22from .constraints import define_constraints
23
24
25def create_solver_config(termination_seconds: int = 30) -> SolverConfig:
26    """
27    Create a solver configuration with specified termination time.
28
29    Args:
30        termination_seconds: How long to run the solver (default 30 seconds)
31
32    Returns:
33        SolverConfig configured for portfolio optimization
34    """
35    return SolverConfig(
36        # The solution class that contains all entities
37        solution_class=PortfolioOptimizationPlan,
38
39        # The entity classes that the solver modifies
40        entity_class_list=[StockSelection],
41
42        # The constraint provider that defines business rules
43        score_director_factory_config=ScoreDirectorFactoryConfig(
44            constraint_provider_function=define_constraints
45        ),
46
47        # How long to run the solver
48        termination_config=TerminationConfig(spent_limit=Duration(seconds=termination_seconds)),
49    )
50
51
52# Default solver config (30 seconds)
53solver_config: SolverConfig = create_solver_config()
54
55# Create default solver manager for handling solve requests
56solver_manager: SolverManager = SolverManager.create(SolverFactory.create(solver_config))
57
58# Create solution manager for analyzing solutions
59solution_manager: SolutionManager = SolutionManager.create(solver_manager)
60