# kktchk: Check Kuhn Karush Tucker conditions for a supposed function... In optextras: Tools to Support Optimization Possibly with Bounds and Masks

## Description

Provide a check on Kuhn-Karush-Tucker conditions based on quantities already computed. Some of these used only for reporting.

## Usage

 ```1 2``` ``` kktchk(par, fn, gr, hess=NULL, upper=NULL, lower=NULL, maximize=FALSE, control=list(), ...) ```

## Arguments

 `par` A vector of values for the parameters which are supposedly optimal. `fn` The objective function `gr` The gradient function `hess` The Hessian function `upper` Upper bounds on the parameters `lower` Lower bounds on the parameters `maximize` Logical TRUE if function is being maximized. Default FALSE. `control` A list of controls for the function `...` The dot arguments needed for evaluating the function and gradient and hessian

## Details

kktchk computes the gradient and Hessian measures for BOTH unconstrained and bounds (and masks) constrained parameters, but the kkt measures are evaluated only for the constrained case.

## Value

The output is a list consisting of

 `gmax` The absolute value of the largest gradient component in magnitude. `evratio` The ratio of the smallest to largest Hessian eigenvalue. Note that this may be negative. `kkt1` A logical value that is TRUE if we consider the first (i.e., gradient) KKT condition to be satisfied. WARNING: The decision is dependent on tolerances and scaling that may be inappropriate for some problems. `kkt2` A logical value that is TRUE if we consider the second (i.e., positive definite Hessian) KKT condition to be satisfied. WARNING: The decision is dependent on tolerances and scaling that may be inappropriate for some problems. `hev` The calculated hessian eigenvalues, sorted largest to smallest?? `ngatend` The computed (unconstrained) gradient at the solution parameters. `nnatend` The computed (unconstrained) hessian at the solution parameters.

`optim`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32``` ```cat("Show how kktc works\n") # require(optimx) require(optextras) jones<-function(xx){ x<-xx y<-xx ff<-sin(x*x/2 - y*y/4)*cos(2*x-exp(y)) ff<- -ff } jonesg <- function(xx) { x<-xx y<-xx gx <- cos(x * x/2 - y * y/4) * ((x + x)/2) * cos(2 * x - exp(y)) - sin(x * x/2 - y * y/4) * (sin(2 * x - exp(y)) * 2) gy <- sin(x * x/2 - y * y/4) * (sin(2 * x - exp(y)) * exp(y)) - cos(x * x/2 - y * y/4) * ((y + y)/4) * cos(2 * x - exp(y)) gg <- - c(gx, gy) } ans <- list() # to ensure structure available # If optimx package available, the following can be run. # xx<-0.5*c(pi,pi) # ans <- optimr(xx, jones, jonesg, method="Rvmmin") # ans ans\$par <- c(3.154083, -3.689620) kkans <- kktchk(ans\$par, jones, jonesg) kkans ```