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.
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
  CB: array(JOBS) of integer         ! Cleaning times after a batch

  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