FICO
FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browserPrevious exampleNext example

Dantzig-Wolfe decomposition: combining sequential and parallel solving

Description
Dantzig-Wolfe decomposition is a method for solving large LP problems. The model implementation shows the following features:
  • iterative sequence of concurrent solving of a set of subproblems
  • data exchange between several models via shared memory and memory pipe
  • coordination of several models via events
Two different implementations are proposed. The first one runs on a single node allowing to execute multiple concurrent solves (standard version: cocoMs.mos and cocoSubFs.mos, or using mempipe notification in place of an event sent by submodels: cocoMn.mos and cocoSubFn.mos) and the second one executes on multiple nodes (file-based communication: cocoMd.mos and cocoSubFd.mos, or using shared memory and memory pipe remotely: cocoMdp.mos and cocoSubFdp.mos). Extending the single node model to support distributed architecture requires only few lines of new code to setup the list of nodes and define which node solves which subproblem.

Further explanation of this example: Xpress Whitepaper 'Multiple models and parallel solving with Mosel', Section 'Dantzig-Wolfe decomposition: sequential and parallel solving'.


Source Files

Data Files





coco2.dat

! Data file for the Coco Problem

NPROD: 2
NFACT: 2
NRAW:  2
NT:    4

CMAKE:  [150   153
          75   68] 
 
REQ:    [1.0   0.5
         1.3   0.4]

MXMAKE: [400   500]

COPEN:  [50000 63000]	 

REV:    [400   380   405   350
         410   397   412   397] 

CBUY:   [100    98    97   100
         200   195   198   200]
	 
MXSELL: [650   600   500   400
         600   500   300   250]

IPSTOCK: [50   100
          50   50]

IRSTOCK: [100  150
           50  100]

MXPSTOCK: 300
MXRSTOCK: 300
MXBUY:   1500

CPSTOCK: 2.0
CRSTOCK: 1.0

Back to examples browserPrevious exampleNext example