Statistical programming, matrix languages, and more

Non negative decision variable (x ) in CALL NLPQN

Reply
Contributor
Posts: 20

Non negative decision variable (x ) in CALL NLPQN

I want to put x as non negative decision variable in the following code, so how can I put this constraint in the code?

proc iml;
start fun(x)global(m,l,g);
sumf=0;
do i = 1 to 3;
sumf = sumf + (m*l)+ (g* k)**2 /(l+ x)**2;
end;return (sumf);finish fun;
start con(k) global(cl,l);
c=j(2,1,0);
sumc1=0; do i = 1 to 2;sumc1 = sumc1 + (cl1**2 *l/(l+x)**2);end;
c[1]= 10-sumc1;
c[2]=(max(l)/min(l))-(max(l)+x)/(min(l)+x);
return (c);
finish con;
k=j(1,1,0);
optn=j(1,11,.); optn[11]=0; optn[10]=2;
call nlpqn (rc, kres, "fun", k, optn) nlc="con";
SAS Employee
Posts: 94

Re: Non negative decision variable (x ) in CALL NLPQN

Just add x <= 0 to your constraint module:

start con(x) global(cl1,l);
c=j(3,1,0);
sumc1=0;
do i = 1 to 2;
sumc1 = sumc1 + (cl1**2 *l/(l+x)**2);
end;
c[1]= 10-sumc1;
c[2]=(max(l)/min(l))-(max(l)+x)/(min(l)+x);
c[3]= x; /* to satisfy x >= 0 */
return (c);
finish con;

You will also need to change optn[10] to 3
SAS Employee
Posts: 94

Re: Non negative decision variable (x ) in CALL NLPQN

don't know what happend to the last reply:

start con(x) global(cl1,l);
c=j(3,1,0);
sumc1=0;
do i = 1 to 2;
sumc1 = sumc1 + (cl1**2 *l/(l+x)**2);
end;
c[1]= 10-sumc1;
c[2]=(max(l)/min(l))-(max(l)+x)/(min(l)+x);
c[3]= x; /* satisfy x >= 0 */
return (c);
finish con;

You will also need to change optn[10] to 3
SAS Super FREQ
Posts: 3,630

Re: Non negative decision variable (x ) in CALL NLPQN

I'll remind everyone that this text editor treats LeftBracket-i-RightBracket
as "begin italicize." To work around this, use a different index variable (such as x) or put a space between the brackets (such as x[ i ]).
Ask a Question
Discussion stats
  • 3 replies
  • 281 views
  • 0 likes
  • 3 in conversation