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.



771
772
773
774
775
776
777
# File 'lib/opl.rb', line 771

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.



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

def column_bounds
  @column_bounds
end

#constraintsObject

Returns the value of attribute constraints.



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

def constraints
  @constraints
end

#dataObject

Returns the value of attribute data.



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

def data
  @data
end

#data_hashObject

Returns the value of attribute data_hash.



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

def data_hash
  @data_hash
end

#epsilonObject

Returns the value of attribute epsilon.



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

def epsilon
  @epsilon
end

#error_messageObject

Returns the value of attribute error_message.



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

def error_message
  @error_message
end

#m_indexObject

Returns the value of attribute m_index.



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

def m_index
  @m_index
end

#matrixObject

Returns the value of attribute matrix.



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

def matrix
  @matrix
end

#matrix_solutionObject

Returns the value of attribute matrix_solution.



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

def matrix_solution
  @matrix_solution
end

#mip_messageObject

Returns the value of attribute mip_message.



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

def mip_message
  @mip_message
end

#negated_objective_lpObject

Returns the value of attribute negated_objective_lp.



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

def negated_objective_lp
  @negated_objective_lp
end

#objectiveObject

Returns the value of attribute objective.



745
746
747
# File 'lib/opl.rb', line 745

def objective
  @objective
end

#original_constraintsObject

Returns the value of attribute original_constraints.



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

def original_constraints
  @original_constraints
end

#rglpk_objectObject

Returns the value of attribute rglpk_object.



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

def rglpk_object
  @rglpk_object
end

#rowsObject

Returns the value of attribute rows.



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

def rows
  @rows
end

#simplex_messageObject

Returns the value of attribute simplex_message.



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

def simplex_message
  @simplex_message
end

#solutionObject

Returns the value of attribute solution.



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

def solution
  @solution
end

#solution_typeObject

Returns the value of attribute solution_type.



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

def solution_type
  @solution_type
end

#solverObject

Returns the value of attribute solver.



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

def solver
  @solver
end

#stop_processingObject

Returns the value of attribute stop_processing.



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

def stop_processing
  @stop_processing
end

#variable_typesObject

Returns the value of attribute variable_types.



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

def variable_types
  @variable_types
end

Instance Method Details

#keysObject



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

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

#recreate_with_objective_abs(objective) ⇒ Object



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

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



779
780
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
# File 'lib/opl.rb', line 779

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