80 extern const unsigned int n_examples;
121 std::map<std::string, int> courseMap;
123 int numberOfCourses = 0;
124 for (
const Course* co=
curr.courses; co->name != 0; co++) {
125 courseMap[co->name] = numberOfCourses++;
126 maxCredit += co->credit;
136 u =
IntVar(*
this, 0, maxCredit);
140 for (
int j=0; j<p; j++) {
143 for (
int i=0; i<numberOfCourses; i++) {
144 rel(*
this, (
x[i]==j) == xij[i]);
145 t[i] =
curr.courses[i].credit;
154 for (
const char** prereq =
curr.prereqs; *prereq != 0; prereq+=2)
155 rel(*
this,
x[courseMap[*prereq]] <
x[courseMap[*(prereq+1)]]);
164 switch (opt.branching()) {
178 const BACP& b =
static_cast<const BACP&
>(home);
185 best = b.l[val].
min();
194 const BACP& b =
static_cast<const BACP&
>(home);
201 best = b.l[val].
min();
211 l.update(*
this, bacp.
l);
212 u.update(*
this, bacp.
u);
213 x.update(*
this, bacp.
x);
218 return new BACP(*
this);
227 std::vector<std::list<int> > period(
curr.p);
228 for (
int i=
x.size(); i--;)
229 period[
x[i].val()].push_back(i);
231 os <<
"Solution with load " <<
u.val() <<
":" << std::endl;
232 for (
int i=0; i<
curr.p; i++) {
233 os <<
"\tPeriod "<<i+1<<
": ";
234 for (std::list<int>::iterator v=period[i].begin();
235 v != period[i].end(); ++v) {
236 os <<
curr.courses[*v].name <<
" ";
258 opt.
parse(argc,argv);
260 std::cerr <<
"Error: size must be between 0 and " <<
n_examples - 1
279 {
"hcw310", 1},{
"iwg101", 2},{
"mat190", 4},{
"mat192", 4},{
"dew101", 1},
280 {
"fis101", 5},{
"iwi131", 3},{
"mat191", 4},{
"mat193", 4},{
"fis102", 5},{
"hxwxx1", 1},
281 {
"iei134", 3},{
"iei141", 3},{
"mat194", 4},
282 {
"dewxx0", 1},{
"hcw311", 1},{
"iei132", 3},{
"iei133", 3},{
"iei142", 3},{
"iei162", 3},
283 {
"iwn170", 3},{
"mat195", 3},{
"hxwxx2", 1},{
"iei231", 4},{
"iei241", 4},{
"iei271", 3},{
"iei281", 3},{
"iwn261", 3},
284 {
"hfw120", 2},{
"iei233", 4},{
"iei238", 3},{
"iei261", 3},{
"iei272", 3},{
"iei273", 3},{
"iei161", 3},{
"iei232", 3},
285 {
"iei262", 3},{
"iei274", 3},{
"iwi365", 3},{
"iwn270", 3},{
"hrw130", 2},{
"iei218", 3},{
"iei219", 3},{
"iei248", 3},
562 { { 8, 10, 24, 2, 10,
int main(int argc, char *argv[])
Main-function.
const Curriculum curriculum[]
The example specifications.
const char * prereqs10[]
Prerequisites for second example.
const Course courses10[]
Courses for second example.
const unsigned int n_examples
The number of examples.
const Course courses8[]
Courses for first example.
virtual void print(std::ostream &os) const
Print solution.
const Curriculum curr
The curriculum to be scheduled.
const char * prereqs12[]
Prerequisites for third example.
static int load(const Space &home, IntVar x, int)
Value selection function for load branching.
IntVarArray l
Academic load for each period.
virtual Space * copy(void)
Copy during cloning.
IntVar u
Maximum academic load.
@ BRANCHING_NAIVE
Simple fail-first branching.
@ BRANCHING_LOAD
Place based on minimum-load.
@ BRANCHING_LOAD_REV
Place based on maximum-load.
static int load_rev(const Space &home, IntVar x, int)
Value selection function for reverse load branching.
IntVarArray x
Period to which a course is assigned.
BACP(const SizeOptions &opt)
Actual model.
const Course courses12[]
Courses for third example.
IntVarArray q
Number of courses assigned to a period.
BACP(BACP &bacp)
Constructor for copying bacp.
const char * prereqs8[]
Prerequisites for first example.
virtual IntVar cost(void) const
Return solution cost.
const char * name
Course name.
const Course * courses
Courses.
int c
Minimum amount of courses.
int d
Maximum amount of courses.
int a
Minimum academic load.
const char ** prereqs
Prerequisites.
int b
Maximum academic load.
Passing Boolean variables.
static void run(const Options &opt, Script *s=NULL)
friend FloatVal min(const FloatVal &x, const FloatVal &y)
Passing integer arguments.
Value iterator for integer variables.
Options for scripts with additional size parameter
void parse(int argc, char *argv[])
Parse commandline arguments.
Driver::ScriptBase< Driver::IgnoreStepOption< IntMinimizeSpace > > IntMinimizeScript
Base-class for scripts for finding solution of lowest integer cost.
void branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf=nullptr, FloatVarValPrint vvp=nullptr)
Branch over x with variable selection vars and value selection vals.
void linear(Home home, const FloatVarArgs &x, FloatRelType frt, FloatVal c)
Post propagator for .
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
const int min
Smallest allowed integer value.
const int max
Largest allowed integer value.
Gecode toplevel namespace
IntValBranch INT_VAL(IntBranchVal v, IntBranchCommit c=nullptr)
Select value as defined by the value function v and commit function c Uses a commit function as defau...
void values(Home home, const IntVarArgs &x, IntSet y, IntPropLevel ipl=IPL_DEF)
Post constraint .
IntValBranch INT_VAL_MIN(void)
Select smallest value.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
IntVarBranch INT_VAR_SIZE_MIN(BranchTbl tbl=nullptr)
Select variable with smallest domain size.