This is actually two questions in one. I'm maximizing a function in PROC OPTLSO that came from PROC FMCP. I've run this code before on a different dataset with good results.
Question #1: Here is my code with the warnings issued by SAS.
options cmplib = rd.myfuncs; 197 198 199 proc fcmp outlib = rd.myfuncs.ga10; WARNING: Function 'objfunRA' was defined in a previous package. 'objfunRA' in current package GA5 will be used as default when the package name is not specified. WARNING: Function 'objfunRA' was defined in a previous package. 'objfunRA' in current package GA10 will be used as default when the package name is not specified. 200 function objfunRA10(%listvars(&numVars.), icudead, %listIndex(hindex), 200! %listIndex(rindex), %listIndex(mindex), WARNING: Function 'objfunRA10' was defined in a previous package. Function 'objfunRA10' as defined in the current program will be used as default when the package is not specified. 201 %listIndex(sindex), %listIndex(vindex), %listIndex(mv), maxPeriod10) 201! ; 202 array x x1-x175; 203 array hindex hindex1-hindex336; 204 array rindex rindex1-rindex336; 205 array mindex mindex1-mindex336; 206 array sindex sindex1-sindex336; 207 array vindex vindex1-vindex336; 208 array mvwt mv1-mv336; 209 array num_wts num_wts1-num_wts336; 210 211 etc,...... 212 endsub; run;
I hope the function being used is objfunRA10. Why the warning messages?
Question #2: When I run PROC OPTLSO, nothing occurs. See the code below:
263 proc optlso WARNING: Function 'objfunRA' was defined in a previous package. 'objfunRA' in current package GA30 will be used as default when the package name is not specified. WARNING: Function 'objfunRA' was defined in a previous package. 'objfunRA' in current package GA5 will be used as default when the package name is not specified. 264 seed = 1208 265 primalout = finalsol 266 variables = vardata 267 objective = objdata 268 nglobal = 2 269 popsize = 200 270 maxtime = 900 271 logfreq = 1 272 absfconv = 0.001; 273 run; NOTE: The OPTLSO procedure is executing in single-machine mode. NOTE: There were 175 observations read from the data set WORK.VARDATA. NOTE: There were 1 observations read from the data set WORK.OBJDATA. NOTE: There were 1425 observations read from the data set WORK.MAIN3. NOTE: The data set WORK.FINALSOL has 0 observations and 0 variables. NOTE: PROCEDURE OPTLSO used (Total process time): real time 3.99 seconds cpu time 2.68 seconds
There's no error messages, just that the solution is NULL. Any ideas why this could occur?
As for your first question, the FCMP warning messages definitely seem suspicious. I'm not a FCMP expert but it seems as if there are many different instances of the 'objfunRA' function in multiple packages (GA5, GA10, GA30). Also, the fact that they code is warning you about the 'objfunRA' function makes me worried that it's actually looking for that function and not the 'objfunRA10' function that you state is your desired choice. In the 'objdata' data set, are you specifying 'objfunRA' or 'objfunRA10' as your objective function? Obviously, if you could share all the code it would be much easier to see the full picture of what's happening.
And as far as your second question goes, it is definitely strange that you are seeing no output from OPTLSO. I wonder if the confusion about which FCMP objective function to use is preventing OPTLSO from doing any optimization. If we can resolve the FCMP function warnings, I suspect that the OPTLSO behavior might change.
And while I have your attention, I'd like to point out that you can also access the same derivative-free (blackbox) solver from PROC OPTMODEL by using the 'solve with blackbox' solver option. PROC OPTMODEL provides an easier-to-use and more intuitive interface for defining your optimization problem. You can learn more about OPTMODEL here:
In the objdata data set I'm referring to objRA10.
data objdata; input _id_ $ _function_ $ _sense_ $ _dataset_ :$5.; datalines; f objfunRA10 max main3 ; run;
The reason there are so many objfunRA variants is because initially I was looking at 5 minute data (physiology). I copied the program and changed "5" to "10" to look at 10 minute data. The functions all reside within the rd.myfuncs library.
options cmplib = rd.myfuncs;
I could supply more code, but it's been tested and seems to be working.
One other thought: I'm trying to optimize 165 features over 336 10-minute periods using data from 1,400 patients. That might be problematic, but I would think that at least one iteration would have been attempted by OPTLSO.
Boy, do I miss PROC GA!
P.S. I will check out OPTMODEL at some point.
Unfortunately, there's only so much help we can provide without being able to see (and execute) your code. If you're worried about sharing the code in this public forum, there are ways through SAS Technical Support where the code can be shared in a more private way that would allow us to provide more support.
In any case, I'm wondering if you've tried executing your objfunRA10 FCMP function outside of PROC OPTLSO. If you're not aware, you can execute any FCMP function with a simple data step. You just need to provide values for the function's arguments and then call the function. This would allow us to know if the function you have specified as the objective for PROC OPTLSO is actually working as intended. You can see an example of how to execute a FCMP function from data step here:
Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.
If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website.
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.