Statistical programming, matrix languages, and more

How can I pass extra arguments to the objective function in a nonlinear optimization exercise

Accepted Solution Solved
Reply
Contributor
Posts: 35
Accepted Solution

How can I pass extra arguments to the objective function in a nonlinear optimization exercise

It looks that the objective function used in nonlinear optimization routines can only have one input vector. However, what if I need to pass some other parameters to the objective function. For example, I want to minimize the sum of square of difference between a function value and a target value, and the target value is user defined. Let me use a simple case, suppose x is a 3*1 vector I want to find to minimize the following funciton.

 

z=(x[1]-y[1])**2 + (x[2]-y[2])**3 + (x[3]-y[3])**2, where y is the vector of target specified by users. Therefore, it is better not hard coded in the objective function.

 

Ideally, the objective function should have two arguments, x and y;

   start obj_func(x,y);

   z=(x[1]-y[1])**2 + (x[2]-y[2])**3 + (x[3]-y[3])**2;

return(z);

finish obj_func;

 

The reason I cannot put x and y together as a single vector is that I only need to search for x, for a given y. In MATLAB, all the optimization routines allow passing extra arguements to the objective function. I am not sure if I can do similar things in SAS.

 

Thanks a bunch.

 

 

 


Accepted Solutions
Solution
‎02-25-2016 02:55 PM
SAS Super FREQ
Posts: 3,225

Re: How can I pass extra arguments to the objective function in a nonlinear optimization exercise

[ Edited ]

Use commas, as in

global(y1, y2, y3);

View solution in original post


All Replies
SAS Super FREQ
Posts: 3,225

Re: How can I pass extra arguments to the objective function in a nonlinear optimization exercise

[ Edited ]

Use the GLOBAL clause to list parameters that are important to evaluate the function, but that are not optimized:

start obj_func(x) GLOBAL(y);

 

See the article "Maximum likelihood estimation in SAS/IML" or these other blog posts:

http://blogs.sas.com/content/iml/tag/optimization

 

Contributor
Posts: 35

Re: How can I pass extra arguments to the objective function in a nonlinear optimization exercise

Thanks, Rick.

 

I am reading your article, once I found there is a similar question posted earlier on the forum. Here is a quick related question. If I have mutiple extra arguments, which are difficult to be written as a single matrix, how should I write the global clause? Should it be like

 

global (y1,y2,...)

 

or global (y1) global (y2) .... ?

 

Thanks

Solution
‎02-25-2016 02:55 PM
SAS Super FREQ
Posts: 3,225

Re: How can I pass extra arguments to the objective function in a nonlinear optimization exercise

[ Edited ]

Use commas, as in

global(y1, y2, y3);

Post a Question
Discussion Stats
  • 3 replies
  • 246 views
  • 1 like
  • 2 in conversation