e2m2e.transfer package

e2m2e 转移轨道设计模块

提供 DRO-RO 转移轨道的网格搜索和 NLP 优化工具,实现 Cui et al. (2025) 的"搜索-优化"两步法。

Classes:

SearchConfig: 搜索/优化参数配置 dataclass TransferSearch: 通用轨道转移网格搜索 Transfer: 简化的转移轨道优化接口 DROTRONLPOptimizer: DRO-RO 转移轨道 NLP 优化器 COPTNLPSolver: 基于 COPT 的 NLP 求解器封装

Functions:

load_orbit_from_json: 从 JSON 文件加载轨道数据 optimize_transfer: 便捷函数:优化 DRO 到 RO 转移 optimize_with_copt: 使用 COPT 求解 NLP

class e2m2e.transfer.SearchConfig(alpha_min=None, alpha_max=None, n_alpha=None, n_departure=None, max_transfer_time=None, intersection_threshold=None, min_distance_threshold=None, collision_earth_radius=None, collision_moon_radius=None, integration_dt=None, alpha_range=None, transfer_time_range=None, t_ins_range=None, velocity_angle_tolerance=None)[源代码]

基类:object

TransferSearch 网格搜索配置

所有参数默认为 None,使用前须显式赋值或通过 configure_search() / search() 设置。

参数:
  • alpha_min (float | None)

  • alpha_max (float | None)

  • n_alpha (int | None)

  • n_departure (int | None)

  • max_transfer_time (float | None)

  • intersection_threshold (float | None)

  • min_distance_threshold (float | None)

  • collision_earth_radius (float | None)

  • collision_moon_radius (float | None)

  • integration_dt (float | None)

  • alpha_range (tuple[float, float] | None)

  • transfer_time_range (tuple[float, float] | None)

  • t_ins_range (tuple[float, float] | None)

  • velocity_angle_tolerance (float | None)

alpha_min

α(切向速度比)下界。推荐值 ∈ (0, 1.0]

Type:

float | None

alpha_max

α(切向速度比)上界。推荐值 ∈ [1.0, 3.0]

Type:

float | None

n_alpha

α 方向网格点数。推荐值 ∈ [51, 2001];Cui et al. 2025 Table 3 为 1001

Type:

int | None

n_departure

出发点采样数量。推荐值 ∈ [50, 500],典型值 200

Type:

int | None

max_transfer_time

最大转移时间(CR3BP 无量纲时间)。推荐值 ∈ [5.0, 30.0]

Type:

float | None

intersection_threshold

相交判定距离阈值(无量纲距离)。推荐值 ∈ [1e-4, 1e-2]

Type:

float | None

min_distance_threshold

候选解最小距离阈值(无量纲距离)。默认 100 km / 地月距离

Type:

float | None

collision_earth_radius

地球碰撞检测半径(无量纲距离)。200 km ≈ 0.0005

Type:

float | None

collision_moon_radius

月球碰撞检测半径(无量纲距离)。100 km ≈ 0.00026

Type:

float | None

integration_dt

积分时间步长(CR3BP 无量纲时间)。推荐值 ∈ [1e-4, 0.1]

Type:

float | None

alpha_range

优化阶段 α 搜索范围。推荐值 (0.5, 2.5)

Type:

tuple[float, float] | None

transfer_time_range

优化阶段转移时间范围。推荐值 (1.0, 30.0)

Type:

tuple[float, float] | None

t_ins_range

优化阶段插入时间范围。推荐值 (0.0, 10.0)

Type:

tuple[float, float] | None

velocity_angle_tolerance

速度平行性容差(弧度)。推荐值 1e-6

Type:

float | None

alpha_min: float | None = None
alpha_max: float | None = None
n_alpha: int | None = None
n_departure: int | None = None
max_transfer_time: float | None = None
intersection_threshold: float | None = None
min_distance_threshold: float | None = None
collision_earth_radius: float | None = None
collision_moon_radius: float | None = None
integration_dt: float | None = None
alpha_range: tuple[float, float] | None = None
transfer_time_range: tuple[float, float] | None = None
t_ins_range: tuple[float, float] | None = None
velocity_angle_tolerance: float | None = None
class e2m2e.transfer.TransferSearch(dynamics, name='TransferSearch', config=None)[源代码]

基类:object

通用轨道转移搜索算法

实现论文Section III.A的搜索阶段算法: 1. 从出发点轨道等时间间隔采样 2. 对每个出发点,网格化搜索α 3. 前向积分获取转移轨迹 4. 筛选与目标轨道相交或距离局部最小的候选解

搜索参数集中存储在 self.config``(:class:`SearchConfig` dataclass)中, 同时通过属性代理提供向后兼容的直接读写访问(``self.alpha_min 等)。

使用方式:

transfer = TransferSearch(dynamics) transfer.configure_search(alpha_min=0.5, alpha_max=2.5, n_alpha=101) results = transfer.search(...)

或通过 SearchConfig:

from e2m2e.transfer import SearchConfig cfg = SearchConfig(alpha_min=0.5, alpha_max=2.5, n_alpha=101) transfer = TransferSearch(dynamics, config=cfg)

参数:
property config: SearchConfig

搜索/优化配置对象。

set_verbose(verbose)[源代码]

设置是否输出详细信息

参数:

verbose (bool)

返回类型:

TransferSearch

set_n_workers(n_workers)[源代码]

设置并行worker数量

参数:

n_workers (int)

返回类型:

TransferSearch

set_parallel_backend(backend)[源代码]

