Changeset 302


Ignore:
Timestamp:
Feb 13, 2010 5:57:01 PM (11 years ago)
Author:
pbelotti
Message:

more efficient, flexible checkNLP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Couenne/src/problem/checkNLP.cpp

    r295 r302  
    149149    for (int i=0; i < nVars (); i++) {
    150150
     151      exprVar *v = variables_ [i];
     152
    151153      if (Jnlst () -> ProduceOutput (Ipopt::J_ALL, J_PROBLEM)) {
    152         if (variables_ [i] -> Type () == AUX) {
     154        if (v -> Type () == AUX) {
    153155          printf ("checking aux ");
    154           variables_ [i] -> print (); printf (" := ");
    155           variables_ [i] -> Image () -> print ();
     156          v -> print (); printf (" := ");
     157          v -> Image () -> print ();
    156158          printf (" --- %.12e = %.12e [%.12e]; {",
    157                   (*(variables_ [i])) (),
    158                   (*(variables_ [i] -> Image ())) (),
    159                   (*(variables_ [i])) () -
    160                   (*(variables_ [i] -> Image ())) ());
     159                  (*(v)) (),
     160                  (*(v -> Image ())) (),
     161                  (*(v)) () -
     162                  (*(v -> Image ())) ());
    161163          //for (int j=0; j<nVars (); j++)
    162164          //printf ("%.12e ", (*(variables_ [j])) ());
     
    165167      }
    166168
    167       CouNumber delta;
    168 
    169169      // check if auxiliary has zero infeasibility
    170170
    171       if ((variables_ [i] -> Type () == AUX) &&
    172           (fabs (delta = (*(variables_ [i])) () -
    173                  (*(variables_ [i] -> Image ())) ()) > feas_tolerance_)) {
    174 
    175         Jnlst()->Printf(Ipopt::J_MOREVECTOR, J_PROBLEM,
    176                         "checkNLP: auxiliarized %d violated (%g)\n", i, delta);
    177 
    178         throw infeasible;
     171      if (v -> Type () == AUX) {
     172
     173        CouNumber
     174          varVal = (*v) (),
     175          imgVal = (*(v -> Image ())) (),
     176          delta  = varVal - imgVal,
     177          normz  = fabs (delta) / (1 + 0.5 * (fabs (varVal) + fabs (imgVal)));
     178
     179        if (normz > feas_tolerance_) {
     180
     181          Jnlst () -> Printf (Ipopt::J_MOREVECTOR, J_PROBLEM,
     182                              "checkNLP: auxiliary %d violates tolerance %g by %g\n",
     183                              i, feas_tolerance_, delta);
     184
     185          throw infeasible;
     186        }
    179187      }
    180188    }
Note: See TracChangeset for help on using the changeset viewer.