dep_selector 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,7 +27,7 @@
27
27
 
28
28
  class VersionProblem;
29
29
 
30
- VersionProblem * VersionProblemCreate(int packageCount);
30
+ VersionProblem * VersionProblemCreate(int packageCount, bool dumpStats);
31
31
  void VersionProblemDestroy(VersionProblem * vp);
32
32
 
33
33
  int VersionProblemSize(VersionProblem *p);
@@ -1633,6 +1633,26 @@ SWIG_AsVal_int (VALUE obj, int *val)
1633
1633
  }
1634
1634
 
1635
1635
 
1636
+ SWIGINTERN int
1637
+ SWIG_AsVal_bool (VALUE obj, bool *val)
1638
+ {
1639
+ if (obj == Qtrue) {
1640
+ if (val) *val = true;
1641
+ return SWIG_OK;
1642
+ } else if (obj == Qfalse) {
1643
+ if (val) *val = false;
1644
+ return SWIG_OK;
1645
+ } else {
1646
+ int res = 0;
1647
+ if (SWIG_AsVal_int (obj, &res) == SWIG_OK) {
1648
+ if (val) *val = res ? true : false;
1649
+ return SWIG_OK;
1650
+ }
1651
+ }
1652
+ return SWIG_TypeError;
1653
+ }
1654
+
1655
+
1636
1656
  #define SWIG_From_long LONG2NUM
1637
1657
 
1638
1658
 
@@ -1652,20 +1672,28 @@ SWIG_From_bool (bool value)
1652
1672
  SWIGINTERN VALUE
1653
1673
  _wrap_VersionProblemCreate(int argc, VALUE *argv, VALUE self) {
1654
1674
  int arg1 ;
1675
+ bool arg2 ;
1655
1676
  VersionProblem *result = 0 ;
1656
1677
  int val1 ;
1657
1678
  int ecode1 = 0 ;
1679
+ bool val2 ;
1680
+ int ecode2 = 0 ;
1658
1681
  VALUE vresult = Qnil;
1659
1682
 
1660
- if ((argc < 1) || (argc > 1)) {
1661
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
1683
+ if ((argc < 2) || (argc > 2)) {
1684
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail;
1662
1685
  }
1663
1686
  ecode1 = SWIG_AsVal_int(argv[0], &val1);
1664
1687
  if (!SWIG_IsOK(ecode1)) {
1665
1688
  SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "VersionProblemCreate" "', argument " "1"" of type '" "int""'");
1666
1689
  }
1667
1690
  arg1 = static_cast< int >(val1);
1668
- result = (VersionProblem *)VersionProblemCreate(arg1);
1691
+ ecode2 = SWIG_AsVal_bool(argv[1], &val2);
1692
+ if (!SWIG_IsOK(ecode2)) {
1693
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VersionProblemCreate" "', argument " "2"" of type '" "bool""'");
1694
+ }
1695
+ arg2 = static_cast< bool >(val2);
1696
+ result = (VersionProblem *)VersionProblemCreate(arg1,arg2);
1669
1697
  vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_VersionProblem, 0 | 0 );
1670
1698
  return vresult;
1671
1699
  fail:
@@ -39,8 +39,9 @@ const int VersionProblem::MIN_TRUST_LEVEL = 0;
39
39
  const int VersionProblem::MAX_TRUST_LEVEL = 10;
40
40
  const int VersionProblem::MAX_PREFERRED_WEIGHT = 10;
41
41
 
42
- VersionProblem::VersionProblem(int packageCount)
43
- : size(packageCount), finalized(false), cur_package(0), package_versions(*this, packageCount),
42
+ VersionProblem::VersionProblem(int packageCount, bool dumpStats)
43
+ : size(packageCount), version_constraint_count(0), dump_stats(dumpStats),
44
+ finalized(false), cur_package(0), package_versions(*this, packageCount),
44
45
  disabled_package_variables(*this, packageCount, 0, 1), total_disabled(*this, 0, packageCount*MAX_TRUST_LEVEL),
45
46
  total_required_disabled(*this, 0, packageCount), total_induced_disabled(*this, 0, packageCount),
