[CHiPPS] Differencing scheme with ALPS

Yan Xu Yan.Xu at sas.com
Thu Feb 14 13:25:42 EST 2008


Khoa,

The differencing is introduced at BiCePS level. However, it looks to me that you can design your own difference scheme. Basically, at a child, you want to store what are different with its parent and recover to a full node description when process it next time. For instances, it is possible that only a few of the "PNode** maPNode" of a child are different with its parent, then you can add members like

class PartialLabeling
{
        // number of different
          int numDiff;
        // which are different
        int diffIndices;
        // Different nodes
        PNode** diffNodes;
}


At root, you can store a full description (numDiff=-1), then at children you store difference and recover by tracing back to root or a node with full description.


Yan




-----Original Message-----
From: Khoa Vo [mailto:khoa.vo at informatik.uni-heidelberg.de]
Sent: Wednesday, February 13, 2008 5:46 PM
To: Yan Xu
Cc: cops at list.coin-or.org
Subject: Differencing scheme with ALPS

Hi Yan,

I didn't succeed setting ALPS parameters to reduce the memory.
I think about the differencing scheme you mentioned with BICEPS and
BLIS. Is it supported in ALPS? The problem is summarized below.

1. I have a struct PNode storing status of graph nodes (not search tree
node).
struct PNode{
        int firstPos;
        int lastPos;
        int rightDistance;   // distance from the node set fixed on the
right
        int leftDistance;    // distance from the node set fixed on the
left
        char updated;
      int bestPos;         // to save an heuristic solution when found
};

2. For each search node born along the search tree, a class
PartialLabeling is created, member variable is init with an array of
node status, e.g. maPNode = new PNode[N];
class PartialLabeling
{
        //labeling
        PNode** maPNode;
}
Note that PNode status can be change at any i with 1<=i<=N, so at the
moment I have to pass all the current node status to the child node. The
child in turn has to hold all these statuses as well, because it needs
status of all graph nodes to process, but this is very expensive. So you
understand why memory is allocated so quickly.
For example, if N=100, then each node takes 100 x 11byte = 1100bytes
already, where 11byte is size of PNode.

Any hint or suggestion will be appreciated.
Thanks,
Khoa


-----Original Message-----
From: Yan Xu [mailto:Yan.Xu at sas.com]
Sent: Monday, February 11, 2008 7:36 PM
To: Khoa Vo
Cc: cops at list.coin-or.org
Subject: RE: Setting physical memory limit

Khoa,

first make sure that Alps_hubWorkClusterSizeLimit is not specified
(which means hub never works like a worker), then try to reduce
Alps_hubInitNodeNum

or

increase Alps_hubNum


I am curiously why hub generate a lots of nodes.

Yan






More information about the CHiPPS mailing list