ruby-cbc 0.3.2 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 123d2f19ca6c970f616b7fc8809132bb40a25e90
4
- data.tar.gz: a757a87c2e76369d441fe123ec73d399b62e8177
3
+ metadata.gz: 03dc702beca044d1c5b6e9b2319ad40e0b0933dd
4
+ data.tar.gz: a50b241db4d74b0068005e5709461f6272b791aa
5
5
  SHA512:
6
- metadata.gz: a77e3149e6f303cecf36e20a8cd75aa5c09a34aacaa56a2dc47af448c8b11df48069ce2c30e65d0e6970819c254a757a94dae906254d89fee283ff0030ed62a8
7
- data.tar.gz: 5ee5d181c9554e2c6e66719cda6e9c6bec32ea4c3f8884d222d798e93ecb2920c8ac246c7226b1ddb1ad00d880424d0e52a0e10056bf5fa10cae26cb0ccb0cec
6
+ metadata.gz: 4a774982b0538e3f9d80f1c2743279174fea6ba83f3ec30526eda0e5b7b66da38737b82299c861f69a88037153c52511903a394760d9a772a8ef6ae2ccebdb27
7
+ data.tar.gz: 420fb9e01cd239819c0b224ec607959f2e59c59886175171424e8d46445866850a5ee1b003c6be0e3f8417a5796ec6641ab7b762b57c4fd9f16ac50bc89f39a0
@@ -8,7 +8,7 @@ module Ilp
8
8
  def initialize(terms, objective_function = MAXIMIZE)
9
9
  @terms = terms
10
10
  @terms = Ilp::Term.new(@terms) if @terms.is_a? Ilp::Var
11
- @terms = Ilp::TermArray.new(@terms) if @terms.is_a? Ilp::Term
11
+ @terms = Ilp::TermArray.new([@terms]) if @terms.is_a? Ilp::Term
12
12
  @terms.normalize!
13
13
  cste = @terms.send(:pop_constant)
14
14
  puts "Removing constant [#{cste}] in objective" if cste != 0
@@ -9,23 +9,23 @@ module Ilp
9
9
  end
10
10
 
11
11
  def +(vars)
12
- Ilp::TermArray.new(self) + vars
12
+ Ilp::TermArray.new([self]) + vars
13
13
  end
14
14
 
15
15
  def -(vars)
16
- Ilp::TermArray.new(self) - vars
16
+ Ilp::TermArray.new([self]) - vars
17
17
  end
18
18
 
19
19
  def ==(vars)
20
- Ilp::TermArray.new(self) == vars
20
+ Ilp::TermArray.new([self]) == vars
21
21
  end
22
22
 
23
23
  def <=(vars)
24
- Ilp::TermArray.new(self) <= vars
24
+ Ilp::TermArray.new([self]) <= vars
25
25
  end
26
26
 
27
27
  def >=(vars)
28
- Ilp::TermArray.new(self) >= vars
28
+ Ilp::TermArray.new([self]) >= vars
29
29
  end
30
30
 
31
31
 
@@ -35,7 +35,7 @@ module Ilp
35
35
  end
36
36
 
37
37
  def coerce(num)
38
- [Ilp::TermArray.new(self), num]
38
+ [Ilp::TermArray.new([self]), num]
39
39
  end
40
40
 
41
41
  def to_s
@@ -4,7 +4,7 @@ module Ilp
4
4
 
5
5
  attr_accessor :terms
6
6
 
7
- def initialize(*terms)
7
+ def initialize(terms)
8
8
  @terms = terms
9
9
  end
10
10
 
@@ -21,7 +21,7 @@ module Ilp
21
21
  else
22
22
  raise ArgumentError, "Argument is not allowed: #{vars} of type #{vars.class}"
23
23
  end
24
- TermArray.new(*new_terms)
24
+ TermArray.new(new_terms)
25
25
  end
26
26
 
27
27
  def -(vars)
@@ -31,20 +31,24 @@ module Ilp
31
31
  def *(mult)
32
32
  raise ArgumentError, 'Argument is not numeric' unless mult.is_a? Numeric
33
33
  new_terms = terms.map { |term| term * mult }
34
- TermArray.new(*new_terms)
34
+ TermArray.new(new_terms)
35
35
  end
36
36
 
37
37
  # cste + nb * var + nb * var...
38
38
  def normalize!
39
- constant = @terms.select{ |t| t.is_a? Numeric }.inject(:+)
39
+ constant = @terms.select{ |t| t.is_a? Numeric }.reduce(:+)
40
40
  hterms = @terms.select{ |t| t.is_a? Ilp::Term }.group_by(&:var)
41
41
  @terms = []
42
42
  constant ||= 0
43
43
  @terms << constant
44
- hterms.each do |v, ts|
45
- t = ts.inject(Ilp::Term.new(v, 0)) { |v1, v2| v1.mult += v2.mult; v1 }
46
- terms << t if t.mult != 0
47
- end
44
+ reduced = hterms.map do |v, ts|
45
+ if ts.count == 1
46
+ ts.first
47
+ else
48
+ ts.reduce(Ilp::Term.new(v, 0)) { |v1, v2| v1.mult += v2.mult; v1 }
49
+ end
50
+ end.reject { |term| term.mult == 0 }
51
+ @terms.concat reduced
48
52
  self
49
53
  end
50
54
 
@@ -4,6 +4,20 @@ module Cbc
4
4
 
5
5
  INF = 1.0 / 0.0 # Useful for ranges
6
6
 
7
+ def self.add_all(variables)
8
+ to_add = variables.map do |variable|
9
+ case variable
10
+ when Numeric, Ilp::Term
11
+ variable
12
+ when Ilp::Var
13
+ Ilp::Term.new(variable)
14
+ else
15
+ raise 'Not a variable, a term or a numeric'
16
+ end
17
+ end
18
+ Ilp::TermArray.new(to_add)
19
+ end
20
+
7
21
  class Model
8
22
 
9
23
 
@@ -1,3 +1,3 @@
1
1
  module Cbc
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-cbc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guillaume Verger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-01-27 00:00:00.000000000 Z
11
+ date: 2016-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -161,3 +161,4 @@ signing_key:
161
161
  specification_version: 4
162
162
  summary: Wrapper around Cbc Linear Programming Solver
163
163
  test_files: []
164
+ has_rdoc: