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 .

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