aps-agent/server/engines/__init__.py

47 lines
1.6 KiB
Python
Raw Normal View History

2026-07-21 11:05:57 +08:00
# ============================================================
# 排产引擎包(moduleId: server-engines, 可重生 ✅)
# RULE:CP = OR-Tools;HYBRID = RULE 热启动 + CP 改良;GA = 遗传算法;
# NSGA2 = NSGA-II 多目标遗传(矩阵 85,round-40 方向 U)
2026-07-21 11:05:57 +08:00
# ============================================================
from server.engines.base import EngineParams, ISchedulingEngine
from server.engines.cp_engine import CpSatEngine, HybridEngine
from server.engines.external_engine import ExternalEngine
from server.engines.ga_engine import GeneticAlgorithmEngine
from server.engines.nsga2_engine import NSGA2Engine, nsga2_defaults, solve_nsga2
from server.engines.pool_engine import PoolEngine
from server.engines.rule_engine import RuleEngine
2026-07-21 11:05:57 +08:00
__all__ = [
"CpSatEngine",
"EngineParams",
"ExternalEngine",
"GeneticAlgorithmEngine",
"HybridEngine",
"ISchedulingEngine",
"NSGA2Engine",
"PoolEngine",
"RuleEngine",
"get_engine",
"nsga2_defaults",
"solve_nsga2",
]
2026-07-21 11:05:57 +08:00
def get_engine(engine_type: str) -> ISchedulingEngine:
"""引擎工厂:RULE / CP / GA / HYBRID / NSGA2 / EXTERNAL。"""
kind = (engine_type or "RULE").upper()
if kind.startswith("EXTERNAL"):
skill_id = None
if ":" in engine_type:
skill_id = engine_type.split(":", 1)[1].strip() or None
return ExternalEngine(skill_id=skill_id)
if kind == "CP":
return CpSatEngine()
if kind == "HYBRID":
return HybridEngine()
if kind == "GA":
return GeneticAlgorithmEngine()
if kind == "NSGA2":
return NSGA2Engine()
return RuleEngine(requested_type="RULE")