【问题标题】:How to set time limits to sub models?如何为子模型设置时间限制?
【发布时间】:2019-08-17 12:28:10
【问题描述】:

我想将给定配置的整个运行时间限制为 1800 秒,该配置包括调用子问题:1 和 2 的主要问题。 除此之外,能否请您告诉我如何为不同的子模型设置不同的时间限制?例如,如果我想将子问题 1 的运行时间限制为 500 秒,将子问题 2 的运行时间限制为 800 秒。 我使用了行-execute{ cplex.tilim=1800;},如代码描述所示,但程序运行时间超过 1800 秒。




 //-----------------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{}
 //-------------------------------------------------------

【问题讨论】:

    标签: cplex opl


    【解决方案1】:

    您可以像在预处理中那样设置时间限制,但您也可以在主块中这样做:

    你可以改变

    Sub1Opl.generate();
    Sub1Cplex.solve();
    

    进入

    Sub1Opl.generate();
    Sub1Cplex.tilim=60;
    Sub1Cplex.solve();
    

    如果您需要 Sub1CPLEX 在 60 秒后停止。

    注意:该时间限制适用于 cplex 求解,因此如果您需要为多次求解设置 1800 秒的总时间限制,则需要为每个求解使用较小的时间限制。

    【讨论】:

    • 感谢 Alex 先生提供的信息。那么,如果配置要运行 1800s,唯一的办法就是将子问题的限制设置为更小的值,对吧?
    • 我没有看到任何其他方式。
    • 如果此答案解决了您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2015-04-26
    相关资源
    最近更新 更多