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

Planning of paint production

Description
Planning of paint production:
  • linear, 'element', 'implies', and 'all-different' constraints (b5paint_ka.mos).
  • Alternative formulation using 'disjunctive' and 2-dimensional 'element' constraints (b5paint2_ka.mos).
  • Third model version (b5paint3_ka.mos) using 'cycle' constraint.
  • Forth model formulation (b5paint4_ka.mos) as disjunctive scheduling problem with setup times, modeled with task and resource objects, using 'equiv', 'element', 'maximum' constraints and defining an enumeration strategy based on tasks and variables.
Difficulty rating:

Further explanation of this example: 'Xpress Kalis Mosel User Guide', Section 3.8 implies: Paint production


Source Files
By clicking on a file name, a preview is opened at the bottom of this page.
b5paint_ka.mos[download]
b5paint2_ka.mos[download]
b5paint3_ka.mos[download]
b5paint4_ka.mos[download]

Data Files





b5paint3_ka.mos

(!******************************************************
   CP Example Problems
   ===================

   file b5paint3_ka.mos
   ````````````````````
   Planning of paint production
   (See "Applications of optimization with Xpress-MP",
        Section 7.5 Paint production)
   - Formulation using 'cycle' constraint -

   (c) 2008 Artelys S.A. and Fair Isaac Corporation
       Creation: 2006, rev. Apr. 2022              
*******************************************************!)

model "B-5 Paint production (CP)"
 uses "kalis", "mmsystem"

 setparam("KALIS_DEFAULT_LB", 0)

 declarations
  NJ = 5                             ! Number of paint batches (=jobs)
  JOBS=0..NJ-1

  DUR: array(JOBS) of integer        ! Durations of jobs
  CLEAN: array(JOBS,JOBS) of integer ! Cleaning times between jobs

  succ: array(JOBS) of cpvar         ! Successor of a batch
  cleanTime,cycleTime: cpvar         ! Durations of cleaning / complete cycle
 end-declarations

 initializations from 'Data/b5paint.dat'
  DUR CLEAN 
 end-initializations
 
 forall(j in JOBS) do
  0 <= succ(j); succ(j) <= NJ-1; succ(j) <> j
 end-do

! Assign values to 'succ' variables as to obtain a single cycle
! 'cleanTime' is the sum of the cleaning times
 cycle(succ, cleanTime, CLEAN)
 
! Objective: minimize the duration of a production cycle
 cycleTime = cleanTime +sum(j in JOBS) DUR(j)

! Solve the problem
 if not cp_minimize(cycleTime) then
  writeln("Problem is infeasible")
  exit(1)
 end-if
 cp_show_stats

! Solution printing
 writeln("Minimum cycle time: ", getsol(cycleTime))
 writeln("Sequence of batches:\nBatch Duration Cleaning")
 first:=1 
 repeat
  writeln(formattext("  %d%8d%9d", first, DUR(first),
          CLEAN(first,succ(first).sol)) )
  first:=getsol(succ(first))
 until (first=1)

end-model

Back to examples browserPrevious exampleNext example