设置并行后端:``processes``(默认,多进程)或 ``threads``(多线程)。

参数:

backend (str)

返回类型:

TransferSearch

配置搜索参数(向后兼容,推荐直接设置实例属性)

返回类型:

TransferSearch

get_feasible_results()[源代码]

获取所有可行搜索结果

返回类型:

list[dict[str, Any]]

search(*, alpha_min, alpha_max, n_alpha, n_departure, max_transfer_time, intersection_threshold, min_distance_threshold, collision_earth_radius, collision_moon_radius, integration_dt, departure_orbit=None, arrival_orbit=None, verbose=True, n_workers=None, parallel_backend='processes')[源代码]

执行网格搜索

参数:
  • alpha_min (float) -- α 下界

  • alpha_max (float) -- α 上界

  • n_alpha (int) -- α 方向网格点数

  • n_departure (int) -- 出发点采样数量

  • max_transfer_time (float) -- 最大转移时间(CR3BP 无量纲时间)

  • intersection_threshold (float) -- 相交判定距离阈值

  • min_distance_threshold (float) -- 候选解距离阈值

  • collision_earth_radius (float) -- 地球碰撞检测半径

  • collision_moon_radius (float) -- 月球碰撞检测半径

  • integration_dt (float) -- 积分时间步长

  • departure_orbit (Orbit | None) -- 出发轨道(可选,未提供则使用已设置的轨道)

  • arrival_orbit (Orbit | None) -- 目标轨道(可选,未提供则使用已设置的轨道)

  • verbose (bool) -- 是否输出详细信息(含进度)

  • n_workers (int | None) -- 并行 worker 数量

  • parallel_backend (str) -- processes``(默认)或 ``threads

返回:

搜索结果列表

返回类型:

list[dict[str, Any]]

optimize(initial_guess=None)[源代码]

执行优化

参数:

initial_guess (dict[str, Any] | None) -- 优化初始猜测(通常来自搜索结果)

返回:

优化结果

返回类型:

NLPOptimizationResult

compute_min_distance_to_orbit(trajectory_states, arrival_orbit)[源代码]

轨迹到目标轨道的最小距离及对应轨迹步索引(公开 API)。

参数:
返回类型:

tuple[float, int]

find_intersection(trajectory_states, arrival_orbit, threshold=None)[源代码]

检测轨迹是否与目标轨道相交(与 _detect_intersection 相同, 默认使用 intersection_threshold)。

参数:
返回类型:

tuple[bool, ndarray, int]

e2m2e.transfer.DROTransferSearch

TransferSearch 的别名

e2m2e.transfer.DROROTransferSearch

TransferSearch 的别名

class e2m2e.transfer.Transfer(dynamics)[源代码]

基类:object

DRO-RO 转移轨迹优化器

提供基于 NLP 方法的 DRO(远距逆行轨道)到 RO(直线轨道)转移轨迹优化简化接口。

示例

>>> from e2m2e.transfer import Transfer, TransferConfig
>>> from e2m2e.core import CR3BP_System, CR3BP_Dynamics
>>> from scripts.utils.common import MU
>>>
>>> system = CR3BP_System(mu=MU, primary="earth", secondary="moon")
>>> dynamics = CR3BP_Dynamics(system=system)
>>> transfer = Transfer(dynamics)
>>> transfer.set_orbit(start=dro_orbit, end=ro_orbit)
>>> result = transfer.optimize(
...     initial_guess={"alpha": 1.0, "transfer_time": 15.0, "t_ins": 5.0},
...     alpha_range=(0.5, 2.5),
...     use_relaxed_velocity=True,
...     velocity_angle_tol=0.05,
... )
参数:

dynamics (CR3BP_Dynamics)

__init__(dynamics)[源代码]

初始化转移优化器

参数:

dynamics (CR3BP_Dynamics) -- CR3BP 动力学实例,用于轨道传播

property departure_orbit: Orbit | None

出发轨道(DRO)。

property arrival_orbit: Orbit | None

到达轨道(RO)。

property config: TransferConfig

转移优化配置。

property result: TransferOptimizationResult | None

最新优化结果。

set_orbit(start, end)[源代码]

设置出发轨道和到达轨道

参数:
  • start (Orbit) -- 出发轨道(DRO)

  • end (Orbit) -- 到达轨道(RO)

返回:

self,支持链式调用

返回类型:

Transfer

optimize(initial_guess, alpha_range, departure_state=None, t_ins_range=None, use_relaxed_velocity=None, velocity_angle_tol=None)[源代码]

优化转移轨迹

参数:
  • initial_guess (dict[str, float]) -- 初始猜测,包含 'alpha'、'transfer_time'、't_ins'

  • alpha_range (tuple[float, float]) -- α 参数范围 (min, max)

  • departure_state (ndarray | None) -- 手动指定出发点状态 [6];None 时自动从 DRO 采样

  • t_ins_range (tuple[float, float] | None) -- RO 上的插入时间范围,默认为完整 RO 周期

  • use_relaxed_velocity (bool | None) -- 覆盖配置中的 use_relaxed_velocity

  • velocity_angle_tol (float | None) -- 覆盖配置中的 velocity_angle_tol

返回:

TransferOptimizationResult,包含优化详情

返回类型:

TransferOptimizationResult

class e2m2e.transfer.TransferConfig(alpha_min=0.5, alpha_max=2.5, earth_radius=0.0005202845956738336, moon_radius=0.0002601422978369168, use_relaxed_velocity=True, velocity_angle_tol=0.05, use_copt=False, fallback_to_scipy=True)[源代码]

