BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
bigbigben
Obsidian | Level 7

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.

 

 

 

1 ACCEPTED SOLUTION
3 REPLIES 3
Rick_SAS
SAS Super FREQ

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

 

bigbigben
Obsidian | Level 7

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

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 3 replies
  • 1035 views
  • 1 like
  • 2 in conversation