如何为成本设置描述并便捷检查初始猜测时的成本值?
成本描述设置与初始值批量检查解决方案
问题1:成本描述设置为空字符串的解决方法
你提到用.evaluator().set_description()无法为成本设置描述,这是因为多数优化框架(如OpenMDAO)中,成本(目标函数)的描述需要在定义阶段直接指定,而非通过事后调用evaluator的方法修改。以OpenMDAO为例,正确的做法是在添加目标时通过desc参数声明描述:
# 正确方式:添加目标时直接设置描述 prog.add_objective('total_cost', desc='系统总运营成本') # 错误方式:事后通过evaluator设置(不会生效) # prog.get_objective('total_cost').evaluator().set_description('系统总运营成本')
如果是通过驱动程序声明目标,同样可以在declare_objective时传入desc参数:
driver.declare_objective('total_cost', desc='系统总运营成本')
设置完成后,你可以通过prog.get_objective('total_cost').desc验证描述是否生效。
问题2:批量检查大量成本的初始猜测值
当存在大量成本时,无需手动追踪每个变量并逐个传入Eval,可通过框架的批量查询能力实现:
先运行模型计算初始值:
prog.run_model() # 基于初始猜测值运行模型,计算所有输出(包括成本)批量获取所有成本的信息与值:
以OpenMDAO为例,可遍历驱动程序中声明的所有目标,自动获取描述和初始值:# 获取所有目标的元数据 for obj_prom_name, obj_data in prog.driver.objectives.items(): # 获取描述(若未设置则显示默认文本) obj_desc = obj_data.get('desc', '未命名成本') # 获取初始猜测下的成本值 obj_val = prog.get_val(obj_prom_name) print(f"成本[{obj_desc}]: {obj_val}")
这种方式无需手动维护成本变量列表,框架会自动识别所有已声明的成本,大幅减少额外代码量。
内容的提问来源于stack exchange,提问作者HoliInn
相关产品推荐
相关产品推荐

