批量调优多个Gurobi模型的实现方法咨询
批量调优多个Gurobi模型的实现方法咨询
嗨,我来帮你搞定批量调优Gurobi模型的需求!你现在的代码只能处理单个.lp文件,其实只要稍微改造下,就能一次性处理文件夹里的所有模型啦,给你两种实用方案:
方案一:遍历文件夹逐个调优
这是最直接的方式,用Python的os模块遍历目标文件夹里的所有.lp文件,依次读取并调优,还能把调优后的参数保存下来方便后续使用:
import gurobipy as gp import os # 替换成你存放lp文件的实际文件夹路径 lp_folder = "./your_lp_files" # 遍历文件夹里的每个文件 for filename in os.listdir(lp_folder): # 只处理后缀为.lp的文件 if filename.endswith(".lp"): file_full_path = os.path.join(lp_folder, filename) print(f"开始调优模型:{filename}") try: # 读取模型并启动调优 model = gp.read(file_full_path) model.tune() # 将调优后的参数保存为prm文件,后续可直接加载 model.write(f"{filename}_tuned.prm") print(f"{filename} 调优完成!参数已保存为 {filename}_tuned.prm") except Exception as e: print(f"调优{filename}时出错:{str(e)}")
方案二:并行调优提升效率
如果你的机器有多个CPU核心,用并行处理可以大幅节省整体调优时间。这里用concurrent.futures的多进程方案(因为Gurobi是CPU密集型任务,多进程比多线程更高效):
import gurobipy as gp import os from concurrent.futures import ProcessPoolExecutor # 定义单个模型的调优函数 def tune_single_model(file_path): filename = os.path.basename(file_path) try: model = gp.read(file_path) model.tune() model.write(f"{filename}_tuned.prm") return f"✅ {filename} 调优成功" except Exception as e: return f"❌ {filename} 调优失败:{str(e)}" if __name__ == "__main__": lp_folder = "./your_lp_files" # 收集所有lp文件的完整路径 lp_file_list = [os.path.join(lp_folder, f) for f in os.listdir(lp_folder) if f.endswith(".lp")] # 设置并行进程数,建议根据你的CPU核心数调整,比如4核就设4 with ProcessPoolExecutor(max_workers=4) as executor: # 批量提交调优任务 results = executor.map(tune_single_model, lp_file_list) # 打印所有任务的结果 for result in results: print(result)
小提示
- 记得把代码里的
./your_lp_files替换成你实际的文件夹路径哦 - 调优后的
.prm文件可以通过model.read("xxx_tuned.prm")直接加载到模型中,不用重复调优 - 并行调优时,
max_workers不要设置得比CPU核心数太多,不然会导致资源竞争反而变慢
备注:内容来源于stack exchange,提问作者Max Berktold
相关产品推荐
相关产品推荐

