Changeset 932 for trunk


Ignore:
Timestamp:
Dec 24, 2012 2:19:20 PM (7 years ago)
Author:
pbelotti
Message:

fixed additionalSDPcuts

Location:
trunk/Couenne/src/cut/sdpcuts
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Couenne/src/cut/sdpcuts/CouenneMatrix.cpp

    r931 r932  
    108108  }
    109109
    110   check_and_insert (rowInd, colInd, row_,                elem);
    111   check_and_insert (colInd, rowInd, col_, new exprClone (elem));
     110  check_and_insert (rowInd, colInd, row_, elem);
     111  if (elem -> code () == COU_EXPRCONST)
     112    elem = new exprClone (elem);
     113  check_and_insert (colInd, rowInd, col_, elem);
    112114}
    113115
  • trunk/Couenne/src/cut/sdpcuts/CutGen.cpp

    r930 r932  
    624624                                            int *card_v_mat,
    625625                                            int *evdec_num) const {
    626 
    627   if (running_n==1)
     626  if (running_n == 1)
    628627    return;
    629628
     
    634633
    635634  double
    636 
    637635    best_val    = 1,
    638636
     
    649647    *z          = new double [rnsq];
    650648
    651   //while (running_n > 1)
     649  // while (running_n > 1)
    652650
    653651  for (int k=0; k<running_n; k++) {
     
    679677    (*evdec_num)++;
    680678
     679    //------------------------------------------------------------------------------------------------------------------------------
    681680    dsyevx_interface (running_n - 1, T, card_ev, w, z, EV_TOL, -COIN_DBL_MAX, 0., 1, (running_n-1 == min_nz) ? (running_n - 1) : 1);
     681    //------------------------------------------------------------------------------------------------------------------------------
    682682
    683683    double val = w [0]; // minimum eigenvalue
     
    768768  delete [] wbest;
    769769
    770 }// myremoveBestOneRowCol()
     770}// myremoveBestOneRowCol ()
    771771
    772772
     
    778778  double *matrix = new double [n*n];
    779779
    780   // matrix[0] = 1;
    781   // for (int i=0;i<n;i++)
    782   //   matrix[n*(i+1)] = sol[i];
    783 
    784780  for (int i=0; i<n; i++)
    785781    for (int j=i; j<n; j++)
     
    789785
    790786  delete [] matrix;
    791 }// sparsify2()
    792 
     787} // sparsify2 ()
     788
     789
     790// Adds SDP cuts using negative eigenvectors where small (smaller than
     791// COUENNE_EPS) components are fixed to zero
    793792
    794793/************************************************************************/
     
    799798                                        const double *A,
    800799                                        const double *vector,
    801                                         int **indA) const{
    802 
    803   int *indices;
    804   indices = new int [n];
    805   int cnt = 0;
    806 
    807   for(int i=0;i<n;i++)
     800                                        int **indA) const {
     801  int
     802    *indices = new int [n],
     803    cnt = 0;
     804
     805  for (int i=0; i < n; i++)
    808806    indices [i] = ((fabs (vector [i]) > COUENNE_EPS) ? (cnt++) : -1);
    809807
    810   double *subA = new double[cnt*cnt];
    811 
    812   for (register int i=0; i<n; i++) {
     808  double *subA = new double [cnt*cnt];
     809
     810  for (register int i=0, k=0; i<n; i++)
     811
    813812    if (indices [i] >= 0) {
    814       for (register int j=0; j<n; j++) {
     813     
     814      for (register int j=0, k2 = 0; j<n; j++)
     815
    815816        if (indices [j] >= 0)
    816           subA [cnt*indices[j] + indices[i]] = A[n*j+i];
    817       }
    818     }
    819   }
     817          subA [cnt * k + k2++] = A [n*i + j];
     818
     819      ++k;
     820    }
    820821
    821822  double *w = NULL, *z = NULL;
     
    832833  for (int k=0; k<m; k++) {
    833834
    834     if (onlyNegEV_ && (w [k] > 0))
     835    if (onlyNegEV_ && (w [k] >= 0.))
    835836      break;
    836837
     
    840841      v [j] = *zbase++;
    841842
    842     for(int j=0;j<n;j++)
    843       newv[j] = (indices[j] >= 0) ? v [indices[j]] : newv[j] = 0;
     843    for(int j=0; j<n; j++)
     844      newv [j] = (indices [j] >= 0) ? v [indices [j]] : 0.;
    844845
    845846    genSDPcut (si, cs, minor, newv, newv, indA);
Note: See TracChangeset for help on using the changeset viewer.