基类:object

转移优化配置

参数:
alpha_min

切向速度比下界

Type:

float

alpha_max

切向速度比上界

Type:

float

earth_radius

地球碰撞检测半径(无量纲)

Type:

float

moon_radius

月球碰撞检测半径(无量纲)

Type:

float

use_relaxed_velocity

是否使用松弛速度约束

Type:

bool

velocity_angle_tol

松弛速度约束角度容差(弧度)

Type:

float

use_copt

是否优先使用 COPT 优化器

Type:

bool

fallback_to_scipy

COPT 失败时是否回退到 SciPy

Type:

bool

alpha_min: float = 0.5
alpha_max: float = 2.5
earth_radius: float = 0.0005202845956738336
moon_radius: float = 0.0002601422978369168
use_relaxed_velocity: bool = True
velocity_angle_tol: float = 0.05
use_copt: bool = False
fallback_to_scipy: bool = True
class e2m2e.transfer.TransferOptimizationResult(success=False, message='', departure_state=None, departure_alpha=0.0, departure_beta=0.0, insertion_state=None, final_state=None, delta_v1=0.0, delta_v2=0.0, total_delta_v=0.0, transfer_time=0.0, t_ins=0.0, transfer_trajectory=None, transfer_trajectory_times=None, constraints_violation=0.0)[源代码]

基类:object

转移优化结果

参数:
success

优化是否成功

Type:

bool

message

求解器消息

Type:

str

departure_state

出发点状态 [x, y, z, vx, vy, vz]

Type:

numpy.ndarray | None

departure_alpha

出发点切向速度比

Type:

float

departure_beta

出发点法向速度比

Type:

float

insertion_state

RO 上的插入点状态 [x, y, z, vx, vy, vz]

Type:

numpy.ndarray | None

final_state

插入后最终状态 [x, y, z, vx, vy, vz]

Type:

numpy.ndarray | None

delta_v1

出发脉冲大小

Type:

float

delta_v2

插入脉冲大小

Type:

float

total_delta_v

总脉冲(delta_v1 + delta_v2)

Type:

float

transfer_time

转移时长

Type:

float

t_ins

RO 上的插入时间

Type:

float

transfer_trajectory

完整转移轨迹 [n_steps, 6]

Type:

numpy.ndarray | None

transfer_trajectory_times

轨迹时间序列 [n_steps]

Type:

numpy.ndarray | None

constraints_violation

最大约束违反量

Type:

float

success: bool = False
message: str = ''
departure_state: ndarray | None = None
departure_alpha: float = 0.0
departure_beta: float = 0.0
insertion_state: ndarray | None = None
final_state: ndarray | None = None
delta_v1: float = 0.0
delta_v2: float = 0.0
total_delta_v: float = 0.0
transfer_time: float = 0.0
t_ins: float = 0.0
transfer_trajectory: ndarray | None = None
transfer_trajectory_times: ndarray | None = None
constraints_violation: float = 0.0
class e2m2e.transfer.DROTRONLPOptimizer(system, dynamics, departure_orbit, arrival_orbit, departure_state)[源代码]

基类:object

DRO到RO转移轨道NLP优化器

实现论文Section III.B的优化阶段算法。 使用SQP(序贯二次规划)方法求解NLP问题。

参数:
system

CR3BP系统对象

dynamics

CR3BP动力学对象

departure_orbit

出发点轨道

arrival_orbit

目标轨道

departure_state

出发点状态

alpha_range

α搜索范围

velocity_angle_tolerance

速度平行性容差(弧度)

earth_radius

地球半径(无量纲)

moon_radius

月球半径(无量纲)

DEFAULT_ALPHA_RANGE = (0.5, 2.5)
DEFAULT_TRANSFER_TIME_RANGE = (1.0, 30.0)
DEFAULT_T_INS_RANGE = (0.0, 10.0)
EARTH_RADIUS_ND = 0.016366661277947565
MOON_RADIUS_ND = 0.00452159209157128
DEFAULT_VELOCITY_ANGLE_TOL = 1e-06
__init__(system, dynamics, departure_orbit, arrival_orbit, departure_state)[源代码]

初始化NLP优化器

参数:
  • system (CR3BP_System) -- CR3BP系统对象

  • dynamics (CR3BP_Dynamics) -- CR3BP动力学对象

  • departure_orbit (Orbit) -- 出发点轨道

  • arrival_orbit (Orbit) -- 目标轨道

  • departure_state (ndarray) -- 出发点状态 [x, y, z, vx, vy, vz]

set_progress_callback(callback)[源代码]
参数:

callback (Callable | None)

返回类型:

None

enable_cache(enabled=True)[源代码]
参数:

enabled (bool)

返回类型:

None

compute_departure_velocity(state, alpha, beta=0.0)[源代码]

根据α计算出发速度

参数:
  • state (ndarray) -- 出发点状态 [x, y, z, vx, vy, vz]

  • alpha (float) -- 切向速度比

  • beta (float)

返回:

注入速度向量 [vx, vy, vz]

返回类型:

ndarray

forward_integrate(initial_state, t_span, t_eval=None)[源代码]

前向积分转移弧

参数:
  • initial_state (ndarray) -- 初始状态 [x, y, z, vx, vy, vz]

  • t_span (tuple[float, float]) -- 积分时间范围 (t0, tf)

  • t_eval (ndarray | None) -- 评估时间点

返回:

时间序列和状态序列

返回类型:

(times, states)

compute_delta_v1(departure_state, initial_velocity)[源代码]

计算出发脉冲ΔV1

参数:
  • departure_state (ndarray) -- 出发点状态 [x, y, z, vx, vy, vz]

  • initial_velocity (ndarray) -- 注入速度 [vx, vy, vz]

返回:

ΔV1 大小

返回类型:

float

compute_delta_v2(final_velocity, insertion_velocity)[源代码]

计算插入脉冲ΔV2

参数:
  • final_velocity (ndarray) -- 转移轨迹末端速度

  • insertion_velocity (ndarray) -- 目标轨道插入点速度

返回:

ΔV2 大小

返回类型:

float

get_arrival_state_at_t_ins(t_ins)[源代码]

获取目标轨道上 t_ins(绝对时间)对应的状态

参数:

t_ins (float) -- 绝对时间(与 orbit.times 同一坐标系)

返回:

位置和速度

返回类型:

(position, velocity)

objective_function(y)[源代码]

目标函数 J(y) = Δv1 + Δv2

参数:

y (ndarray) -- 优化变量 [alpha, T, t_ins]

返回:

总脉冲代价

返回类型:

float

constraint_position(y)[源代码]

位置连续性约束 Eq.(13)

(x_f - x_ins)^2 + (y_f - y_ins)^2 + (z_f - z_ins)^2 = 0

参数:

y (ndarray) -- 优化变量 [alpha, T, t_ins]

返回:

约束违反量

返回类型:

float

constraint_velocity_parallel(y)[源代码]

速度平行性约束 Eq.(14) 或relaxed Eq.(17)

v_f · v_ins / (||v_f|| ||v_ins||) - 1 = 0

参数:

y (ndarray) -- 优化变量 [alpha, T, t_ins]

返回:

约束违反量

返回类型:

float

check_collision(y)[源代码]

检查是否撞击地球或月球

参数:

y (ndarray) -- 优化变量 [alpha, T, t_ins]

返回:

是否撞击地球、月球

返回类型:

(earth_collision, moon_collision)

optimize(initial_guess=None, alpha_range=None, transfer_time_range=None, t_ins_range=None, use_relaxed_velocity_constraint=False, velocity_angle_constraint=0.0, verbose=True)[源代码]

执行NLP优化

参数:
  • initial_guess (NLPOptimizationVariables | None) -- 初始猜测

  • alpha_range (tuple[float, float] | None) -- α范围

  • transfer_time_range (tuple[float, float] | None) -- 转移时间范围

  • t_ins_range (tuple[float, float] | None) -- 插入时间范围

  • use_relaxed_velocity_constraint (bool) -- 是否使用松弛速度约束

  • velocity_angle_constraint (float) -- 松弛速度约束角度(弧度)

  • verbose (bool) -- 是否打印信息

返回:

优化结果

返回类型:

NLPOptimizationResult

class e2m2e.transfer.NLPOptimizationResult(alpha=0.0, transfer_time=0.0, t_ins=0.0, objective_value=0.0, delta_v1=0.0, delta_v2=0.0, transfer_trajectory=None, transfer_times=None, departure_state=None, insertion_state=None, final_state=None, success=False, message='', transfer_type=TransferType.DIRECT, constraints_violation=<factory>)[源代码]

基类:object

NLP优化结果

参数:
alpha

切向速度比

Type:

float

transfer_time

转移时间

Type:

float

t_ins

插入时间

Type:

float

objective_value

目标函数值(总ΔV)

Type:

float

delta_v1

出发脉冲

Type:

float

delta_v2

插入脉冲

Type:

float

transfer_trajectory

转移轨迹状态序列

Type:

numpy.ndarray | None

transfer_times

转移轨迹时间序列

Type:

numpy.ndarray | None

departure_state

出发点状态

Type:

numpy.ndarray | None

insertion_state

插入点状态

Type:

numpy.ndarray | None

final_state

转移轨迹末端状态

Type:

numpy.ndarray | None

success

优化是否成功

Type:

bool

message

结果消息

Type:

str

transfer_type

转移类型

Type:

e2m2e.transfer.transfer_optimization.TransferType

constraints_violation

约束违反量字典

Type:

dict[str, float]

alpha: float = 0.0
transfer_time: float = 0.0
t_ins: float = 0.0
objective_value: float = 0.0
delta_v1: float = 0.0
delta_v2: float = 0.0
transfer_trajectory: ndarray | None = None
transfer_times: ndarray | None = None
departure_state: ndarray | None = None
insertion_state: ndarray | None = None
final_state: ndarray | None = None
success: bool = False
message: str = ''
transfer_type: TransferType = 'direct'
constraints_violation: dict[str, float]
class e2m2e.transfer.NLPOptimizationVariables(alpha=0.0, transfer_time=0.0, t_ins=0.0)[源代码]

基类:object

NLP优化变量

优化变量: y = {α, T, t_ins}

参数:
alpha

切向速度比

Type:

float

transfer_time

转移时间T

Type:

float

t_ins

从轨道远地点到插入点的时间

Type:

float

alpha: float = 0.0
transfer_time: float = 0.0
t_ins: float = 0.0
to_array()[源代码]

转换为numpy数组

返回类型:

ndarray

classmethod from_array(arr)[源代码]

从numpy数组创建

参数:

arr (ndarray)

返回类型:

NLPOptimizationVariables

class e2m2e.transfer.TransferType(*values)[源代码]

基类:Enum

