rulp 0.0.44 → 0.0.46

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b02471f804f1086c6193730ce602be9cf03d3ab4
4
- data.tar.gz: a9f7197bb1aeb4a1a707333244b6600fed798322
2
+ SHA256:
3
+ metadata.gz: 79e259317b851f96717dc4e0e66b07f08cf035efc420eeef915db1f40d7b5389
4
+ data.tar.gz: 68cfcdf7d345b9e1ee0c66b70b822a3edcac50af649a906902ef08db4f673f87
5
5
  SHA512:
6
- metadata.gz: 5268c02947e586c5ad74630a9d9aadbca40c29f9ea5078f0f2a31563fdc81016a0664fc8d1f5b0406a7a5fe5d63d4e0ddfbd526a555f6b02525b509271a7707f
7
- data.tar.gz: 280a4f73804264683b9f65cfe42244934f12cf5a585a62e13f6d7cd8823466d1fc1fb43ff83d694fdf6d3e0a1e7cc0c29fbd373a53885f3b3b1f318435b6c283
6
+ metadata.gz: 0fe7414a15de24cd86043956491056cda383ce81ab21a7010add8715fbb2d2a376ff284faade9f7e66a512b1ae3c62926dcceb9dcf9a2dfe3e497eb11f558b8e
7
+ data.tar.gz: 3596934464b9aa30a43467fdc08e69a935f8d53219d2edf1b8110ca1806e71d5507802bd79d770df4d17be1d35f905e5b1b2a6554f3cbb4b5e78548864ebe9ee
@@ -1,5 +1,4 @@
1
- require_relative './array_extensions'
2
1
  require_relative './kernel_extensions'
3
2
  require_relative './object_extensions'
4
3
  require_relative './file_extensions'
5
- require_relative './os_extensions'
4
+ require_relative './os_extensions'
@@ -18,17 +18,15 @@ module Kernel
18
18
  alias_method :old_method_missing, :method_missing
19
19
  def method_missing(value, *args)
20
20
  method_name = "#{value}" rescue ""
21
- start = method_name[0]
22
- if (start <= "Z" && start >= "A")
23
- case method_name[-1]
24
- when "b"
25
- method_name = method_name[0..(method_name[-2] == "_" ? -3 : -2)]
21
+ if ("A".."Z").cover?(method_name[0])
22
+ if method_name.end_with?(BV.suffix)
23
+ method_name = method_name.chomp(BV.suffix).chomp("_")
26
24
  return BV.definition(method_name, args)
27
- when "i"
28
- method_name = method_name[0..(method_name[-2] == "_" ? -3 : -2)]
25
+ elsif method_name.end_with?(IV.suffix)
26
+ method_name = method_name.chomp(IV.suffix).chomp("_")
29
27
  return IV.definition(method_name, args)
30
- when "f"
31
- method_name = method_name[0..(method_name[-2] == "_" ? -3 : -2)]
28
+ elsif method_name.end_with?(LV.suffix)
29
+ method_name = method_name.chomp(LV.suffix).chomp("_")
32
30
  return LV.definition(method_name, args)
33
31
  end
34
32
  end
@@ -14,13 +14,13 @@ class << Object
14
14
  alias_method :old_const_missing, :const_missing
15
15
  def const_missing(value)
16
16
  method_name = "#{value}".split("::")[-1] rescue ""
17
- if (("A".."Z").include?(method_name[0]))
18
- if(method_name.end_with?("b"))
19
- return BV.definition(method_name[0..(method_name[-2] == "_" ? -3 : -2)])
20
- elsif(method_name.end_with?("i"))
21
- return IV.definition(method_name[0..(method_name[-2] == "_" ? -3 : -2)])
22
- elsif(method_name.end_with?("f"))
23
- return LV.definition(method_name[0..(method_name[-2] == "_" ? -3 : -2)])
17
+ if ("A".."Z").cover?(method_name[0])
18
+ if method_name.end_with?(BV.suffix)
19
+ return BV.definition(method_name.chomp(BV.suffix).chomp("_"))
20
+ elsif method_name.end_with?(IV.suffix)
21
+ return IV.definition(method_name.chomp(IV.suffix).chomp("_"))
22
+ elsif method_name.end_with?(LV.suffix)
23
+ return LV.definition(method_name.chomp(LV.suffix).chomp("_"))
24
24
  end
25
25
  end
26
26
  old_const_missing(value)
@@ -21,15 +21,14 @@ class Expressions
21
21
  @expressions.map(&:variable)
