class KnapsackSolver::Dataset

This class represents a set of 0/1 knapsack problem instances.

Attributes

id[R]
instances[R]

Public Class Methods

new(id, instances) click to toggle source

Initializes set of 0/1 knapsack problem instances.

@param id [Integer] Dataset ID number. @param instances [Array<Instance>] set of the 0/1 knapsack problem instances.

# File lib/knapsack_solver/dataset.rb, line 10
def initialize(id, instances)
  @id = id
  @instances = instances
end
parse(stream) click to toggle source

Parses set of a 0/1 knapsack problem instances from a character stream.

@param stream [#eof?,#readline,#each_line] character stream holding the dataset. @return [Dataset] dataset instance parsed from the stream.

# File lib/knapsack_solver/dataset.rb, line 19
def self.parse(stream)
  id = parse_id(stream)
  instances = stream.each_line.with_object([]) { |l, o| o << Instance.parse(l) }
  raise StandardError, 'dataset: missing instances' if instances.empty?
  Dataset.new(id, instances)
end
parse_id(stream) click to toggle source

Parses ID of a 0/1 knapsack problem dataset from a character stream.

@param stream [#eof?,#readline,#each_line] character stream holding the dataset. @return [Integer] dataset ID number.

# File lib/knapsack_solver/dataset.rb, line 30
def self.parse_id(stream)
  raise StandardError, 'dataset: missing ID' if stream.eof?
  s = stream.readline.split
  raise StandardError, 'dataset: first line does not contain ID' if s.size != 1
  begin
    raise StandardError, 'dataset: ID is negative' if Integer(s.first) < 0
  rescue ArgumentError
    raise StandardError, 'dataset: ID is not an integer'
  end
  Integer(s.first)
end