2014年4月10日星期四

如何用c++ cplex定义数组和矩阵

刚接触c++,cplex一定会对定义数组和矩阵比较迷茫,下面就几个例子详细说明一下如何对这些进行定义。
我就拿例子来说明吧,

typedef IloArray<IloNumArray>    NumMatrix;     // 首先要在最前面define type,其中<IloNumArray>代表的是cplex里的一个数组,加上括号和外面的IloArray这样就定义了一个二维的矩阵,同理再在外面继续加可以定义三维,多维等;这里定义的NumMatrix是参数的矩阵。
typedef IloArray<IloNumVarArray> NumVarMatrix;  // 这里是定义存储变量的二维矩阵。

...中间代码省略

   IloEnv env;
   try {
      IloInt i, j;
      IloModel model(env);

      IloInt nbDemand = 4;
      IloInt nbSupply = 3;
      IloNumArray supply(env, nbSupply, 1000.0, 850.0, 1250.0);  //对于一维数组来说,因为cplex的IloNumArray就是已经定义好的数组,这里就可以直接拿来用
      IloNumArray demand(env, nbDemand, 900.0, 1200.0, 600.0, 400.);

      NumVarMatrix x(env, nbSupply); //前面定义过的变量矩阵,x是其的一个对象,范围是nbSupply
      NumVarMatrix y(env, nbSupply);

      for(i = 0; i < nbSupply; i++) {
         x[i] = IloNumVarArray(env, nbDemand, 0.0, IloInfinity, ILOFLOAT);
         y[i] = IloNumVarArray(env, nbDemand, 0.0, IloInfinity, ILOFLOAT);
      } //这里是对x和y矩阵的每一个位置的变量进行定义,即xij,i从1到nbSupply,j从1到nbDemand,xij的值大于等于0小于无穷,属于浮点型,即连续变量

没有评论:

发表评论