30 lines
1.3 KiB
Python
30 lines
1.3 KiB
Python
# ============================================================
|
||
# 排产引擎包(moduleId: server-engines, 可重生 ✅)
|
||
# RULE;CP = OR-Tools;HYBRID = RULE 热启动 + CP 改良;GA 仍 RULE 代跑留痕
|
||
# ============================================================
|
||
from server.engines.base import EngineParams, ISchedulingEngine
|
||
from server.engines.rule_engine import RuleEngine
|
||
from server.engines.pool_engine import PoolEngine
|
||
from server.engines.cp_engine import CpSatEngine, HybridEngine
|
||
from server.engines.external_engine import ExternalEngine
|
||
|
||
__all__ = [
|
||
"EngineParams", "ISchedulingEngine", "RuleEngine", "PoolEngine",
|
||
"CpSatEngine", "HybridEngine", "ExternalEngine", "get_engine",
|
||
]
|
||
|
||
|
||
def get_engine(engine_type: str) -> ISchedulingEngine:
|
||
"""引擎工厂:CP / HYBRID / EXTERNAL;GA 仍由 RULE 代跑并留 engineType。"""
|
||
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()
|
||
return RuleEngine(requested_type=kind if kind in ("RULE", "GA") else "RULE")
|