C++环境下Gurobi模型内存限制设置失败,求正确方法
Gurobi内存限制设置无效的解决方法
你原来的代码失效的核心原因是:内存限制参数(MemLimit)是环境级参数,需要在环境启动(env.start())之前配置。你在启动环境、创建模型后才设置,此时环境已经初始化完成,参数无法正确生效。
以下是两种正确的设置方式:
方法一:环境启动前设置(推荐)
在调用env.start()之前就配置好内存限制,这样环境启动时会加载该配置,后续创建的模型自动继承:
GRBEnv env = GRBEnv(true); env.set("LogFile", "Model_DEBUG.log"); // 设置8GB内存限制,单位为GB env.set(GRB_DoubleParam_MemLimit, 8.0); env.start(); GRBModel model = GRBModel(env);
方法二:模型创建后动态调整(适用于运行时修改)
如果需要在模型创建后、优化前调整内存限制,可以直接修改模型关联的环境参数,但要确保在model.optimize()之前执行:
GRBEnv env = GRBEnv(true); env.set("LogFile", "Model_DEBUG.log"); env.start(); GRBModel model = GRBModel(env); // 动态设置8GB内存限制 model.getEnv().set(GRB_DoubleParam_MemLimit, 8.0); // 之后执行模型优化 model.optimize();
注意事项
- MemLimit参数的单位是GB,你设置的
8是正确的,代表限制8GB内存使用。 - 若在模型优化过程中修改该参数,需要先中断优化,修改后再重新启动优化才能生效。
内容的提问来源于stack exchange,提问作者Igor Eduardo
相关产品推荐
相关产品推荐

