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
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-07-2014 12:41 PM

I have a constraint which sums the nonzero elements of a sparse matrix. To do this, I am using the SLICE expression, so my constraint reads

like this:

con test{t in ASC}:sum{u in slice(<t,*>,Map)}y__>=0;__

Here 'Map' is a sparse matrix, with 2 mapped variables - ASC and UIN, i.e. 'Map' contains all eligible pairs of ASC and UIN.

The constraint should work like this: For each element 't' of ASC, it should check whether 't' has a corresponding value 'u' for UIN variable. If there is, then it adds y for that row.

However, when I run this constraint, I get a "Constraint is empty" error.

What am I doing wrong here/is there a better way of doing this?

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

Posted in reply to abhik_giri

11-07-2014 12:49 PM

You can write this more compactly by using an "implicit" slice:

con test{t in ASC}: sum{<(t),u> in Map} y__ >= 0;__

See this doc example for more discussion:

SAS/OR(R) 13.2 User's Guide: Mathematical Programming Examples

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

Posted in reply to RobPratt

11-08-2014 03:18 AM

Thanks for the link.

Somehow the constraint you gave doesn't seem to work(again a "Constraint is empty" error). But the following constraint worked(I got it from the link you gave):

con test{t in ASC}:sum{u in UIN:<u,t> in Map}y__>=0;__

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

Posted in reply to abhik_giri

11-08-2014 12:36 PM

Your latest version is not equivalent to the other two. Instead, it should be:

con test{t in ASC}:sum{u in UIN:<t,u> in Map}y__>=0;__

Also, the "Constraint is empty" message is only a NOTE and not an ERROR. If you use the EXPAND statement, you will see that the constraint is 0 >= 0 because the sum is empty. If you really want to avoid generating these constraints, you can use a logical condition:

con test{t in ASC: card(slice(<t,*>,Map)) > 0}:sum{u in slice(<t,*>,Map)}y__>=0;__