我希望将给定配置的整个运行时间限制为1800s,该配置由主问题组成,通过这些主问题调用子问题:1和2。除此之外,您能告诉我如何针对不同的子模型设置不同的时间限制吗?例如,如果我想将子问题1的运行时间限制在500s,将子问题2的运行时间限制在800s。我使用了代码描述中所示的行- execute{ cplex.tilim=1800;},但程序的运行时间超过1800s。
//-----------------Main-problem.mod-------------------------------
//variables definition here
execute {cplex.tilim= 1800;}
Objective function;
subject to {
Constraints:1-7
}
execute FillDuals {
Dual of constraint 1;
}
}
main{
thisOplModel.settings.mainEndEnabled = true;
thisOplModel.generate();
var masterDef = thisOplModel.modelDefinition;
var masterCplex = cplex;
var masterData = thisOplModel.dataElements;
var masterOpl = new IloOplModel(masterDef,masterCplex);
masterOpl.addDataSource(masterData);
masterOpl.generate();
masterCplex.solve();
masterOpl.postProcess();
//\**************Calling Sub-Problem 1*********************************
var SubSource1 = new IloOplModelSource("Sub-Problem1.mod");
var Sub1Def = new IloOplModelDefinition(SubSource1);
var Sub1Def = thisOplModel.modelDefinition;
var Sub1Cplex = cplex;
var Sub1Data = thisOplModel.dataElements;
var Sub1Opl = new IloOplModel(Sub1Def,Sub1Cplex);
Sub1Opl.addDataSource(Sub1Data);
Sub1Opl.generate();
Sub1Cplex.solve();
//\****************************************************************
//\*******************Calling Sub-Problem2*********************************
var SubSource2 = new IloOplModelSource("Sub-Problem2.mod");
var Sub2Def = new IloOplModelDefinition(SubSource2);
var Sub2Def = thisOplModel.modelDefinition;
var Sub2Cplex = cplex;
var Sub2Data = thisOplModel.dataElements;
var Sub2Opl = new IloOplModel(Sub2Def,Sub2Cplex);
Sub1Opl.addDataSource(Sub2Data);
Sub2Opl.generate();
Sub2Cplex.solve();
//\****************************************************************
} //end of main
//--------------------Sub-Problem1.mod------------------------
variables and constants definition;
Objective function;
subject to {
Constraints:
}
//SubOpl1 doesnt have main function main{}
//-------------------Sub-Problem2.mod----------------------
variables and constants definitions;
Objective function;
subject to {
Constraints:
}
//SubOpl2 doesnt have main function main{}
//-------------------------------------------------------发布于 2019-03-27 17:01:49
您可以像在预处理过程中一样设置时间限制,但也可以在主块中执行此操作:
你可以改变
Sub1Opl.generate();
Sub1Cplex.solve();转到
Sub1Opl.generate();
Sub1Cplex.tilim=60;
Sub1Cplex.solve();如果您需要Sub1CPLEX在60秒后停止。
注:该时间限制适用于cplex解算,因此如果您需要对多个解算设置总1800个时间限制,则需要对每个解算使用较小的时间限制。
https://stackoverflow.com/questions/55368722
复制相似问题