22
22
  end
23
23
 
24
- [:==, :<, :<=, :>, :>=].each do |constraint_type|
25
- define_method(constraint_type){|value|
24
+ %i[== < <= > >=].each do |constraint_type|
25
+ define_method(constraint_type) do |value|
26
26
  Constraint.new(self, constraint_type, value)
27
- }
27
+ end
28
28
  end
29
29
 
30
30
  def -@
31
- -self.expressions[0]
32
- self
31
+ self.class.new(expressions.map(&:-@))
33
32
  end
34
33
 
35
34
  def -(other)
@@ -38,7 +37,7 @@ class Expressions
38
37
  end
39
38
 
40
39
  def +(other)
41
- Expressions.new(self.expressions + Expressions[other].expressions)
40
+ Expressions.new(expressions + Expressions[other].expressions)
42
41
  end
43
42
 
44
43
  def self.[](value)
@@ -50,7 +49,7 @@ class Expressions
50
49
  end
51
50
 
52
51
  def evaluate
53
- self.expressions.map(&:evaluate).inject(:+)
52
+ expressions.map(&:evaluate).inject(:+)
54
53
  end
55
54
  end
56
55
 
@@ -66,19 +65,19 @@ class Fragment
66
65
  end
67
66
 
68
67
  def +(other)
69
- return Expressions.new([self] + Expressions[other].expressions)
68
+ Expressions.new([self] + Expressions[other].expressions)
70
69
  end
71
70
 
72
71
  def -(other)
73
72
  self.+(-other)
74
73
  end
75
74
 
76
- def *(value)
77
- Fragment.new(@lv, @operand * value)
75
+ def *(other)
76
+ Fragment.new(@lv, @operand * other)
78
77
  end
79
78
 
80
79
  def evaluate
81
- if [TrueClass,FalseClass].include? @lv.value.class
80
+ if [TrueClass, FalseClass].include? @lv.value.class
82
81
  @operand * (@lv.value ? 1 : 0)
83
82
  else
84
83
  @operand * @lv.value
@@ -94,20 +93,18 @@ class Fragment
94
93
  @lv
95
94
  end
96
95
 
97
- [:==, :<, :<=, :>, :>=].each do |constraint_type|
98
- define_method(constraint_type){|value|
96
+ %i[== < <= > >=].each do |constraint_type|
97
+ define_method(constraint_type) do |value|
99
98
  Constraint.new(Expressions.new(self), constraint_type, value)
100
- }
99
+ end
101
100
  end
102
101
 
103
102
  def to_s
104
- @as_str ||= begin
105
- case @operand
106
- when -1 then " - #{@lv}"
107
- when 1 then " + #{@lv}"
108
- when ->(op){ op < 0} then " - #{@operand.abs} #{@lv}"
109
- else " + #{@operand} #{@lv}"
110
- end
111
- end
103
+ @as_str ||= case @operand
104
+ when -1 then " - #{@lv}"
105
+ when 1 then " + #{@lv}"
106
+ when ->(op) { op < 0 } then " - #{@operand.abs} #{@lv}"
107
+ else " + #{@operand} #{@lv}"
108
+ end
112
109
  end
113
- end
110
+ end
data/lib/rulp/lv.rb CHANGED
@@ -21,8 +21,12 @@ class LV
21
21
  "#{self.name}_#{self.suffix}"
22
22
  end
23
23
 
24
+ def self.suffix
25
+ ENV['RULP_LV_SUFFIX'] || "f"
26
+ end
27
+
24
28
  def suffix
25
- "f"
29
+ self.class.suffix
26
30
  end
27
31
 
28
32
  def self.definition(name, *args)
@@ -74,12 +78,13 @@ class LV
74
78
  end
75
79
 
76
80
  class BV < LV;
77
- def suffix
78
- "b"
81
+ def self.suffix
82
+ ENV['RULP_BV_SUFFIX'] || "b"
79
83
  end
80
84
  end
85
+
81
86
  class IV < LV;
82
- def suffix
83
- "i"
87
+ def self.suffix
88
+ ENV['RULP_IV_SUFFIX'] || "i"
84
89
  end
85
- end
90
+ end
data/lib/rulp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rulp
2
- VERSION = '0.0.44'
3
- end
2
+ VERSION = '0.0.46'
3
+ end
data/test/test_boolean.rb CHANGED
@@ -8,8 +8,8 @@ require_relative 'test_helper'
8
8
  class BooleanTest < Minitest::Test
9
9
  def setup
