Class: Ilp::TermArray

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/ruby-cbc/ilp/term_array.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*terms) ⇒ TermArray

Returns a new instance of TermArray.



7
8
9
# File 'lib/ruby-cbc/ilp/term_array.rb', line 7

def initialize(*terms)
  @terms = terms
end

Instance Attribute Details

#termsObject

Returns the value of attribute terms.



5
6
7
# File 'lib/ruby-cbc/ilp/term_array.rb', line 5

def terms
  @terms
end

Instance Method Details

#*(mult) ⇒ Object

Raises:

  • (ArgumentError)


31
32
33
34
35
# File 'lib/ruby-cbc/ilp/term_array.rb', line 31

def *(mult)
  raise ArgumentError, 'Argument is not numeric' unless mult.is_a? Numeric
  new_terms = terms.map { |term| term * mult }
  TermArray.new(*new_terms)
end

#+(vars) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ruby-cbc/ilp/term_array.rb', line 11

def +(vars)
  new_terms = terms.dup
  if vars.is_a? Numeric
    new_terms << vars
  elsif vars.is_a? Ilp::Var
    new_terms << Ilp::Term.new(vars)
  elsif vars.is_a? Ilp::Term
    new_terms << vars
  elsif vars.is_a? Ilp::TermArray
    new_terms.concat(vars.terms)
  else
    raise ArgumentError, "Argument is not allowed: #{vars} of type #{vars.class}"
  end
  TermArray.new(*new_terms)
end

#-(vars) ⇒ Object



27
28
29
# File 'lib/ruby-cbc/ilp/term_array.rb', line 27

def -(vars)
  self + -1 * vars
end

#<=(value) ⇒ Object



51
52
53
# File 'lib/ruby-cbc/ilp/term_array.rb', line 51

def <=(value)
  Ilp::Constraint.new(self, Ilp::Constraint::LESS_OR_EQ, value)
end

#==(value) ⇒ Object



59
60
61
# File 'lib/ruby-cbc/ilp/term_array.rb', line 59

def ==(value)
  Ilp::Constraint.new(self, Ilp::Constraint::EQUALS, value)
end

#>=(value) ⇒ Object



55
56
57
# File 'lib/ruby-cbc/ilp/term_array.rb', line 55

def >=(value)
  Ilp::Constraint.new(self, Ilp::Constraint::GREATER_OR_EQ, value)
end

#coerce(value) ⇒ Object



63
64
65
# File 'lib/ruby-cbc/ilp/term_array.rb', line 63

def coerce(value)
  [Ilp::Constant.new(value), self]
end

#each(&block) ⇒ Object



67
68
69
# File 'lib/ruby-cbc/ilp/term_array.rb', line 67

def each(&block)
  @terms.each(&block)
end

#normalize!Object

cste + nb * var + nb * var…



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/ruby-cbc/ilp/term_array.rb', line 38

def normalize!
  constant = @terms.select{ |t| t.is_a? Numeric }.inject(:+)
  hterms = @terms.select{ |t| t.is_a? Ilp::Term }.group_by(&:var)
  @terms = []
  constant ||= 0
  @terms << constant
  hterms.each do |v, ts|
    t = ts.inject(Ilp::Term.new(v, 0)) { |v1, v2| v1.mult += v2.mult; v1 }
    terms << t if t.mult != 0
  end
  self
end

#to_sObject



71
72
73
# File 'lib/ruby-cbc/ilp/term_array.rb', line 71

def to_s
  @terms.map(&:to_s).join(' ')
end

#varsObject



75
76
77
# File 'lib/ruby-cbc/ilp/term_array.rb', line 75

def vars
  @terms.map(&:var)
end