51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
# ============================================================
|
||
# 排产引擎包(moduleId: server-engines, 可重生 ✅)
|
||
# RULE:CP = OR-Tools;HYBRID = RULE 热启动 + CP 改良;GA = 遗传算法;
|
||
# NSGA2 = NSGA-II 多目标遗传(矩阵 85,round-40 方向 U)
|
||
# ============================================================
|
||
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.optimize_engine import OptimizeEngine
|
||
from server.engines.pool_engine import PoolEngine
|
||
from server.engines.rule_engine import RuleEngine
|
||
|
||
__all__ = [
|
||
"CpSatEngine",
|
||
"EngineParams",
|
||
"ExternalEngine",
|
||
"GeneticAlgorithmEngine",
|
||
"HybridEngine",
|
||
"ISchedulingEngine",
|
||
"NSGA2Engine",
|
||
"OptimizeEngine",
|
||
"PoolEngine",
|
||
"RuleEngine",
|
||
"get_engine",
|
||
"nsga2_defaults",
|
||
"solve_nsga2",
|
||
]
|
||
|
||
|
||
def get_engine(engine_type: str) -> ISchedulingEngine:
|
||
"""引擎工厂:RULE / CP / GA / HYBRID / NSGA2 / OPTIMIZE / 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()
|
||
if kind == "OPTIMIZE":
|
||
return OptimizeEngine()
|
||
return RuleEngine(requested_type="RULE")
|