| IBM ILOG Scheduler User's Manual > Getting Started with Scheduler > Using the Building Blocks > Adding Resources and Resource Constraints > Complete Program and Output--Example 2 |
Complete Program and Output--Example 2 |
INDEX
PREVIOUS
NEXT
|
You can see the entire program gsUnary.cpp here or view it online in the standard distribution.
#include <ilsched/iloscheduler.h>
ILOSTLBEGIN
#if defined(ILO_SDXLOUTPUT)
#include "sdxloutput.h"
#endif
///////////////////////////////////////////////////////////////////////////////
//
// PROBLEM DEFINITION
//
///////////////////////////////////////////////////////////////////////////////
IloModel DefineModel(IloEnv env, IloNumVar& makespan)
{
IloModel model(env);
/* CREATE THE ACTIVITIES. */
IloActivity masonry(env, 7, "masonry ");
IloActivity carpentry(env, 3, "carpentry ");
IloActivity plumbing(env, 8, "plumbing ");
IloActivity ceiling(env, 3, "ceiling ");
IloActivity roofing(env, 1, "roofing ");
IloActivity painting(env, 2, "painting ");
IloActivity windows(env, 1, "windows ");
IloActivity facade(env, 2, "facade ");
IloActivity garden(env, 1, "garden ");
IloActivity moving(env, 1, "moving ");
/* ADD THE TEMPORAL CONSTRAINTS. */
model.add(carpentry.startsAfterEnd(masonry));
model.add(plumbing.startsAfterEnd(masonry));
model.add(ceiling.startsAfterEnd(masonry));
model.add(roofing.startsAfterEnd(carpentry));
model.add(painting.startsAfterEnd(ceiling));
model.add(windows.startsAfterEnd(roofing));
model.add(facade.startsAfterEnd(roofing));
model.add(facade.startsAfterEnd(plumbing));
model.add(garden.startsAfterEnd(roofing));
model.add(garden.startsAfterEnd(plumbing));
model.add(moving.startsAfterEnd(windows));
model.add(moving.startsAfterEnd(facade));
model.add(moving.startsAfterEnd(garden));
model.add(moving.startsAfterEnd(painting));
/* CREATE THE RESOURCE. */
IloUnaryResource worker(env);
/* ADD THE RESOURCE CONSTRAINTS. */
model.add(masonry.requires(worker));
model.add(carpentry.requires(worker));
model.add(plumbing.requires(worker));
model.add(ceiling.requires(worker));
model.add(roofing.requires(worker));
model.add(painting.requires(worker));
model.add(windows.requires(worker));
model.add(facade.requires(worker));
model.add(garden.requires(worker));
model.add(moving.requires(worker));
/* SET THE MAKESPAN VARIABLE. */
makespan = IloNumVar(env, 0, IloInfinity, ILOINT);
model.add(moving.endsAt(makespan));
/* SET THE OBJECTIVE */
model.add(IloMinimize(env, makespan));
return model;
}
///////////////////////////////////////////////////////////////////////////////
//
// PRINTING OF SOLUTIONS
//
///////////////////////////////////////////////////////////////////////////////
void PrintSolution(const IloSolver solver, const IloNumVar makespan)
{
IlcScheduler scheduler(solver);
IloEnv env = solver.getEnv();
env.out() << "Solution with makespan "
<< solver.getIntVar(makespan).getMin() << endl;
for(IloIterator<IloActivity> act(env);
act.ok();
++act)
env.out() << scheduler.getActivity(*act) << endl;
solver.printInformation();
}
///////////////////////////////////////////////////////////////////////////////
//
// MAIN FUNCTION
//
///////////////////////////////////////////////////////////////////////////////
int main()
{
try {
IloEnv env;
IloNumVar makespan;
IloModel model = DefineModel(env, makespan);
IloGoal goal = IloRankForward(env, makespan);
IloSolver solver(model);
if (solver.solve(goal)) {
PrintSolution(solver,makespan);
#if defined(ILO_SDXLOUTPUT)
IloSDXLOutput output(env);
ofstream outFile("gsUnary.xml");
output.write(IlcScheduler(solver), outFile, solver.getIntVar(makespan));
outFile.close();
#endif
}
else
solver.out() << "No Solution" << endl;
env.end();
} catch (IloException& exc) {
cout << exc << endl;
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////
//
// RESULTS
//
///////////////////////////////////////////////////////////////////////////////
/*
Solution with makespan 29
masonry [0 -- 7 --> 7]
carpentry [15 -- 3 --> 18]
plumbing [7 -- 8 --> 15]
ceiling [18 -- 3 --> 21]
roofing [21 -- 1 --> 22]
painting [24 -- 2 --> 26]
windows [27 -- 1 --> 28]
facade [22 -- 2 --> 24]
garden [26 -- 1 --> 27]
moving [28 -- 1 --> 29]
*/
The start and end times of all activities are fixed in this example.
Figure 3.3 provides a graphic display of the solution to our problem.
| © Copyright IBM Corp. 1987, 2009. Legal terms. | PREVIOUS NEXT |