Class: OPL::LinearProgram

Inherits:
Object
  • Object
show all
Defined in:
lib/opl.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeLinearProgram

Returns a new instance of LinearProgram.



773
774
775
776
777
778
779
# File 'lib/opl.rb', line 773

def initialize
  @rows = []
  @data = []
  @epsilon = $default_epsilon
  @matrix_solution = {}
  @stop_processing = false
end

Instance Attribute Details

#column_boundsObject

Returns the value of attribute column_bounds.



760
761
762
# File 'lib/opl.rb', line 760

def column_bounds
  @column_bounds
end

#constraintsObject

Returns the value of attribute constraints.



748
749
750
# File 'lib/opl.rb', line 748

def constraints
  @constraints
end

#dataObject

Returns the value of attribute data.



757
758
759
# File 'lib/opl.rb', line 757

def data
  @data
end

#data_hashObject

Returns the value of attribute data_hash.



758
759
760
# File 'lib/opl.rb', line 758

def data_hash
  @data_hash
end

#epsilonObject

Returns the value of attribute epsilon.



761
762
763
# File 'lib/opl.rb', line 761

def epsilon
  @epsilon
end

#error_messageObject

Returns the value of attribute error_message.



763
764
765
# File 'lib/opl.rb', line 763

def error_message
  @error_message
end

#m_indexObject

Returns the value of attribute m_index.



767
768
769
# File 'lib/opl.rb', line 767

def m_index
  @m_index
end

#matrixObject

Returns the value of attribute matrix.



754
755
756
# File 'lib/opl.rb', line 754

def matrix
  @matrix
end

#matrix_solutionObject

Returns the value of attribute matrix_solution.



762
763
764
# File 'lib/opl.rb', line 762

def matrix_solution
  @matrix_solution
end

#mip_messageObject

Returns the value of attribute mip_message.



756
757
758
# File 'lib/opl.rb', line 756

def mip_message
  @mip_message
end

#negated_objective_lpObject

Returns the value of attribute negated_objective_lp.



766
767
768
# File 'lib/opl.rb', line 766

def negated_objective_lp
  @negated_objective_lp
end

#objectiveObject

Returns the value of attribute objective.



747
748
749
# File 'lib/opl.rb', line 747

def objective
  @objective
end

#original_constraintsObject

Returns the value of attribute original_constraints.



749
750
751
# File 'lib/opl.rb', line 749

def original_constraints
  @original_constraints
end

#rglpk_objectObject

Returns the value of attribute rglpk_object.



752
753
754
# File 'lib/opl.rb', line 752

def rglpk_object
  @rglpk_object
end

#rowsObject

Returns the value of attribute rows.



750
751
752
# File 'lib/opl.rb', line 750

def rows
  @rows
end

#simplex_messageObject

Returns the value of attribute simplex_message.



755
756
757
# File 'lib/opl.rb', line 755

def simplex_message
  @simplex_message
end

#solutionObject

Returns the value of attribute solution.



751
752
753
# File 'lib/opl.rb', line 751

def solution
  @solution
end

#solution_typeObject

Returns the value of attribute solution_type.



765
766
767
# File 'lib/opl.rb', line 765

def solution_type
  @solution_type
end

#solverObject

Returns the value of attribute solver.



753
754
755
# File 'lib/opl.rb', line 753

def solver
  @solver
end

#stop_processingObject

Returns the value of attribute stop_processing.



764
765
766
# File 'lib/opl.rb', line 764

def stop_processing
  @stop_processing
end

#variable_typesObject

Returns the value of attribute variable_types.



759
760
761
# File 'lib/opl.rb', line 759

def variable_types
  @variable_types
end

Instance Method Details

#keysObject



769
770
771
# File 'lib/opl.rb', line 769

def keys
  [:objective, :constraints, :rows, :solution, :formatted_constraints, :rglpk_object, :solver, :matrix, :simplex_message, :mip_message, :data]
end

#recreate_with_objective_abs(objective) ⇒ Object



811
812
813
814
815
816
817
818
819
820
821
822
823
# File 'lib/opl.rb', line 811

def recreate_with_objective_abs(objective)
  #in: "abs(x)"
  #out: {:objective => "x1 + x2", :constraints => "x1 * x2 = 0"}
  #this is a really tough problem - first time I am considering
    #abandoning the string parsing approach. Really need to think
    #about how to attack this
  lp_class = self
  helper = OPL::Helper
  variabes = helper.variables(objective, lp_class.new)
  new_objective = ""
  constraints_to_add = []
  #return(self)
end

#solution_as_matrixObject



781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
# File 'lib/opl.rb', line 781

def solution_as_matrix
  lp = self
  variables = lp.solution.keys.map do |key|
    key.scan(/[a-z]/)[0] if key.include?("[")
  end.uniq.find_all{|e|!e.nil?}
  matrix_solution = {}
  variables.each do |var|
    elements = lp.solution.keys.find_all{|key|key.include?(var) && key.include?("[")}
    num_dims = elements[0].scan(/\]\[/).size + 1
    dim_limits = []
    indices_value_pairs = []
    [*(0..(num_dims-1))].each do |i|
      dim_limit = 0
      elements.each do |e|
        indices = e.scan(/\[\d+\]/).map{|str|str.scan(/\d+/)[0].to_i}
        value = lp.solution[e]
        indices_value_pairs << [indices, value]
        dim_limit = indices[i] if indices[i] > dim_limit
      end
      dim_limits << dim_limit+1
    end
    matrix = [].matrix(dim_limits)
    indices_value_pairs.each do |ivp|
      matrix.insert_at(ivp[0], ivp[1].to_f)
    end
    matrix_solution[var] = matrix
  end
  return(matrix_solution)
end