MCPcopy Create free account
hub / github.com/Gecode/gecode / prune

Method prune

test/set.cpp:404–538  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

402 }
403
404 bool
405 SetTestSpace::prune(const SetAssignment& a, Gecode::Support::RandomGenerator& rand) {
406 using namespace Gecode;
407 bool setsAssigned = true;
408 for (int j=x.size(); j--; )
409 if (!x[j].assigned()) {
410 setsAssigned = false;
411 break;
412 }
413 bool intsAssigned = true;
414 for (int j=y.size(); j--; )
415 if (!y[j].assigned()) {
416 intsAssigned = false;
417 break;
418 }
419
420 // Select variable to be pruned
421 int i;
422 if (intsAssigned) {
423 i = rand(x.size());
424 } else if (setsAssigned) {
425 i = rand(y.size());
426 } else {
427 i = rand(x.size()+y.size());
428 }
429
430 if (setsAssigned || i>=x.size()) {
431 if (i>=x.size())
432 i = i-x.size();
433 while (y[i].assigned()) {
434 i = (i+1) % y.size();
435 }
436 // Prune int var
437
438 // Select mode for pruning
439 switch (rand(3)) {
440 case 0:
441 if (a.ints()[i] < y[i].max()) {
442 int v=a.ints()[i]+1+
443 rand(static_cast<unsigned int>(y[i].max()-a.ints()[i]));
444 assert((v > a.ints()[i]) && (v <= y[i].max()));
445 rel(i, Gecode::IRT_LE, v);
446 }
447 break;
448 case 1:
449 if (a.ints()[i] > y[i].min()) {
450 int v=y[i].min()+
451 rand(static_cast<unsigned int>(a.ints()[i]-y[i].min()));
452 assert((v < a.ints()[i]) && (v >= y[i].min()));
453 rel(i, Gecode::IRT_GR, v);
454 }
455 break;
456 default:
457 int v;
458 Gecode::Int::ViewRanges<Gecode::Int::IntView> it(y[i]);
459 unsigned int skip = rand(y[i].size()-1);
460 while (true) {
461 if (it.width() > skip) {

Callers 1

runMethod · 0.45

Calls 11

interFunction · 0.85
relFunction · 0.50
sizeFunction · 0.50
cardinalityFunction · 0.50
sizeMethod · 0.45
assignedMethod · 0.45
maxMethod · 0.45
minMethod · 0.45
widthMethod · 0.45
cardMinMethod · 0.45
cardMaxMethod · 0.45

Tested by

no test coverage detected