SAS Optimization, and SAS Simulation Studio

turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

02-23-2017 10:04 AM

I'm trying to find coefficients in theoretical function of uranium mining by minimizing distance between theretical function and actual values. And I'm getting the following:

NOTE: The problem has 201 variables (0 free, 0 fixed).

NOTE: The problem has 0 linear constraints (0 LE, 0 EQ, 0 GE, 0 range).

NOTE: The problem has 0 nonlinear constraints (0 LE, 0 EQ, 0 GE, 0 range).

WARNING: No objective has been specified. A constant zero objective will be used.

NOTE: The problem is a pure network instance. The ALGORITHM=NETWORK option is recommended for solving problems with this structure.

NOTE: The LP presolver value AUTOMATIC is applied.

NOTE: The LP presolver removed all variables and constraints.

NOTE: Optimal.

NOTE: Objective = 0.

Here is my code.

proc optmodel PRESOLVER=NONE;

* set initializing;

set <str> BLOCKS;

set PERIODS=1..100;

* data reading;

num reserves{BLOCKS};

num extraction{BLOCKS, PERIODS}, ls{BLOCKS, PERIODS};

read data libor.activeblocks_b into BLOCKS=[eqtypecode] reserves;

read data libor.active_b into [eqtypecode p_code] ls extraction;

var A{BLOCKS} >=0.1 <=3, V{BLOCKS} >=0.1 <=2, d{BLOCKS} >=0.1 <=1.5;

impvar _textraction{b in BLOCKS, p in PERIODS}=(reserves[b]/(1+(A[b]*(exp(-V[b]*(ls[b,p]-(d[b]/ls[b,p])))))));

min _dist{b in BLOCKS}=sum{p in PERIODS} ((_textraction[b,p]-extraction[b,p]*1000)^2);

solve;

for {b in BLOCKS, p in PERIODS} do;

textraction[b,p]=(reserves[b]/(1+(A[b]*(exp(-V[b]*(ls[b,p]-(d[b]/ls[b,p])))))));

end;

create data libor.coef from [block]=BLOCKS A V d;

create data libor.teor from [block p_code]={BLOCKS, PERIODS} textraction extraction ls;

quit;

Please help, I can't understand what's wrong with my code.

Accepted Solutions

Solution

02-24-2017
01:34 AM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

02-23-2017 12:38 PM - edited 02-24-2017 10:45 AM

If you have some priorities among the objectives, you can minimize them one at a time sequentially, adding a new optimality constraint at each step. See the SECONDARY OBJECTIVE section of this SAS Global Forum 2014 paper.

If you want to perform multiobjective optimization and output a Pareto frontier, you can use PROC OPTLSO.

To avoid the failure and warning, you can either set the variables to an initial feasible solution before calling the solver or use the MULTISTART option in the SOLVE WITH NLP statement.

All Replies

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

02-23-2017 10:14 AM

Your MIN statement declares several objectives (one for each b), but you have not specified which one you want to use. Either declare only one objective or use the OBJ clause in the SOLVE statement to pick one.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

02-23-2017 10:34 AM

Hi, Rob Pratt, thanks for quick reply!

What should I do if I wanna minimize all that objectives? Is there some procs?

And when I picked one objective using OBJ, it says solution status failed and this WARNING: Objective function cannot be evaluated at starting point. in the log.

What should I do if I wanna minimize all that objectives? Is there some procs?

And when I picked one objective using OBJ, it says solution status failed and this WARNING: Objective function cannot be evaluated at starting point. in the log.

Solution

02-24-2017
01:34 AM

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

02-23-2017 12:38 PM - edited 02-24-2017 10:45 AM

If you have some priorities among the objectives, you can minimize them one at a time sequentially, adding a new optimality constraint at each step. See the SECONDARY OBJECTIVE section of this SAS Global Forum 2014 paper.

If you want to perform multiobjective optimization and output a Pareto frontier, you can use PROC OPTLSO.

To avoid the failure and warning, you can either set the variables to an initial feasible solution before calling the solver or use the MULTISTART option in the SOLVE WITH NLP statement.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

02-24-2017 01:37 AM

Thank you very much Rob!

http://support.sas.com/documentation/cdl/en/ormpex/67518/HTML/default/viewer.htm#ormpex_ex11_toc.htm this example helped me to avoid failure and I've found optiamal solution for one objective.

thanks for suggesting PROC OPTLSO, I'll try to use it!

http://support.sas.com/documentation/cdl/en/ormpex/67518/HTML/default/viewer.htm#ormpex_ex11_toc.htm this example helped me to avoid failure and I've found optiamal solution for one objective.

thanks for suggesting PROC OPTLSO, I'll try to use it!