10
10
  @items = 30.times.map(&Shop_Item_b)
11
- items_count = @items.sum
12
- @items_costs = @items.map{|item| item * Random.rand(1.0...5.0)}.sum
11
+ items_count = @items.inject(:+)
12
+ @items_costs = @items.map{|item| item * Random.rand(1.0...5.0)}.inject(:+)
13
13
 
14
14
  @problem =
15
15
  Rulp::Min( @items_costs ) [
@@ -8,8 +8,8 @@ require_relative 'test_helper'
8
8
  class InfeasibleTest < Minitest::Test
9
9
  def setup
10
10
  @items = 30.times.map(&Shop_Item_b)
11
- items_count = @items.sum
12
- @items_costs = @items.map{|item| item * Random.rand(1.0...5.0)}.sum
11
+ items_count = @items.inject(:+)
12
+ @items_costs = @items.map{|item| item * Random.rand(1.0...5.0)}.inject(:+)
13
13
 
14
14
  @problem =
15
15
  Rulp::Min( @items_costs ) [
@@ -0,0 +1,30 @@
1
+ require_relative 'test_helper'
2
+
3
+ class NegateExpressionTest < Minitest::Test
4
+
5
+ def test_negate_expression
6
+ @problem = Rulp::Max(- (X1_i + 2 * X2_i))
7
+ @problem[
8
+ X1_i + X2_i == 10,
9
+ X1_i >= 0,
10
+ X2_i >= 0
11
+ ]
12
+
13
+ @problem.solve
14
+ assert X1_i.value == 10
15
+ assert X2_i.value == 0
16
+ end
17
+
18
+ def test_double_negate_expression
19
+ @problem = Rulp::Max(-(-(X1_i + 2 * X2_i)))
20
+ @problem[
21
+ X1_i + X2_i == 10,
22
+ X1_i >= 0,
23
+ X2_i >= 0
24
+ ]
25
+
26
+ @problem.solve
27
+ assert X1_i.value == 0
28
+ assert X2_i.value == 10
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'test_helper'
2
+
3
+ class NegateTerm < Minitest::Test
4
+ def setup
5
+ @problem = Rulp::Max(-X1_i + 2 * X2_i)
6
+ @problem[
7
+ X1_i + X2_i == 10,
8
+ X1_i >= 0,
9
+ X2_i >= 0
10
+ ]
11
+
12
+ @problem.solve
13
+ end
14
+
15
+ def test_negate_term
16
+ assert X1_i.value == 0
17
+ assert X2_i.value == 10
18
+ end
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rulp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.44
4
+ version: 0.0.46
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-01 00:00:00.000000000 Z
11
+ date: 2024-04-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple Ruby LP description DSL
14
14
  email: wc@pico.net.nz
@@ -18,7 +18,6 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - bin/rulp
21
- - lib/extensions/array_extensions.rb
22
21
  - lib/extensions/extensions.rb
23
22
  - lib/extensions/file_extensions.rb
24
23
  - lib/extensions/kernel_extensions.rb
@@ -43,12 +42,14 @@ files:
43
42
  - test/test_boolean.rb
44
43
  - test/test_helper.rb
45
44
  - test/test_infeasible.rb
45
+ - test/test_negate_expression.rb
46
+ - test/test_negate_term.rb
46
47
  - test/test_save_to_file.rb
47
48
  - test/test_simple.rb
48
- homepage:
49
+ homepage:
49
50
  licenses: []
50
51
  metadata: {}
51
- post_install_message:
52
+ post_install_message:
52
53
  rdoc_options: []
53
54
  require_paths:
54
55
  - lib
@@ -63,9 +64,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  - !ruby/object:Gem::Version
64
65
  version: '0'
65
66
  requirements: []
66
- rubyforge_project:
67
- rubygems_version: 2.5.1
68
- signing_key:
67
+ rubygems_version: 3.5.6
68
+ signing_key:
69
69
  specification_version: 4
70
70
  summary: Ruby Linear Programming
71
71
  test_files:
@@ -73,5 +73,7 @@ test_files:
73
73
  - test/test_boolean.rb
74
74
  - test/test_helper.rb
75
75
  - test/test_infeasible.rb
76
+ - test/test_negate_expression.rb
77
+ - test/test_negate_term.rb
76
78
  - test/test_save_to_file.rb
77
79
  - test/test_simple.rb
@@ -1,5 +0,0 @@
1
- class Array
2
- def sum
3
- self.inject(:+)
4
- end
5
- end