Hello,
I have a function I neet to optimize using PROC GA and it is simple -- 0.1*x*y. But then I have constraint which is not that simple x**2 + y**2 <= (5+2.2*cos(10*atan(x/y)))**2. How can I solve this in SAS? Sorry, I am very new with SAS. My code so far looks like:
proc ga seed = 12 maxiter = 30; function funkc(selected[*]); array x[2] /nosym; call ReadMember(selected,1,x); x1 = x[1]; x2 = x[2]; F= 0.1*x1*x2; return(F); endsub; call SetEncoding('R2'); array LowerBound[2] /nosym (-10 -6); array UpperBound[2] /nosym (10 6); call SetBounds(LowerBound, UpperBound); call SetObjFunc('funkc',0); call SetCrossProb(0.65); call SetCross('Heuristic'); call SetMutProb(0.15); array del[2] /nosym (0.2 0.2); call SetMut('Delta','nchange', 1, 'delta',del); call SetSel('tournament','size', 2); call SetElite(2); call Initialize('DEFAULT',150); run; quit;
Some thought.
function funkc(selected[*]);
call ReadMember(selected,1,x);
F= 0.1*x[1]*x[2];
if (5+2.2*cos(10*atan(x[1]/x[2])))**2 - x[1]**2 - x[2]**2 < 0 then F=9999999;
return(F);
endsub;
and make population size bigger.
call Initialize('DEFAULT',15000);
Some thought.
function funkc(selected[*]);
call ReadMember(selected,1,x);
F= 0.1*x[1]*x[2];
if (5+2.2*cos(10*atan(x[1]/x[2])))**2 - x[1]**2 - x[2]**2 < 0 then F=9999999;
return(F);
endsub;
and make population size bigger.
call Initialize('DEFAULT',15000);
Here's how you can solve it with the NLP solver in PROC OPTMODEL:
proc optmodel;
var x >= -10 <= 10 init 1;
var y >= -6 <= 6 init 1;
min F = 0.1*x*y;
con Mycon:
x**2 + y**2 <= (5+2.2*cos(10*atan(x/y)))**2;
solve with nlp / ms;
print x y;
quit;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.