You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenMDAO Dymos中trajectory.simulate重复触发setup的优化方案问询

利用类级缓存实现大气数据单次加载

针对OpenMDAO轨迹仿真中每个段对应独立Problem实例、大气数据重复加载的问题,可通过类属性缓存实现相同选项下数据仅加载一次,同时保留季节等选项对数据的影响,具体实现如下:

核心思路

用类级字典作为缓存容器,以选项组合的唯一标识为键存储已加载的大气数据。当不同Problem实例的组件使用相同选项时,直接复用缓存数据;选项不同时则加载对应数据并存入缓存。

完整代码实现

import openmdao.api as om

class AtmosphereCalculator(om.ExplicitComponent):
    # 类级缓存:键为选项组合的可哈希标识,值为加载完成的大气数据
    _data_cache = {}

    def initialize(self):
        # 声明影响数据加载的配置选项
        self.options.declare('season', default='summer', values=['summer', 'winter', 'spring', 'autumn'])
        self.options.declare('base_year', default=2020, types=int)

    def setup(self):
        # 生成选项的唯一键:将选项转为可哈希的元组,确保相同选项组合得到相同键
        option_key = (self.options['season'], self.options['base_year'])
        
        # 检查缓存,不存在则执行数据加载
        if option_key not in self._data_cache:
            # 替换为第三方库的实际加载逻辑,示例如下:
            # import atmospheric_lib
            # self._data_cache[option_key] = atmospheric_lib.load_dataset(
            #     season=self.options['season'], 
            #     year=self.options['base_year']
            # )
            print(f"Loading atmospheric data for {option_key}...")  # 测试用打印,实际删除
        
        # 将缓存数据绑定到实例属性,方便compute方法调用
        self.atm_data = self._data_cache[option_key]

        # 定义输入输出接口
        self.add_input('altitude', units='m', desc='Flight altitude')
        self.add_output('density', units='kg/m**3', desc='Atmospheric density')
        self.add_output('temperature', units='K', desc='Atmospheric temperature')

    def compute(self, inputs, outputs):
        # 复用缓存数据完成计算,替换为实际业务逻辑
        altitude = inputs['altitude']
        outputs['density'] = self.atm_data.get_density(altitude)
        outputs['temperature'] = self.atm_data.get_temperature(altitude)

注意事项

  • 选项可哈希性:如果选项包含字典等不可哈希类型,需先转换为排序元组或JSON字符串作为缓存键
  • 缓存管理:如需更新数据或清空缓存,可直接操作类属性AtmosphereCalculator._data_cache.clear()
  • 线程安全:多线程仿真场景下需添加锁机制(如threading.Lock)保护缓存读写,单线程环境无需额外处理

内容的提问来源于stack exchange,提问作者Jehan Dastoor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:12:28