Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Annotations in reference manual example code are incorrect #152

Closed
adcascone opened this issue Feb 9, 2024 · 3 comments
Closed

Annotations in reference manual example code are incorrect #152

adcascone opened this issue Feb 9, 2024 · 3 comments

Comments

@adcascone
Copy link

I tested the code included on p. 46 of the reference manual:

## Solve the Hock-Schittkowski problem no. 100
x0.hs100 <- c(1, 2, 0, 4, 0, 1, 1)

fn.hs100 <- function(x) {
(x[1]-10)^2 + 5*(x[2]-12)^2 + x[3]^4 + 3*(x[4]-11)^2 + 10*x[5]^6 +
7*x[6]^2 + x[7]^4 - 4*x[6]*x[7] - 10*x[6] - 8*x[7]
}

hin.hs100 <- function(x) {
h <- numeric(4)
h[1] <- 127 - 2*x[1]^2 - 3*x[2]^4 - x[3] - 4*x[4]^2 - 5*x[5]
h[2] <- 282 - 7*x[1] - 3*x[2] - 10*x[3]^2 - x[4] + x[5]
h[3] <- 196 - 23*x[1] - x[2]^2 - 6*x[6]^2 + 8*x[7]
h[4] <- -4*x[1]^2 - x[2]^2 + 3*x[1]*x[2] -2*x[3]^2 - 5*x[6] +11*x[7]
return(h)
}

S <- slsqp(x0.hs100, fn = fn.hs100, # no gradients and jacobians provided
hin = hin.hs100,
control = list(xtol_rel = 1e-8, check_derivatives = TRUE))
S

## Optimal value of objective function: 690.622270249131 *** WRONG ***

# Even the numerical derivatives seem to be too tight.
# Let's try with a less accurate jacobian.

hinjac.hs100 <- function(x) nl.jacobian(x, hin.hs100, heps = 1e-2)
S <- slsqp(x0.hs100, fn = fn.hs100,
hin = hin.hs100, hinjac = hinjac.hs100,
control = list(xtol_rel = 1e-8))
S

## Optimal value of objective function: 680.630057392593 *** CORRECT ***

The included optimal values provided here seem to be swapped. That is, 680.630057392593 is the output of

S <- slsqp(x0.hs100, fn = fn.hs100, # no gradients and jacobians provided
hin = hin.hs100,
control = list(xtol_rel = 1e-8, check_derivatives = TRUE))

and 690.622270249131 is the output of

S <- slsqp(x0.hs100, fn = fn.hs100,
hin = hin.hs100, hinjac = hinjac.hs100,
control = list(xtol_rel = 1e-8))

I agree that 680.630057392593 is correct, as that's what's listed as the optimal solution value for No. 100 in the Hock-Schittkowski suite of questions (retrieved from: Test Problems for Nonlinear Programming at this link - https://klaus-schittkowski.de/downloads.htm)

@aadler
Copy link
Contributor

aadler commented Jun 4, 2024

Hello, @adcascone. As part of my addressing issue 148 I am redoing the examples. The incorrect values you list should be addressed as part of rewriting the documentation to reflect the desired inequality behavior of "<= 0". Thank you.

@astamm
Copy link
Owner

astamm commented Jun 15, 2024

Thanks @aadler.

@astamm
Copy link
Owner

astamm commented Jun 15, 2024

Should be fixed in #157 thanks to @aadler .

@astamm astamm closed this as completed Jun 15, 2024
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Nov 6, 2024
# nloptr 2.1.1

This is a patch release to work around a bug in the CRAN checks. Specifically,
one of the unit tests for the `isres()` algorithm was failing on some CRAN
builds because convergence is stochastic with slightly different results even
with the same fixed seed prior to calling the function.

# nloptr 2.1.0
This release deprecates the default behavior of the inequality equations in any
wrapper function which uses them. Currently, they are calibrated to be >= 0.
This version allows for the equations to be consistent with the main `nloptr`
function, which requires <= 0. In a future release, the default behavior will
switch to assuming the calibration is <= 0, and eventually, the >= 0 behavior
will be removed. It also includes a large number of safety and efficiency
changes, and an expansion of the unit tests to 100% coverage for all files but
one. The major changes include:

* Reversed the direction of the inequality equations `hin` and `hinjac` in the
wrapper functions which use them, bringing them into compliance with the main
`nloptr` call. This addresses
[Issue #148](astamm/nloptr#148);
* Cleaned the Hock-Schittkowski problem no. 100, Hartmann 6-dimensional, and
Powell exponential examples. This addresses
[Issue #152](astamm/nloptr#152) and
[Issue #156](astamm/nloptr#156);
* Updated roxygen version;
* Updated maintainer email;
* Deal with NA returns from `parallel::detectCores()` (contributed by @jeroen in
PR #150);
* Setup rhub v2 checks;
* Update cmake installation instructions on Mac with brew (#146);
* Allow use of equality constraints with COBYLA (#135);
* Replaced the unit testing framework of `testthat` with `tinytest` (See
[Issue #136](astamm/nloptr#136));
* Brought coverage of `is.nloptr` to 100%. The only file not completely covered
by unit tests is `nloptr.c`. The uncovered calls are error messages which get
trapped by tests in R before the call gets to C;
* Linted package for code correctness and consistency;
* Updated vignette, DESCRIPTION, and NEWS;
* Updated package website to use bootstrap 5;
* Expanded unit tests: coverage now over 97% with no file below 90%;
* Removed forcing `C++11`;
* Added safety checks to C code;
* Added many safety and efficiency enhancements to R code;
* Most R code style made self-consistent;
* Updated documentation and messages for accuracy and mathematical formatting
* Updated Github actions;
* Some bugfixes (e.g. in `isres` or the warning in `nl.grad`).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants