| |||||||||||||||||||||||||

Column generation for a cutting stock problem Description - creating new variables and adding them to constraints and objective
- basis in- and output
- sorting and single knapsack algorithms
- repeat-until statement
- use of functions
- hiding / unhiding constraints
- resetting (deleting) constraints
- defining multiple problems within a model
- switching between problems
- working with multiple models
- executing a sequence of models
- passing data via shared memory
Further explanation of this example:
paper.mos, papers.mos, papersn.mos: 'Mosel User Guide', Section 11.2 Column generation,
and the Xpress Whitepaper 'Embedding Optimization Algorithms',
Section 'Column generation for cutting-stock' (also
discusses a generalization to bin-packing problems);
for the multiple model versions paperp.mos, paperms.mos see the Xpress Whitepaper
'Multiple models and parallel solving with Mosel',
Section 'Column generation: solving different models in sequence'.
Source Files
knapsackr.mos (!******************************************************* Mosel User Guide Examples ========================= file knapsackr.mos `````````````````` Knapsack (sub)model of the for a paper cutting example, reading data from shared memory. Communication of data from/to master model using 'shmem' IO driver with 'raw'. *** Not intended to be run standalone - run from paperpr.mos *** Solve the integer knapsack problem z = max{Cx : Ax<=B, x<=D, x in Z^N} (c) 2008 Fair Isaac Corporation author: S. Heipcke, 2004, rev. July 2010 *******************************************************!) model "Knapsack" uses "mmxprs" parameters NWIDTHS=5 ! Number of different widths end-parameters declarations WIDTHS = 1..NWIDTHS ! Range of widths A,C: array(WIDTHS) of real ! Constraint + obj. coefficients B: real ! RHS value of knapsack constraint D: array(WIDTHS) of integer ! Variables bounds (demand quantities) KnapCtr, KnapObj: linctr ! Knapsack constraint+objective x: array(WIDTHS) of mpvar ! Knapsack variables xbest: array(WIDTHS) of integer ! Solution values end-declarations initializations from "raw:noindex" A as "shmem:A" B as "shmem:B" C as "shmem:C" D as "shmem:D" end-initializations ! Define the knapsack problem KnapCtr:= sum(j in WIDTHS) A(j)*x(j) <= B KnapObj:= sum(j in WIDTHS) C(j)*x(j) ! Integrality condition and bounds forall(j in WIDTHS) x(j) is_integer forall(j in WIDTHS) x(j) <= D(j) ! These bounds can be omitted maximize(KnapObj) z:=getobjval forall(j in WIDTHS) xbest(j):=round(getsol(x(j))) initializations to "raw:" xbest as "shmem:xbest" z as "shmem:zbest" end-initializations end-model | |||||||||||||||||||||||||

© Copyright 2020 Fair Isaac Corporation. |