Calcite | Level 5

## 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

## 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.

From The DO Loop