FICO Xpress Optimization Examples Repository
 FICO Optimization Community FICO Xpress Optimization Home

Construction of a stadium: project planning

Description
• Project planning problem modeled with linear constraints, demonstrating the effect of constraint propagation (b1stadium_ka.mos).
• Alternative formulation as scheduling problem with precedence constraints, modeled with task objects (b1stadium2_ka.mos).
Further explanation of this example: 'Xpress Kalis Mosel User Guide', Section 5.2 Precedences

Source Files
By clicking on a file name, a preview is opened at the bottom of this page.

Data Files

(!****************************************************************
Mosel Example Problems
======================


(See "Applications of optimization with Xpress-MP",
Section 7.1 Construction of a stadium)

(c) 2008 Artelys S.A. and Fair Isaac Corporation

*****************************************************************!)

uses "kalis"

declarations
N = 19                              ! Number of tasks in the project
! (last = fictitious end task)
ARC: dynamic array(range,range) of integer  ! Matrix of the adjacency graph
HORIZON : integer                   ! Time horizon

bestend: integer
end-declarations

DUR ARC
end-initializations

0 <= start(j); start(j) <= HORIZON
end-do

forall(i, j in TASKS | exists(ARC(i, j))) do
Prec(i,j):= start(i) + DUR(i) <= start(j)
if not cp_post(Prec(i,j)) then
writeln("Posting precedence ", i, "-", j, " failed")
exit(1)
end-if
end-do

! Since there are no side-constraints, the earliest possible completion
! time is the earliest start of the fictitious task N
bestend:= getlb(start(N))
start(N) <= bestend
writeln("Earliest possible completion time: ", bestend)

! For tasks on the critical path the start/completion times have been fixed
! by setting the bound on the last task. For all other tasks the range of
! possible start/completion times gets displayed.
forall(j in TASKS) writeln(j, ": ", start(j))

end-model

`