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);
229 period[
x[
i].val()].push_back(
i);
231 os <<
"Solution with load " <<
u.
val() <<
":" << std::endl;
233 os <<
"\tPeriod "<<
i+1<<
": ";
234 for (std::list<int>::iterator
v=period[
i].begin();
235 v != period[
i].end(); ++
v) {
260 std::cerr <<
"Error: size must be between 0 and " <<
n_examples - 1
264 IntMinimizeScript::run<BACP,BAB,SizeOptions>(
opt);
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,
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.
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.
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.
@ 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.
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 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 .
void branch(Home home, const IntVarArgs &x, const BoolVarArgs &y, IntBoolVarBranch vars, IntValBranch vals)
Branch function for integer and Boolean variables.
const FloatNum max
Largest allowed float value.
const FloatNum min
Smallest allowed float value.
unsigned int size(I &i)
Size of all ranges of range iterator i.
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.
IntVarBranch INT_VAR_SIZE_MIN(BranchTbl tbl=nullptr)
Select variable with smallest domain size.
Gecode::FloatVal c(-8, 8)
Gecode::IntArgs i({1, 2, 3, 4})