class Amor::Expression
Attributes
factors[R]
Public Class Methods
new(value)
click to toggle source
# File lib/amor/expression.rb, line 6 def initialize(value) if value.is_a? Array @factors = value elsif value.is_a? Expression @factors = value.factors elsif value.is_a? Variable @factors = [[1, value]] elsif value.is_a? Numeric @factors = [[value, :constant]] end end
Public Instance Methods
+(value)
click to toggle source
# File lib/amor/expression.rb, line 18 def +(value) Expression.new(self.factors + Expression.new(value).factors) end
-(value)
click to toggle source
# File lib/amor/expression.rb, line 22 def -(value) self + -value end
-@()
click to toggle source
# File lib/amor/expression.rb, line 26 def -@ return Expression.new(self.factors.map{|factor| [-factor[0], factor[1]]}) end
<=(value)
click to toggle source
# File lib/amor/expression.rb, line 42 def <= value Constraint.new(self, :lesser_equal, value) end
==(value)
click to toggle source
# File lib/amor/expression.rb, line 38 def == value Constraint.new(self, :equal, value) end
>=(value)
click to toggle source
# File lib/amor/expression.rb, line 46 def >= value Constraint.new(self, :greater_equal, value) end
constant_factor()
click to toggle source
# File lib/amor/expression.rb, line 62 def constant_factor @factors.select{|factor| !factor[1].is_a?(Variable)}.inject(0) {|m, factor| m + factor[0]} end
eql?(value)
click to toggle source
# File lib/amor/expression.rb, line 34 def eql? value self.hash == value.hash end
hash()
click to toggle source
# File lib/amor/expression.rb, line 30 def hash @factors.hash end
lp_string()
click to toggle source
# File lib/amor/expression.rb, line 66 def lp_string result = '' factor_strings = self.simplified.factors.each_with_index.map do |factor, i| scalar = factor[0] if scalar < 0 sign = '- ' scalar = -scalar elsif i > 0 sign = '+ ' else sign = '' end if factor[1].is_a? Variable "#{sign}#{scalar} x#{factor[1].internal_index+1}" else "#{sign}#{scalar}" end end return factor_strings.join(' ') end
remove_constants()
click to toggle source
# File lib/amor/expression.rb, line 58 def remove_constants Expression.new(@factors.select{|factor| factor[1].is_a?(Variable)}) end
simplified()
click to toggle source
# File lib/amor/expression.rb, line 50 def simplified summed_scalars = Hash.new @factors.each do |factor| summed_scalars[factor[1]] = (summed_scalars[factor[1]] || 0) + factor[0] end Expression.new(summed_scalars.map{|var, scalar| [scalar, var]}.select{|factor| !factor[0].zero? }) end
to_s()
click to toggle source
# File lib/amor/expression.rb, line 88 def to_s factors.map{|factor| factor[1].is_a?(Variable) ? "#{factor[0]} #{factor[1]}" : "#{factor[0]}"}.join(" ") end