DIRECT = 'direct'
LGA = 'lga'
EXTERNAL = 'external'
e2m2e.transfer.load_orbit_from_json(filepath)[源代码]

从 JSON 文件加载轨道数据

参数:

filepath (str) -- JSON 文件路径

返回:

Orbit 对象

返回类型:

Orbit

e2m2e.transfer.optimize_transfer(system, dynamics, departure_orbit, arrival_orbit, departure_state, initial_guess=None, **kwargs)[源代码]

便捷函数: 优化DRO到RO转移

参数:
返回:

优化结果

返回类型:

NLPOptimizationResult

e2m2e.transfer.optimize_with_copt(optimizer, initial_guess=None, *, fallback_to_scipy=True, max_iter=1000, threads=1, bar_threads=1, time_limit=None, scipy_fallback_kwargs=None)[源代码]

使用 COPT 求解 NLP(与 data_processing_module 中用法一致: cp.Envr / createModel / COPT.Param / solve)。

数学形式与 DROTRONLPOptimizer.optimize 相同(等式约束 + 最小化 Δv)。

参数:
  • optimizer (DROTRONLPOptimizer) -- 已设置 alpha_range / transfer_time_range / t_ins_rangeDROTRONLPOptimizer

  • initial_guess (NLPOptimizationVariables | None) -- 初始猜测 (α, T, t_ins);默认 (1, 10, 5)

  • fallback_to_scipy (bool) -- 未安装 COPT 或求解失败时是否回退 SciPy SLSQP

  • max_iter (int) -- COPT.Param.NLPIterLimit

  • bar_threads (int) -- COPT.Param.Threads / ``BarThreads``(Python 回调建议为 1)

  • time_limit (float | None) -- 若给定,则设置 ``COPT.Param.TimeLimit``(秒),与参考脚本中 MILP 用法一致

  • scipy_fallback_kwargs (dict[str, Any] | None) -- 回退时传给 optimizer.optimize 的额外参数

  • threads (int)

  • bar_threads

返回:

NLPOptimizationResult

返回类型:

NLPOptimizationResult

Submodules

e2m2e.transfer.transfer module

DRO-RO 转移轨迹优化模块

提供基于 NLP 方法(Cui et al. 2025)的简化转移轨迹优化接口。

class e2m2e.transfer.transfer.TransferConfig(alpha_min=0.5, alpha_max=2.5, earth_radius=0.0005202845956738336, moon_radius=0.0002601422978369168, use_relaxed_velocity=True, velocity_angle_tol=0.05, use_copt=False, fallback_to_scipy=True)[源代码]

基类:object

转移优化配置

参数:
alpha_min

切向速度比下界

Type:

float

alpha_max

切向速度比上界

Type:

float

earth_radius

地球碰撞检测半径(无量纲)

Type:

float

moon_radius

月球碰撞检测半径(无量纲)

Type:

float

use_relaxed_velocity

是否使用松弛速度约束

Type:

bool

velocity_angle_tol

松弛速度约束角度容差(弧度)

Type:

float

use_copt

是否优先使用 COPT 优化器

Type:

bool

fallback_to_scipy

COPT 失败时是否回退到 SciPy

Type:

bool

alpha_min: float = 0.5
alpha_max: float = 2.5
earth_radius: float = 0.0005202845956738336
moon_radius: float = 0.0002601422978369168
use_relaxed_velocity: bool = True
velocity_angle_tol: float = 0.05
use_copt: bool = False
fallback_to_scipy: bool = True
class e2m2e.transfer.transfer.TransferOptimizationResult(success=False, message='', departure_state=None, departure_alpha=0.0, departure_beta=0.0, insertion_state=None, final_state=None, delta_v1=0.0, delta_v2=0.0, total_delta_v=0.0, transfer_time=0.0, t_ins=0.0, transfer_trajectory=None, transfer_trajectory_times=None, constraints_violation=0.0)[源代码]

基类:object

转移优化结果

参数:
success

优化是否成功

Type:

bool

message

求解器消息

Type:

str

departure_state

出发点状态 [x, y, z, vx, vy, vz]

Type:

numpy.ndarray | None

departure_alpha

出发点切向速度比

Type:

float

departure_beta

出发点法向速度比

Type:

float

insertion_state

RO 上的插入点状态 [x, y, z, vx, vy, vz]

Type:

numpy.ndarray | None

final_state

插入后最终状态 [x, y, z, vx, vy, vz]

Type:

numpy.ndarray | None

delta_v1

出发脉冲大小

Type:

float

delta_v2

插入脉冲大小

Type:

float

total_delta_v

总脉冲(delta_v1 + delta_v2)

Type:

float

transfer_time

转移时长

Type:

float

t_ins

RO 上的插入时间

Type:

float

transfer_trajectory

完整转移轨迹 [n_steps, 6]

Type:

numpy.ndarray | None

transfer_trajectory_times

轨迹时间序列 [n_steps]

Type:

numpy.ndarray | None

constraints_violation

最大约束违反量

Type:

float

success: bool = False
message: str = ''
departure_state: ndarray | None = None
departure_alpha: float = 0.0
departure_beta: float = 0.0
insertion_state: ndarray | None = None
final_state: ndarray | None = None
delta_v1: float = 0.0
delta_v2: float = 0.0
total_delta_v: float = 0.0
transfer_time: float = 0.0
t_ins: float = 0.0
transfer_trajectory: ndarray | None = None
transfer_trajectory_times: ndarray | None = None
constraints_violation: float = 0.0
class e2m2e.transfer.transfer.Transfer(dynamics)[源代码]

