求助:如何正确获取IPOPT的barrier_tol_factor等参数?
获取IPOPT参数的正确方法
在Julia的Ipopt包中,参数不能直接通过模块名或裸变量访问,必须绑定到具体的求解器实例操作,以下是两种可行的方式:
方式一:通过求解器实例直接访问
using Ipopt using JuMP # 创建带Ipopt求解器的模型 model = Model(Ipopt.Optimizer) # 获取底层求解器实例 solver = model.moi_backend.optimizer.model # 获取barrier_tol_factor参数值 k = solver[:barrier_tol_factor]
方式二:使用JuMP的属性接口获取
如果用JuMP建模,更推荐用官方的属性接口来获取参数:
using Ipopt using JuMP model = Model(Ipopt.Optimizer) # 先设置参数(可选,若要获取默认值可跳过此步) set_optimizer_attribute(model, "barrier_tol_factor", 1e-3) # 获取参数值 k = get_optimizer_attribute(model, "barrier_tol_factor")
为什么之前的写法无效?
barrier_tol_factor是IPOPT求解器实例的专属参数,不是全局变量或模块的静态属性,因此直接写barrier_tol_factor或Ipopt.barrier_tol_factor无法定位到具体的参数存储位置。
内容的提问来源于stack exchange,提问作者Annaquest
相关产品推荐
相关产品推荐

