Class: KnapsackSolver::Dataset

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

Overview

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id, instances) ⇒ Dataset

Initializes set of 0/1 knapsack problem instances.

Parameters:

  • id (Integer)

    Dataset ID number.

  • instances (Array<Instance>)

    set of the 0/1 knapsack problem instances.



10
11
12
13
# File 'lib/knapsack_solver/dataset.rb', line 10

def initialize(id, instances)
  @id = id
  @instances = instances
end

Instance Attribute Details

#idObject (readonly)

Returns the value of attribute id.



42
43
44
# File 'lib/knapsack_solver/dataset.rb', line 42

def id
  @id
end

#instancesObject (readonly)

Returns the value of attribute instances.



42
43
44
# File 'lib/knapsack_solver/dataset.rb', line 42

def instances
  @instances
end

Class Method Details

.parse(stream) ⇒ Dataset

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

Parameters:

  • stream (#eof?, #readline, #each_line)

    character stream holding the dataset.

Returns:

  • (Dataset)

    dataset instance parsed from the stream.

Raises:

  • (StandardError)


19
20
21
22
23
24
# 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) ⇒ Integer

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

Parameters:

  • stream (#eof?, #readline, #each_line)

    character stream holding the dataset.

Returns:

  • (Integer)

    dataset ID number.

Raises:

  • (StandardError)


30
31
32
33
34
35
36
37
38
39
40
# 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