BookmarkSubscribeRSS Feed
Emara
Calcite | Level 5

Hi all,

I have an optimization problem where I want to minimize a numerical integration subject to certain constraints. Suppose that the objective function (the integration of "FUN") and the constraint are both computed using loops. I have one decesion variable "T" and one integration variable "M". I already wrote a part of the code(the part i wrote just performs the numerical integration )I really need  to complete the code . What I need to complete is to minimize the integration of "FUN". The decesion variable is "T" . The constraint I have is computed  in the same way of  "FUN" , but with M=0 &  "FUN"is restricted to the value "10". In otherwords, I want to minimize the integration of "FUN" where the integration variable is M, subject to the constraint that "FUN"=10 at M=0 and the decesion variable in this optimization is "T".

The code I was able to write(integrating "FUN") is:

proc iml;

start FUN(M);

x=0;

R=0;

do until (x<T);

x=normal(-1)+M;

R=R+5;

end;

return(R);

finish;

a={0 1}

call quad(k,"FUN",a};

quit;

Thanks,

Emara

1 REPLY 1
Ed_Hughes_sas
SAS Employee

Emara,

There's a quite similar posting about this on comp.soft-sys.sas which I believe is from you as well.
I've responded in the newsgroup but will respond here also in the interest of getting the information
to as many interested parties as possible.

Thanks for posting this question.  The best way to do this currently
is to use PROC NLP along with PROC FCMP (a Base SAS procedure) to
define the objective function.  I consulted with one of our developers
on this question and he sent some sample code which uses this approach
for a problem that's pretty similar to yours.  It's included at the
end of this email.

PROC OPTMODEL in SAS/OR is the successor to PROC NLP (it handles

not only nonlinear but also linear, mixed integer, and quadratic optimization).

However OPTMODEL is not yet FCMP-enabled and so it's best, given your

requirements, for you to stick with PROC NLP for now.

If you have any questions please feel free to contact me.

Thanks,

Ed Hughes
SAS/OR Product Manager
919-531-6916
Ed.Hughes@sas.com

Sample code follows:

data barddata;
input y @@;
datalines;
0.14 0.18 0.22 0.25 0.29 0.32 0.35 0.39
0.37 0.58 0.73 0.96 1.34 2.10 4.39
;

proc fcmp outlib=work.myfuncs.test;
function bard(x1, x2, x3);
  array y[15] /nosymbols ;
  rc = read_array('barddata', y);
  fx = 0;
  do k = 1 to 15;
   vk = 16 - k;
   wk = min(k,vk);
   fxk = y - (x1 + k/(vk*x2 + wk*x3));
   fx = fx + fxk**2;
  end;
  return (0.5*fx);
endsub;
run;

options cmplib = work.myfuncs;

proc nlp;
parms x1 x2 x3 = 1.0;
  bounds  0 <= x1 <= 10,
          0 <= x2 <= 10,
          0 <= x3 <= 10;
min bardfn;
bardfn = bard(x1,x2,x3);
run;


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.

Discussion stats
  • 1 reply
  • 1120 views
  • 0 likes
  • 2 in conversation