Minimization Problem: How to formulate functions for nloptr?

The overview of the problem is as follows:

Given observed data x(1)....x(n) and a known fixed 'target' T with tolerance E, solve for parameters b0, b1, & b2, which satisfy:

abs{ T - sum[i=1 to n] exp(b0+b1x(i)+b2*x(i)^2)x(i) }<E

and minimise

sum[i=1 to n] [(exp(b0+b1x(i)+b2x(i)^2))^2]

with the constraint that the sum of the exp(b0+b1x(i)+b2x(i)^2) terms equals n,

i.e. the mean of the exp(b0+b1x(i)+b2x(i)^2) terms equals 1.

I am trying to solve the following problem in R using Nloptr:

Objective is to maximise effective sample size (ESS), so I have been attempting to minimise the
inverse of ESS:

i.e:   obj.func <- function(n, wi) {
  ESS<- sum(wi^2)
  return(ESS)}

Using simulated data as follows:

             x1 <- runif(5) 
             n <- 5 
             y <- function(x1, b0, b1, b2) {
                                Y <- b0 + b1*x1 + b2*(x1^2) 
                                return(Y)}
             ym <- y(x1, b0=1.3,b1=-0.5,b2=0.2)
             w <- function(ym, n){n * (exp((ym)) / sum(exp(ym))) } *#Function for weight*
             wi <- w(ym, n) 

We need to do this under the following constraint:

con <- function(x1, wi, n){
     abs((weighted.mean(x1, wi))-(mean(x1))) <= 0.01   *#where E <- 0.01*}

I think that I am unable to use nloptr to complete this minimisation to get the optimum values of the b variables as the objective function and constraint function as the functions are not in the same terms. (constraint relies on x1 as well as n and wi)

Does anyone have any suggestions on how to solve this optimization problem? Or how I can get around my issues with nloptr? I have looked at the 'bb' package but this does not seem suitable.

One of these is bound to work. I'd start with {optimx}

1 Like

Thank you! That's really helpful.

Do you have/know of any examples using this function in a similar way?