【问题标题】:Defining a binary decision variable in java using cplex使用 cplex 在 java 中定义二元决策变量
【发布时间】:2016-07-26 18:46:51
【问题描述】:

我正在尝试使用 cplex 在 java 中定义一个二元决策变量。这是一个二维变量。这意味着如果一条路径从特定站点开始,它应该是 1 或 0。我有一组站点 J 和一组路径 K,我的决策变量是 Z_jk。目前我正在定义如下代码,但它不起作用。有人可以帮帮我吗?

提前致谢。

// define variables
                z = new IloNumVar[stations_start.size()][];
                for (int j=0; j<stations_start.size();j++) {
                    z[j] = cplex.numVarArray(paths.size(),0,1);
                    for (int k=0;k<paths.size();k++) {
                        z[j][k] = cplex.numVar(new_column, 0, 1,"z");
                        z[j][k].setName("z."+j+"."+k);  
                    }   
                }

【问题讨论】:

    标签: java cplex


    【解决方案1】:

    您正在尝试创建二元决策变量的二维数组。你遇到了什么错误?

    尝试查看一些随 CPLEX 提供的示例代码。例如,请参见 transport.java,其中包含一些像这样声明和初始化的 2D 变量数组:

        IloNumVar[][] x = new IloNumVar[nbSupply][];
        IloNumVar[][] y = new IloNumVar[nbSupply][];
    
        for (int i = 0; i < nbSupply; i++) {
           x[i] = cplex.numVarArray(nbDemand, 0., Double.MAX_VALUE);
           y[i] = cplex.numVarArray(nbDemand, 0., Double.MAX_VALUE);
        } 
    

    【讨论】:

      【解决方案2】:

      对于二元决策变量,您可能更喜欢使用IloBoolVar 而不是IloNumVar 甚至IloIntVar 选项。

      但是,您确实需要以两种方式之一声明维度。您已声明 new IloNumVar[stations_start.size()][]; 但未指定第二个维度。最简单的方法是声明:

      z = new IloBoolVar[stations_start.size()][paths.size()];
      

      或者,您可以保留现有声明,但在循环中添加第二个维度:

      z = new IloBoolVar[stations_start.size()][];
      for (int j=0; j<stations_start.size(); j++) {
          z[j] = new IloBoolVar[paths.size()];
          ... existing assignments ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多