Statistical programming, matrix languages, and more

Equality and Inequality Constraints in nlpnms

Reply
Contributor
Posts: 37

Equality and Inequality Constraints in nlpnms

Hi all,

In my problem, I have two non linear constrains ; one of them in is arl1 <= 4 and the other one arl0 >= 500 and this is my problem because when I wrote  these constraints using proc iml, the SAS considers them as equality constraints and I get an arl0 value=500, so how can I write this constraint in SAS so that it is considered as a greater than constraint? please note that I set optn[10]=2;optn[11]=0;


This is part of my program :

start
arl(x);

bb0=j(2,1,0.);

m=100;

  meuw=0;

  L=x[2]*SQRT(x[1]/(2-x[1]));

t=2*m+1;

   delta=2*L/t;

    z=-L+.5*delta;

  do
i=
2 to t;

k=-L+(i-.5)*delta;

z=z//k;

  end;

        do
i=
1 to t;

        zz=0;

   

                           do
j=
1 to t;

kone=((z[j,]+delta/2)-(1-x[1])*z[i,])/x[1];

              ktwo=((z[j,]-delta/2)-(1-x[1])*z[i,])/x[1];

            
pij=probnorm(kone)-probnorm(ktwo);

              zz=zz//pij;

              end;

       if
i=
1 then r=zz;

       else

       r=r||zz;

       end;

       
v=j(t,
1,0);

       v[((t+1)/2),]=1;

      
v=t(v);

  r=r[2:t+1,];

r=t(r);

arl=inv(I(t)-r)*j(t,1,1);

 

arl0=(v*arl);

  bb0[1]=arl0-500;

m=100;

shift=2;

L=x[2]*SQRT(x[1]/((2-x[1])));

t=2*m+1;

delta=2*L/t;

 

z=-L+.5*delta;

do
i=
2 to t;

k=-L+(i-.5)*delta;

z=z//k;

end;

          do
i=
1 to t;

        zz=0;

              do
j=
1 to t;

              kone=((z[j,]+delta/2)-(1-x[1])*z[i,])/x[1];

                ktwo=((z[j,]-delta/2)-(1-x[1])*z[i,])/x[1];

            
pij=probnorm(kone-(shift*sqrt(n)))-probnorm(ktwo-(shift*sqrt(n)));

 

              zz=zz//pij;

 

              end;

        if
i=
1 then r=zz;

       else

       r=r||zz;

       end;

       
v=j(t,
1,0);

       v[((t+1)/2),
]=
1;

       
v=t(v);

r=r[2:t+1,];

r=t(r);

arl=inv((I(t)-r))*j(t,1,1);

arl1=(v*arl);

      
bb0[
2]=4-arl1;

    return (bb0);

finish
arl;

con
= {
0.   0.,

        1.   .};

x={0.3  2.5};

optn=j(1,11,.);optn[1]=0;optn[2]=2;optn[10]=2;optn[11]=0;

 

CALL nlpnms(rc,xres,"Cost",x,optn,con)nlc="arl";

quit;

Thanks,

Aya

SAS Super FREQ
Posts: 3,419

Re: Equality and Inequality Constraints in nlpnms

Documentation and an example of using a linear constraint matrix is available at

SAS/IML(R) 12.3 User's Guide

However, you need to debug your function before you can optimize it.  It looks to me like the 'n' in sqrt(n) is not defined. Also, you are dividing by x[1], so you need to introduce the constraint that x1>0.

Ask a Question
Discussion stats
  • 1 reply
  • 275 views
  • 0 likes
  • 2 in conversation