80 extern const unsigned int n_examples;
121 std::map<std::string, int> courseMap;
123 int numberOfCourses = 0;
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]);
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);
183 if (
b.l[
values.val()].min() < best) {
185 best =
b.l[val].min();
194 const BACP&
b =
static_cast<const BACP&
>(home);
199 if (
b.l[
values.val()].min() > best) {
201 best =
b.l[val].min();
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) {
258 opt.
parse(argc,argv);
259 if (opt.size() >= n_examples) {
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},
290 const char* prereqs8[] =
381 const char* prereqs10[] = {
491 const char* prereqs12[] = {
562 { { 8, 10, 24, 2, 10,
574 const unsigned int n_examples =
sizeof(curriculum) /
sizeof(
Curriculum);
struct Gecode::@603::NNF::@65::@66 b
For binary nodes (and, or, eqv)
int p
Number of positive literals for node type.
struct Gecode::@603::NNF::@65::@67 a
For atomic nodes.
Example: The balanced academic curriculum problem
int main(int argc, char *argv[])
Main-function.
const Curriculum curriculum[]
The example specifications.
virtual void print(std::ostream &os) const
Print solution.
const Curriculum curr
The curriculum to be scheduled.
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.
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.
IntVarArray q
Number of courses assigned to a period.
BACP(BACP &bacp)
Constructor for copying bacp.
@ BRANCHING_NAIVE
Simple fail-first branching.
@ BRANCHING_LOAD
Place based on minimum-load.
@ BRANCHING_LOAD_REV
Place based on maximum-load.
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.
Parametric base-class for scripts.
static void run(const Options &opt, Script *s=NULL)
Passing integer arguments.
Value iterator for integer variables.
int val(void) const
Return assigned value.
Options for scripts with additional size parameter
int size(void) const
Return size of array (number of elements)
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
void update(Space &home, VarImpVar< VarImp > &y)
Update this variable to be a clone of variable y.
void parse(int argc, char *argv[])
Parse commandline arguments.
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.