46
47
  total_suspicious_disabled(*this, 0, packageCount),
@@ -61,8 +62,9 @@ VersionProblem::VersionProblem(int packageCount)
61
62
  }
62
63
 
63
64
  VersionProblem::VersionProblem(bool share, VersionProblem & s)
64
- : Space(share, s), size(s.size),
65
- finalized(s.finalized), cur_package(s.cur_package),
65
+ : Space(share, s),
66
+ size(s.size), version_constraint_count(s.version_constraint_count), dump_stats(s.dump_stats),
67
+ finalized(s.finalized), cur_package(s.cur_package),
66
68
  disabled_package_variables(s.disabled_package_variables), total_disabled(s.total_disabled),
67
69
  total_required_disabled(s.total_required_disabled), total_induced_disabled(s.total_induced_disabled),
68
70
  total_suspicious_disabled(s.total_suspicious_disabled),
@@ -135,7 +137,8 @@ VersionProblem::AddVersionConstraint(int packageId, int version,
135
137
  BoolVar version_match(*this, 0, 1);
136
138
  BoolVar depend_match(*this, 0, 1);
137
139
  BoolVar predicated_depend_match(*this, 0, 1);
138
-
140
+
141
+ version_constraint_count++;
139
142
  #ifdef DEBUG
140
143
  std::cout << "Add VC for " << packageId << " @ " << version << " depPkg " << dependentPackageId;
141
144
  std::cout << " [ " << minDependentVersion << ", " << maxDependentVersion << " ]" << std::endl;
@@ -489,32 +492,39 @@ VersionProblem * VersionProblem::Solve(VersionProblem * problem)
489
492
  VersionProblem *best_solution = NULL;
490
493
  timer.start();
491
494
 
492
- for (int k = 0; k < 1; k++)
493
- {
495
+ Restart<VersionProblem> solver(problem);
496
+ best_solution = NULL;
494
497
 
495
- Restart<VersionProblem> solver(problem);
496
- best_solution = NULL;
497
-
498
- while (VersionProblem *solution = solver.next())
499
- {
500
- if (best_solution != NULL)
501
- {
502
- delete best_solution;
503
- }
504
- best_solution = solution;
505
- ++i;
498
+ while (VersionProblem *solution = solver.next())
499
+ {
500
+ if (best_solution != NULL)
501
+ {
502
+ delete best_solution;
503
+ }
504
+ best_solution = solution;
505
+ ++i;
506
506
  #ifdef DEBUG
507
- std::cout << "Trial Solution #" << i << "===============================" << std::endl;
508
- const Search::Statistics & stats = solver.statistics();
509
- std::cout << "Solver stats: Prop:" << stats.propagate << " Fail:" << stats.fail << " Node:" << stats.node;
510
- std::cout << " Depth:" << stats.depth << " memory:" << stats.memory << std::endl;
511
- solution->Print(std::cout);
507
+ std::cout << "Trial Solution #" << i << "===============================" << std::endl;
508
+ const Search::Statistics & stats = solver.statistics();
509
+ std::cout << "Solver stats: Prop:" << stats.propagate << " Fail:" << stats.fail << " Node:" << stats.node;
510
+ std::cout << " Depth:" << stats.depth << " memory:" << stats.memory << std::endl;
511
+ solution->Print(std::cout);
512
512
  #endif //DEBUG
513
- }
514
-
515
513
  }
516
514
 
517
515
  double elapsed_time = timer.stop();
516
+
517
+ if (problem->dump_stats) {
518
+ std::cerr << "dep_selector solve: ";
519
+ std::cerr << (best_solution ? "SOLVED" : "FAILED") << " ";
520
+ std::cerr << problem->size << " packages, " << problem->version_constraint_count << " constraints, ";
521
+ std::cerr << "Time: " << elapsed_time << "ms ";
522
+ const Search::Statistics & final_stats = solver.statistics();
523
+ std::cerr << "Stats: " << i << " steps, " << final_stats.memory << " bytes, ";
524
+ std::cerr << final_stats.propagate << " props, " << final_stats.node << " nodes, " << final_stats.depth << " depth ";
525
+ std::cerr << std::endl << std::flush;
526
+ }
527
+
518
528
  #ifdef DEBUG_LITE
519
529
  std::cout << "Solution completed: " << (best_solution ? "Found solution" : "No solution found") << std::endl;
520
530
  std::cout << "Solution consumed: " << elapsed_time << " ms " << i << " steps" << std::endl;
@@ -42,13 +42,13 @@ using namespace Gecode;
42
42
 
43
43
  class VersionProblem : public Space
44
44
  {
45
- public:
45
+ public:
46
46
  static const int UNRESOLVED_VARIABLE;
47
47
  static const int MIN_TRUST_LEVEL;
48
48
  static const int MAX_TRUST_LEVEL;
49
49
  static const int MAX_PREFERRED_WEIGHT;
50
50
 
51
- VersionProblem(int packageCount);
51
+ VersionProblem(int packageCount, bool dumpStats = true);
52
52
  // Clone constructor; check gecode rules for this...
53
53
  VersionProblem(bool share, VersionProblem & s);
54
54
  virtual ~VersionProblem();
@@ -95,10 +95,11 @@ class VersionProblem : public Space
95
95
 
96
96
  protected:
97
97
  int size;
98
+ int version_constraint_count;
98
99
  int cur_package;
99
- bool CheckPackageId(int id);
100
+ bool dump_stats;
100
101
  bool finalized;
101
- // std::vector<int> test;
102
+
102
103
  BoolVarArgs version_flags;
103
104
  IntVarArray package_versions;
104
105
  BoolVarArray disabled_package_variables;
@@ -112,11 +113,11 @@ class VersionProblem : public Space
112
113
  IntVar total_preferred_at_latest;
113
114
  IntVar total_not_preferred_at_latest;
114
115
 
115
- int * disabled_package_weights;
116
116
  int * preferred_at_latest_weights;
117
117
  int * is_required;
118
118
  int * is_suspicious;
119
119
 
120
+ bool CheckPackageId(int id);
120
121
  void AddPackagesPreferredToBeAtLatestObjectiveFunction(const VersionProblem & best_known_solution);
121
122
  void ConstrainVectorLessThanBest(IntVarArgs & current, IntVarArgs & best);
122
123
  void BuildCostVector(IntVarArgs & costVector) const;
@@ -29,9 +29,9 @@
29
29
  // insure proper memory behaviour
30
30
 
31
31
  // FFI friendly
32
- VersionProblem * VersionProblemCreate(int packageCount)
32
+ VersionProblem * VersionProblemCreate(int packageCount, bool dump_stats)
33
33
  {
34
- return new VersionProblem(packageCount);
34
+ return new VersionProblem(packageCount, dump_stats);
35
35
  }
36
36
 
37
37
  void VersionProblemDestroy(VersionProblem * p)
@@ -31,7 +31,7 @@ extern "C" {
31
31
  typedef struct VersionProblem VersionProblem;
32
32
  #endif // __cplusplus
33
33
 
34
- VersionProblem * VersionProblemCreate(int packageCount);
34
+ VersionProblem * VersionProblemCreate(int packageCount, bool dumpStats);
35
35
  void VersionProblemDestroy(VersionProblem * vp);
36
36
 
37
37
 
@@ -1,3 +1,3 @@
1
1
  module DepSelector
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -30,7 +30,7 @@ module DepSelector
30
30
  # modeled after http://www.mikeperham.com/2010/02/24/the-trouble-with-ruby-finalizers/
31
31
  def initialize(problem_or_package_count)
32
32
  if (problem_or_package_count.is_a?(Numeric))
33
- @gecode_problem = Dep_gecode.VersionProblemCreate(problem_or_package_count)
33
+ @gecode_problem = Dep_gecode.VersionProblemCreate(problem_or_package_count, true)
34
34
  else
35
35
  @gecode_problem = problem_or_package_count
36
36
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: dep_selector
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Christopher Walters
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-03-21 00:00:00 -07:00
14
+ date: 2011-03-30 00:00:00 -07:00
15
15
  default_executable:
16
16
  dependencies: []
17
17