基类:object

DRO-RO 转移轨迹优化器

提供基于 NLP 方法的 DRO(远距逆行轨道)到 RO(直线轨道)转移轨迹优化简化接口。

示例

>>> from e2m2e.transfer import Transfer, TransferConfig
>>> from e2m2e.core import CR3BP_System, CR3BP_Dynamics
>>> from scripts.utils.common import MU
>>>
>>> system = CR3BP_System(mu=MU, primary="earth", secondary="moon")
>>> dynamics = CR3BP_Dynamics(system=system)
>>> transfer = Transfer(dynamics)
>>> transfer.set_orbit(start=dro_orbit, end=ro_orbit)
>>> result = transfer.optimize(
...     initial_guess={"alpha": 1.0, "transfer_time": 15.0, "t_ins": 5.0},
...     alpha_range=(0.5, 2.5),
...     use_relaxed_velocity=True,
...     velocity_angle_tol=0.05,
... )
参数:

dynamics (CR3BP_Dynamics)

__init__(dynamics)[源代码]

初始化转移优化器

参数:

dynamics (CR3BP_Dynamics) -- CR3BP 动力学实例,用于轨道传播

property departure_orbit: Orbit | None

出发轨道(DRO)。

property arrival_orbit: Orbit | None

到达轨道(RO)。

property config: TransferConfig

转移优化配置。

property result: TransferOptimizationResult | None

最新优化结果。

set_orbit(start, end)[源代码]

设置出发轨道和到达轨道

参数:
  • start (Orbit) -- 出发轨道(DRO)

  • end (Orbit) -- 到达轨道(RO)

返回:

self,支持链式调用

返回类型:

Transfer

optimize(initial_guess, alpha_range, departure_state=None, t_ins_range=None, use_relaxed_velocity=None, velocity_angle_tol=None)[源代码]

优化转移轨迹

参数:
  • initial_guess (dict[str, float]) -- 初始猜测,包含 'alpha'、'transfer_time'、't_ins'

  • alpha_range (tuple[float, float]) -- α 参数范围 (min, max)

  • departure_state (ndarray | None) -- 手动指定出发点状态 [6];None 时自动从 DRO 采样

  • t_ins_range (tuple[float, float] | None) -- RO 上的插入时间范围,默认为完整 RO 周期

  • use_relaxed_velocity (bool | None) -- 覆盖配置中的 use_relaxed_velocity

  • velocity_angle_tol (float | None) -- 覆盖配置中的 velocity_angle_tol

返回:

TransferOptimizationResult,包含优化详情

返回类型:

TransferOptimizationResult

e2m2e.transfer.transfer_optimization module

DRO到RO转移轨道NLP优化模块

实现论文Cui et al. (2025)中的"搜索-优化"两步法的优化阶段。 优化变量: y = {α, T, t_ins} 目标函数: J(y) = Δv1 + Δv2 约束: 位置连续性、速度平行性、撞星约束

class e2m2e.transfer.transfer_optimization.TransferType(*values)[源代码]

基类:Enum

DIRECT = 'direct'
LGA = 'lga'
EXTERNAL = 'external'
class e2m2e.transfer.transfer_optimization.NLPOptimizationVariables(alpha=0.0, transfer_time=0.0, t_ins=0.0)[源代码]

基类:object

NLP优化变量

优化变量: y = {α, T, t_ins}

参数:
alpha

切向速度比

Type:

float

transfer_time

转移时间T

Type:

float

t_ins

从轨道远地点到插入点的时间

Type:

float

alpha: float = 0.0
transfer_time: float = 0.0
t_ins: float = 0.0
to_array()[源代码]

转换为numpy数组

返回类型:

ndarray

classmethod from_array(arr)[源代码]

从numpy数组创建

参数:

arr (ndarray)

返回类型:

NLPOptimizationVariables

class e2m2e.transfer.transfer_optimization.NLPOptimizationResult(alpha=0.0, transfer_time=0.0, t_ins=0.0, objective_value=0.0, delta_v1=0.0, delta_v2=0.0, transfer_trajectory=None, transfer_times=None, departure_state=None, insertion_state=None, final_state=None, success=False, message='', transfer_type=TransferType.DIRECT, constraints_violation=<factory>)[源代码]

基类:object

NLP优化结果

参数:
alpha

切向速度比

Type:

float

transfer_time

转移时间

Type:

float

t_ins

插入时间

Type:

float

objective_value

目标函数值(总ΔV)

Type:

float

delta_v1

出发脉冲

Type:

float

delta_v2

插入脉冲

Type:

float

transfer_trajectory

转移轨迹状态序列

Type:

numpy.ndarray | None

transfer_times

转移轨迹时间序列

Type:

numpy.ndarray | None

departure_state

出发点状态

Type:

numpy.ndarray | None

insertion_state

插入点状态

Type:

numpy.ndarray | None

final_state

转移轨迹末端状态

Type:

numpy.ndarray | None

success

优化是否成功

Type:

bool

message

结果消息

Type:

str

transfer_type

转移类型

Type:

e2m2e.transfer.transfer_optimization.TransferType

constraints_violation

约束违反量字典

Type:

dict[str, float]

