コード例 #1
0
  void SqicInterface::init() {
    // Call the init method of the base class
    Conic::init();

    if (is_init_) sqicDestroy();

    inf_ = 1.0e+20;

    // Allocate data structures for SQIC
    bl_.resize(n_+nc_+1, 0);
    bu_.resize(n_+nc_+1, 0);
    x_.resize(n_+nc_+1, 0);
    hs_.resize(n_+nc_+1, 0);
    hEtype_.resize(n_+nc_+1, 0);
    pi_.resize(nc_+1, 0);
    rc_.resize(n_+nc_+1, 0);

    locH_ = st_[QP_STRUCT_H].colind();
    indH_ = st_[QP_STRUCT_H].row();

    // Fortran indices are one-based
    for (int i=0;i<indH_.size();++i) indH_[i]+=1;
    for (int i=0;i<locH_.size();++i) locH_[i]+=1;

    // Sparsity of augmented linear constraint matrix
    Sparsity A_ = vertcat(st_[QP_STRUCT_A], Sparsity::dense(1, n_));
    locA_ = A_.colind();
    indA_ = A_.row();

    // Fortran indices are one-based
    for (int i=0;i<indA_.size();++i) indA_[i]+=1;
    for (int i=0;i<locA_.size();++i) locA_[i]+=1;

    // helper functions for augmented linear constraint matrix
    MX a = MX::sym("A", st_[QP_STRUCT_A]);
    MX g = MX::sym("g", n_);
    std::vector<MX> ins;
    ins.push_back(a);
    ins.push_back(g);
    formatA_ = Function("formatA", ins, vertcat(a, g.T()));

    // Set objective row of augmented linear constraints
    bu_[n_+nc_] = inf_;
    bl_[n_+nc_] = -inf_;

    is_init_ = true;

    int n = n_;
    int m = nc_+1;

    int nnzA=formatA_.size_out(0);
    int nnzH=input(CONIC_H).size();

    std::fill(hEtype_.begin()+n_, hEtype_.end(), 3);

    sqic(&m , &n, &nnzA, &indA_[0], &locA_[0], &formatA_.output().nonzeros()[0], &bl_[0], &bu_[0],
         &hEtype_[0], &hs_[0], &x_[0], &pi_[0], &rc_[0], &nnzH, &indH_[0], &locH_[0],
         &input(CONIC_H).nonzeros()[0]);

  }
コード例 #2
0
ファイル: wsqic.cpp プロジェクト: tmmsartor/casadi
int main(int argc, char *argv[])
{
  int n = 15;
  int m = 18;
  std::vector<double> bl(n+m);
  std::vector<double> bu(n+m);

  double inf = 1.0e+20;

  std::fill(bl.begin(), bl.begin()+n, 0);

  std::fill(bu.begin(), bu.begin()+n, inf);


  // http://apmonitor.com/wiki/uploads/Apps/hs118.apm

  // LBX
  bl[0] =   8.0;
  bu[0] =  21.0;

  bl[1] =  43.0;
  bu[1] =  57.0;

  bl[2] =   3.0;
  bu[2] =  16.0;

  bu[3] =  90.0;
  bu[4] = 120.0;
  bu[5] =  60.0;
  bu[6] =  90.0;
  bu[7] = 120.0;
  bu[8] =  60.0;
  bu[9] =  90.0;
  bu[10] = 120.0;
  bu[11] =  60.0;
  bu[12] =  90.0;
  bu[13] = 120.0;
  bu[14] =  60.0;

  //
  std::fill(bl.begin()+n, bl.begin()+n+m, 0);
  std::fill(bu.begin()+n, bu.begin()+n+m, inf);

  //iObj   = 18  means the linear objective is row 18 in valA(*).
  //The objective row is free.

  int iObj   = 17;
  bl[n+iObj] = -inf;

  // LBG
  bl[n+0]  =  -7.0;
  bu[n+0]  =   6.0;

  bl[n+1]  =  -7.0;
  bu[n+1]  =   6.0;

  bl[n+2]  =  -7.0;
  bu[n+2]  =   6.0;

  bl[n+3]  =  -7.0;
  bu[n+3]  =   6.0;

  bl[n+4]  =  -7.0;
  bu[n+4]  =   7.0;

  bl[n+5]  =  -7.0;
  bu[n+5]  =   7.0;

  bl[n+6]  =  -7.0;
  bu[n+6]  =   7.0;

  bl[n+7]  =  -7.0;
  bu[n+7]  =   7.0;

  bl[n+8]  =  -7.0;
  bu[n+8]  =   6.0;

  bl[n+9] =  -7.0;
  bu[n+9] =   6.0;

  bl[n+10] =  -7.0;
  bu[n+10] =   6.0;

  bl[n+11] =  -7.0;
  bu[n+11] =   6.0;

  bl[n+12] =  60.0;
  bl[n+13] =  50.0;
  bl[n+14] =  70.0;
  bl[n+15] =  85.0;
  bl[n+16] = 100.0;


  std::vector<double> x0(n);

  x0[ 0]  =  20.0;
  x0[ 1]  =  55.0;
  x0[ 2]  =  15.0;
  x0[ 3]  =  20.0;
  x0[ 4]  =  60.0;
  x0[ 5]  =  20.0;
  x0[ 6]  =  20.0;
  x0[ 7]  =  60.0;
  x0[ 8]  =  20.0;
  x0[9]  =  20.0;
  x0[10]  =  60.0;
  x0[11]  =  20.0;
  x0[12]  =  20.0;
  x0[13]  =  60.0;
  x0[14]  =  20.0;

  sqic(&m , &n, &bl[0], &bu[0]);

  return 0;
}