I have a question on the cumulatives constraint. I have a simple case
where I expect more pruning on the start variable and I just want to
make sure if my expectation is correct (before digging into the paper
and implementation):

The case is two tasks both assigned to the same single machine, first
task starts at 0 and ends at 20, second tasks has a duration of 20 can
initially start between 0 and 40 and end between 20 and 60. The
machine has limit 1 and the amount used of the resource should be less
(at_most=true) than the limit and the height of both tasks is 1.

I would expect the start of the second variable to be pruned from
[0,40] to [20,40] but what we see (when we run the attached file) is a
search on the start variable failing 20 times (trying start
0,1,2,...19) before finding the first solution. Obviously I expect the
first decision to be a solution. Am I expecting to much propagation on
a task without compulsory part?

David Rijsman
#include "examples/support.hh"
#include "gecode/minimodel.hh"

class CumulativesCase : public Example {
protected:
  ;
  IntVarArray      start;
  IntVarArray      end;
public:
  /// Actual model
  CumulativesCase(const Options& opt) 
    : start(this,2,0,60),end(this,2,0,60)
      {
        IntArgs machine(2,0,0);
        IntArgs duration(2,20,20);
        IntArgs height(2,1,1);
        IntArgs limit(2,1,1);

        /// First task starts at 0 ends at 20
        rel(this, start[0], IRT_EQ, 0);

        cumulatives(this,machine,start,duration,end,height,limit,true);

        branch(this, start,INT_VAR_SIZE_MIN,INT_VAL_MIN);
  }

  /// Constructor for cloning \a s
  CumulativesCase(bool share, CumulativesCase& s) : Example(share,s) {
    start.update(this, share, s.start);
    end.update(this, share, s.end);
  }
  /// Copy during cloning
  virtual Space*
  copy(bool share) {
    return new CumulativesCase(share,*this);
  }
};

/** \brief Main-function
 */
int
main(int argc, char* argv[]) {
  Options opt("CumulativesCase");
  opt.solutions(1);
  opt.parse(argc,argv);
  Example::run<CumulativesCase,DFS,Options>(opt);
  return 0;
}


_______________________________________________
Gecode users mailing list
[EMAIL PROTECTED]
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to