amor 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/amor.gemspec +1 -1
- data/lib/amor/model.rb +51 -2
- data/lib/amor/variable.rb +1 -1
- data/lib/amor/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 31492f2a4a6321ec6ad50a028c7e0a072c32131b
|
|
4
|
+
data.tar.gz: 2d11c7147c51de95267d0ae69ddefcd858fab2c3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8b6a4b028958ab03e30430cd6c75b5df531944eaffe99628c2df3d8600f98c98f8fbb2eeda4280e17a58317c112a9fe540204004d2dfe6663e72fdf8d6b70ef4
|
|
7
|
+
data.tar.gz: 5efcbc2c466fac5623951a281753b1a3f995cc2cd85b20a6dfe6ec24dd54288ad2e17c64bdd336795f12c1b1e090cf1741d586187d87565b46be6d2b7fad5db0
|
data/README.md
CHANGED
data/amor.gemspec
CHANGED
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
|
10
10
|
spec.email = ["me@fdahms.com"]
|
|
11
11
|
spec.summary = "A versatile, yet simple modelling language for mathematical programming"
|
|
12
12
|
spec.description = "AMoR is a Ruby DSL for mathematical programming. It allows to simply define a mathematical program, but gives you all the features from Ruby for more complex projects"
|
|
13
|
-
spec.homepage = ""
|
|
13
|
+
spec.homepage = "http://amor-gem.com"
|
|
14
14
|
spec.license = "MIT"
|
|
15
15
|
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
data/lib/amor/model.rb
CHANGED
|
@@ -3,7 +3,7 @@ require 'amor/objective'
|
|
|
3
3
|
module Amor
|
|
4
4
|
class Model
|
|
5
5
|
|
|
6
|
-
attr_reader :
|
|
6
|
+
attr_reader :constraints, :solved, :bounded
|
|
7
7
|
|
|
8
8
|
def initialize
|
|
9
9
|
@variables = Array.new
|
|
@@ -13,10 +13,25 @@ module Amor
|
|
|
13
13
|
|
|
14
14
|
# Return the variable for that index if already existing or a new one
|
|
15
15
|
def x(index)
|
|
16
|
-
@variables[@indices[index] ||= @indices.size] ||= Variable.new(self, index)
|
|
16
|
+
variable = @variables[@indices[index] ||= @indices.size] ||= Variable.new(self, index)
|
|
17
|
+
if @solved
|
|
18
|
+
variable.value || 0
|
|
19
|
+
else
|
|
20
|
+
variable
|
|
21
|
+
end
|
|
17
22
|
end
|
|
18
23
|
alias :var :x
|
|
19
24
|
|
|
25
|
+
def objective
|
|
26
|
+
if @solved
|
|
27
|
+
@objective_value
|
|
28
|
+
else
|
|
29
|
+
@objective
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
alias :obj :objective
|
|
33
|
+
|
|
34
|
+
|
|
20
35
|
# Add a minimization objective
|
|
21
36
|
def min(expression)
|
|
22
37
|
@objective = Objective.new(:minimize, expression)
|
|
@@ -114,5 +129,39 @@ module Amor
|
|
|
114
129
|
variable.lb = 0
|
|
115
130
|
return variable
|
|
116
131
|
end
|
|
132
|
+
|
|
133
|
+
def scip
|
|
134
|
+
self.save_lp('__temp.lp')
|
|
135
|
+
scip_result = `scip -f __temp.lp`
|
|
136
|
+
File.delete('__temp.lp')
|
|
137
|
+
|
|
138
|
+
solution_section = false
|
|
139
|
+
scip_result.each_line do |line|
|
|
140
|
+
if line =~ /problem is solved \[([\w\s]*)\]/
|
|
141
|
+
@solved = true
|
|
142
|
+
if $1 == 'optimal solution found'
|
|
143
|
+
@bounded = true
|
|
144
|
+
elsif $1 == 'unbounded'
|
|
145
|
+
@bounded = false
|
|
146
|
+
else
|
|
147
|
+
raise 'Unknown solve status'
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
solution_section = true if line =~ /primal solution:/
|
|
152
|
+
solution_section = false if line =~ /Statistics/n
|
|
153
|
+
|
|
154
|
+
if solution_section
|
|
155
|
+
@objective_value = $1 if line =~ /objective value:\s*([\.\d]+)/
|
|
156
|
+
if line =~ /x(\d+)\s*([\.\d]+)/
|
|
157
|
+
@variables[$1.to_i-1].value = $2.to_f
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
rescue Errno::ENOENT => e
|
|
163
|
+
puts "Could not find SCIP. Please make sure that SCIP is installed and you can execute 'scip'."
|
|
164
|
+
raise e
|
|
165
|
+
end
|
|
117
166
|
end
|
|
118
167
|
end
|
data/lib/amor/variable.rb
CHANGED
data/lib/amor/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: amor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Florian Dahms
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-10-
|
|
11
|
+
date: 2014-10-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -100,7 +100,7 @@ files:
|
|
|
100
100
|
- spec/amor/objective_spec.rb
|
|
101
101
|
- spec/amor/variable_spec.rb
|
|
102
102
|
- spec/spec_helper.rb
|
|
103
|
-
homepage:
|
|
103
|
+
homepage: http://amor-gem.com
|
|
104
104
|
licenses:
|
|
105
105
|
- MIT
|
|
106
106
|
metadata: {}
|
|
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
120
120
|
version: '0'
|
|
121
121
|
requirements: []
|
|
122
122
|
rubyforge_project:
|
|
123
|
-
rubygems_version: 2.2.
|
|
123
|
+
rubygems_version: 2.2.2
|
|
124
124
|
signing_key:
|
|
125
125
|
specification_version: 4
|
|
126
126
|
summary: A versatile, yet simple modelling language for mathematical programming
|