Hello, I’ve encountered a (weired) problem when using proc lp to do linear optimization. I’d really appreciate it if anyone can shed some light on it.

I am doing a linear minimization with several linear constraints. My constraints include several equations, four inqualities, upper bounds for every coefficient, and a lower bound that requires all the coefficients to be non-negative. I used the simplest command such as

proc lp data= trial_t2 PRIMALOUT=optimal MAXIT1=1000000 MAXIT2=100000 ;

id id;

type type;

rhs rhs; run;

I need to do this optimization every day for several years. I found that for some days, the optimized results somehow have a couple NEGATIVE coefficients, which clearly violates my lower bound. SAS doesn’t appear to recognize its mistake and still prints out the “terminated successfully” message, which implies the problem has been successfully solved.

Meanwhile it seems that SAS is able to recognize the lower bound, because if I set the lower bound to be higher than the upper bound, I’ll indeed receive a “infeasible message”. Moreover, if I change the lower bound to be something like “-0.00001”, I can observe that most of the coefficients are indeede binded by this lower bound, while a couple other coefficients obtain values that are obviously lower than -0.00001.

I have tried leaving out the lower bound (for supposingly the default setting in PROC LP is to set the coefficients to be non-negative), and I have tried manually enter the lower bound as 0’s. Same error accurs. It’s as if SAS somehow decides to “ignore” the lower bounds for a couple coefficients, but at the same time recognizing the lower bounds for other coefficients.

I found this utterly confusing and I’ve desperately searching for answers. Any help would be much appreciated.

P.s. I tried the program in both 9.2 and 9.3. Same error accurs.