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;
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.