alpha: float = 0.0
transfer_time: float = 0.0
t_ins: float = 0.0
objective_value: float = 0.0
delta_v1: float = 0.0
delta_v2: float = 0.0
transfer_trajectory: ndarray | None = None
transfer_times: ndarray | None = None
departure_state: ndarray | None = None
insertion_state: ndarray | None = None
final_state: ndarray | None = None
success: bool = False
message: str = ''
transfer_type: TransferType = 'direct'
constraints_violation: dict[str, float]
class e2m2e.transfer.transfer_optimization.DROTRONLPOptimizer(system, dynamics, departure_orbit, arrival_orbit, departure_state)[源代码]

基类:object

DRO到RO转移轨道NLP优化器

实现论文Section III.B的优化阶段算法。 使用SQP(序贯二次规划)方法求解NLP问题。

参数:
system

CR3BP系统对象

dynamics

CR3BP动力学对象

departure_orbit

出发点轨道

arrival_orbit

目标轨道

departure_state

出发点状态

alpha_range

α搜索范围

velocity_angle_tolerance

速度平行性容差(弧度)

earth_radius

地球半径(无量纲)

moon_radius

月球半径(无量纲)

DEFAULT_ALPHA_RANGE = (0.5, 2.5)
DEFAULT_TRANSFER_TIME_RANGE = (1.0, 30.0)
DEFAULT_T_INS_RANGE = (0.0, 10.0)
EARTH_RADIUS_ND = 0.016366661277947565
MOON_RADIUS_ND = 0.00452159209157128
DEFAULT_VELOCITY_ANGLE_TOL = 1e-06
__init__(system, dynamics, departure_orbit, arrival_orbit, departure_state)[源代码]

初始化NLP优化器

参数:
  • system (CR3BP_System) -- CR3BP系统对象

  • dynamics (CR3BP_Dynamics) -- CR3BP动力学对象

  • departure_orbit (Orbit) -- 出发点轨道

  • arrival_orbit (Orbit) -- 目标轨道

  • departure_state (ndarray) -- 出发点状态 [x, y, z, vx, vy, vz]

set_progress_callback(callback)[源代码]
参数:

callback (Callable | None)

返回类型:

None

enable_cache(enabled=True)[源代码]
参数:

enabled (bool)

返回类型:

None

compute_departure_velocity(state, alpha, beta=0.0)[源代码]

根据α计算出发速度

参数:
  • state (ndarray) -- 出发点状态 [x, y, z, vx, vy, vz]

  • alpha (float) -- 切向速度比

  • beta (float)

返回:

注入速度向量 [vx, vy, vz]

返回类型:

ndarray

forward_integrate(initial_state, t_span, t_eval=None)[源代码]

前向积分转移弧

参数:
  • initial_state (ndarray) -- 初始状态 [x, y, z, vx, vy, vz]

  • t_span (tuple[float, float]) -- 积分时间范围 (t0, tf)

  • t_eval (ndarray | None) -- 评估时间点

返回:

时间序列和状态序列

返回类型:

(times, states)

compute_delta_v1(departure_state, initial_velocity)[源代码]

计算出发脉冲ΔV1

参数:
  • departure_state (ndarray) -- 出发点状态 [x, y, z, vx, vy, vz]

  • initial_velocity (ndarray) -- 注入速度 [vx, vy, vz]

返回:

ΔV1 大小

返回类型:

float

compute_delta_v2(final_velocity, insertion_velocity)[源代码]

计算插入脉冲ΔV2

参数:
  • final_velocity (ndarray) -- 转移轨迹末端速度

  • insertion_velocity (ndarray) -- 目标轨道插入点速度

返回:

ΔV2 大小

返回类型:

float

get_arrival_state_at_t_ins(t_ins)[源代码]

获取目标轨道上 t_ins(绝对时间)对应的状态

参数:

t_ins (float) -- 绝对时间(与 orbit.times 同一坐标系)

返回:

位置和速度

返回类型:

(position, velocity)

objective_function(y)[源代码]

目标函数 J(y) = Δv1 + Δv2

参数:

y (ndarray) -- 优化变量 [alpha, T, t_ins]

返回:

总脉冲代价

返回类型:

float

constraint_position(y)[源代码]

位置连续性约束 Eq.(13)

(x_f - x_ins)^2 + (y_f - y_ins)^2 + (z_f - z_ins)^2 = 0

参数:

y (ndarray) -- 优化变量 [alpha, T, t_ins]

返回:

约束违反量

返回类型:

float

constraint_velocity_parallel(y)[源代码]

速度平行性约束 Eq.(14) 或relaxed Eq.(17)

v_f · v_ins / (||v_f|| ||v_ins||) - 1 = 0

参数:

y (ndarray) -- 优化变量 [alpha, T, t_ins]

返回:

约束违反量

返回类型:

float

check_collision(y)[源代码]

检查是否撞击地球或月球

参数:

y (ndarray) -- 优化变量 [alpha, T, t_ins]

返回:

是否撞击地球、月球

返回类型:

(earth_collision, moon_collision)

optimize(initial_guess=None, alpha_range=None, transfer_time_range=None, t_ins_range=None, use_relaxed_velocity_constraint=False, velocity_angle_constraint=0.0, verbose=True)[源代码]

执行NLP优化

参数:
  • initial_guess (NLPOptimizationVariables | None) -- 初始猜测

  • alpha_range (tuple[float, float] | None) -- α范围

  • transfer_time_range (tuple[float, float] | None) -- 转移时间范围

  • t_ins_range (tuple[float, float] | None) -- 插入时间范围

  • use_relaxed_velocity_constraint (bool) -- 是否使用松弛速度约束

  • velocity_angle_constraint (float) -- 松弛速度约束角度(弧度)

  • verbose (bool) -- 是否打印信息

