| 396 | |
| 397 | template <typename T, typename U, typename V> |
| 398 | T zero_bounded_variables ( |
| 399 | const double eps, |
| 400 | T vect, |
| 401 | const T& x, |
| 402 | const T& gradient, |
| 403 | const U& x_lower, |
| 404 | const V& x_upper |
| 405 | ) |
| 406 | { |
| 407 | for (long i = 0; i < gradient.size(); ++i) |
| 408 | { |
| 409 | const double tol = eps*std::abs(x(i)); |
| 410 | // if x(i) is an active bound constraint |
| 411 | if (x_lower(i)+tol >= x(i) && gradient(i) > 0) |
| 412 | vect(i) = 0; |
| 413 | else if (x_upper(i)-tol <= x(i) && gradient(i) < 0) |
| 414 | vect(i) = 0; |
| 415 | } |
| 416 | return vect; |
| 417 | } |
| 418 | |
| 419 | // ---------------------------------------------------------------------------------------- |
| 420 |
no test coverage detected