I migrated from SAS 9.2 to 9.4 and the very same optimiziation problem (proc optmodel) that worked just fine under 9.2 gives an "out-of-memory"-error under 9.4. The program still works, but can only process problems which are about 75 % (in terms of "basis-datasets") smaller than before. The proc options option=memsize spits out 2 GB which is the same amount as before. Any ideas what I didn´t think of?
In cases like this, one need to ask if there are any other changes in the environment, such as if the HW is the same, OS version/setup/configuration, etc.
If you still have access to 9.2, try to run the exact the same code using the same data set in both versions, using the FULLSTIMER option, that could give you some hints of what's going on.
Thanks for your answer. Unfortunately the old version and all the settings are gone. (I wanted a "clean" environment for the new version to avoid any interference from the former version and used the uninstall-wizard.) I am pretty sure that the Windows settings were left unchanged during installation (but I have to admid I can´t prove this).
Still, this is a surprise. I thought that - apart from memsize - there is no cure for insufficient memory when using optmodel. Is there a list of additional options either in SAS or Windows that optimize the optmodel-environment?
Not sure if this helps: try to specify nothreads option. In 9.2 model generation was singe-threaded.
At which phase do you have the error message? At problem solving? Is it a MILP?
I did change some options (including the NoThreads option & changing RealMemSize, MaxMemQuery), but without success.
The model is a simple (dual) Simplex model. No integers. The error occurs right after the "Solve" command.
The log looks like:
325 Proc Optmodel;
1480 The SAS System 16:32 Thursday, February 27, 2014
326 Set <Str,Str> m_w;
326 ! Num M{m_w};
327 Read Data Daten.Cost Into m_w=[R S] M=M1;
NOTE: There were 210000 observations read from the data set DATEN.Cost.
328 Num K{m_w};
329 Read Data Daten.Cost Into m_w=[R S] K=Cost_R;
NOTE: There were 210000 observations read from the data set DATEN.Cost.
330 Set R=Setof{<m,w> in m_w} m;
330 ! Set S=Setof{<m,w> in m_w} w;
331 Set <Str,Str> j_w;
331 ! Num NM{j_w};
332 Read Data Daten.NM Into j_w=[W S] NM=M1;
NOTE: There were 1422000 observations read from the data set DATEN.NM.
333 Set N=Setof{<j,w> in j_w} j;
334 Num Demand{N};
335 Read Data Daten.Demand Into
NOTE: 9 non-missing values were discarded due to invalid target indices.
NOTE: There were 246 observations read from the data set DATEN.Demand.
336 Num Supply{R};
337 Read Data Daten.Supply Into
NOTE: 191 non-missing values were discarded due to invalid target indices.
NOTE: There were 226 observations read from the data set DATEN.Supply.
338 Var X{N,S}>=0;
339 Con Cns_S{m in R}:Sum{j in N,w in S}X[j,w]*M[m,w]*NM[j,w]<=Supply
340 Con Cns_D{j in N}:Sum{m in R,w in S}X[j,w]*M[m,w]*NM[j,w]=Demand
341 Min Ob=Sum{j in N,m in R,w in S}X[j,w]*M[m,w]*K[m,w]*NM[j,w];
342 *Performance NThreads=4;
343 Solve;
NOTE: Problem generation will use 4 threads.
ERROR: Out of memory during problem generation.
NOTE: Unable to create problem instance due to previous errors.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.