返回:

优化结果

返回类型:

NLPOptimizationResult

e2m2e.transfer.transfer_optimization.optimize_transfer(system, dynamics, departure_orbit, arrival_orbit, departure_state, initial_guess=None, **kwargs)[源代码]

便捷函数: 优化DRO到RO转移

参数:
返回:

优化结果

返回类型:

NLPOptimizationResult

e2m2e.transfer.transfer_optimization.optimize_with_copt(optimizer, initial_guess=None, *, fallback_to_scipy=True, max_iter=1000, threads=1, bar_threads=1, time_limit=None, scipy_fallback_kwargs=None)[源代码]

使用 COPT 求解 NLP(与 data_processing_module 中用法一致: cp.Envr / createModel / COPT.Param / solve)。

数学形式与 DROTRONLPOptimizer.optimize 相同(等式约束 + 最小化 Δv)。

参数:
  • optimizer (DROTRONLPOptimizer) -- 已设置 alpha_range / transfer_time_range / t_ins_rangeDROTRONLPOptimizer

  • initial_guess (NLPOptimizationVariables | None) -- 初始猜测 (α, T, t_ins);默认 (1, 10, 5)

  • fallback_to_scipy (bool) -- 未安装 COPT 或求解失败时是否回退 SciPy SLSQP

  • max_iter (int) -- COPT.Param.NLPIterLimit

  • bar_threads (int) -- COPT.Param.Threads / ``BarThreads``(Python 回调建议为 1)

  • time_limit (float | None) -- 若给定,则设置 ``COPT.Param.TimeLimit``(秒),与参考脚本中 MILP 用法一致

  • scipy_fallback_kwargs (dict[str, Any] | None) -- 回退时传给 optimizer.optimize 的额外参数

  • threads (int)

  • bar_threads

返回:

NLPOptimizationResult

返回类型:

NLPOptimizationResult

e2m2e.transfer.search_config module

转移轨道搜索配置模块

将 TransferSearch 的搜索参数提取为独立的 dataclass, 便于复用、序列化和类型检查。

class e2m2e.transfer.search_config.SearchConfig(alpha_min=None, alpha_max=None, n_alpha=None, n_departure=None, max_transfer_time=None, intersection_threshold=None, min_distance_threshold=None, collision_earth_radius=None, collision_moon_radius=None, integration_dt=None, alpha_range=None, transfer_time_range=None, t_ins_range=None, velocity_angle_tolerance=None)[源代码]

基类:object

TransferSearch 网格搜索配置

所有参数默认为 None,使用前须显式赋值或通过 configure_search() / search() 设置。

参数:
  • alpha_min (float | None)

  • alpha_max (float | None)

  • n_alpha (int | None)

  • n_departure (int | None)

  • max_transfer_time (float | None)

  • intersection_threshold (float | None)

  • min_distance_threshold (float | None)

  • collision_earth_radius (float | None)

  • collision_moon_radius (float | None)

  • integration_dt (float | None)

  • alpha_range (tuple[float, float] | None)

  • transfer_time_range (tuple[float, float] | None)

  • t_ins_range (tuple[float, float] | None)

  • velocity_angle_tolerance (float | None)

alpha_min

α(切向速度比)下界。推荐值 ∈ (0, 1.0]

Type:

float | None

alpha_max

α(切向速度比)上界。推荐值 ∈ [1.0, 3.0]

Type:

float | None

n_alpha

α 方向网格点数。推荐值 ∈ [51, 2001];Cui et al. 2025 Table 3 为 1001

Type:

int | None

n_departure

出发点采样数量。推荐值 ∈ [50, 500],典型值 200

Type:

int | None

max_transfer_time

最大转移时间(CR3BP 无量纲时间)。推荐值 ∈ [5.0, 30.0]

Type:

float | None

intersection_threshold

相交判定距离阈值(无量纲距离)。推荐值 ∈ [1e-4, 1e-2]

Type:

float | None

min_distance_threshold

候选解最小距离阈值(无量纲距离)。默认 100 km / 地月距离

Type:

float | None

collision_earth_radius

地球碰撞检测半径(无量纲距离)。200 km ≈ 0.0005

Type:

float | None

collision_moon_radius

月球碰撞检测半径(无量纲距离)。100 km ≈ 0.00026

Type:

float | None

integration_dt

积分时间步长(CR3BP 无量纲时间)。推荐值 ∈ [1e-4, 0.1]

Type:

float | None

alpha_range

优化阶段 α 搜索范围。推荐值 (0.5, 2.5)

Type:

tuple[float, float] | None

transfer_time_range

优化阶段转移时间范围。推荐值 (1.0, 30.0)

Type:

tuple[float, float] | None

t_ins_range

优化阶段插入时间范围。推荐值 (0.0, 10.0)

Type:

tuple[float, float] | None

velocity_angle_tolerance

速度平行性容差(弧度)。推荐值 1e-6

Type:

float | None

alpha_min: float | None = None
alpha_max: float | None = None
n_alpha: int | None = None
n_departure: int | None = None
max_transfer_time: float | None = None
intersection_threshold: float | None = None
min_distance_threshold: float | None = None
collision_earth_radius: float | None = None
collision_moon_radius: float | None = None
integration_dt: float | None = None
alpha_range: tuple[float, float] | None = None
transfer_time_range: tuple[float, float] | None = None
t_ins_range: tuple[float, float] | None = None
velocity_angle_tolerance: float | None = None