opl 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/opl.rb +35 -11
- metadata +2 -2
data/lib/opl.rb
CHANGED
@@ -9,20 +9,10 @@ require "rglpk"
|
|
9
9
|
# "x >= 0"
|
10
10
|
# ]))
|
11
11
|
|
12
|
-
#put a warning about branch and cut in the github description
|
13
|
-
|
14
|
-
#1.1
|
15
|
-
#setting variable values in constraints
|
16
|
-
#and then using that variable value in further constraints
|
17
|
-
|
18
12
|
#1.2
|
19
|
-
#summing of variables
|
20
|
-
#e.g. x1 + x1 <= 3
|
21
|
-
|
22
|
-
#1.3
|
23
13
|
#allow a POSITIVE: x option or NEGATIVE: x
|
24
14
|
|
25
|
-
#1.
|
15
|
+
#1.3
|
26
16
|
#float coefficients
|
27
17
|
|
28
18
|
#2.0
|
@@ -471,6 +461,37 @@ class OPL
|
|
471
461
|
end
|
472
462
|
variable_type_hash
|
473
463
|
end
|
464
|
+
|
465
|
+
def self.sum_variables(formatted_constraint)
|
466
|
+
#in: x + y - z + x[3] + z + y - z + x - y <= 0
|
467
|
+
#out: 2*x + y - z + x[3] <= 0
|
468
|
+
helper = self
|
469
|
+
lhs = helper.sides(formatted_constraint)[:lhs]
|
470
|
+
formatted_lhs = helper.add_ones(lhs)
|
471
|
+
vars = helper.variables(formatted_lhs)
|
472
|
+
coefs = helper.coefficients(formatted_lhs)
|
473
|
+
var_coef_hash = {}
|
474
|
+
vars.each_index do |i|
|
475
|
+
var = vars[i]
|
476
|
+
coef = coefs[i]
|
477
|
+
if var_coef_hash[var]
|
478
|
+
var_coef_hash[var] += coefs[i].to_f
|
479
|
+
else
|
480
|
+
var_coef_hash[var] = coefs[i].to_f
|
481
|
+
end
|
482
|
+
end
|
483
|
+
new_lhs = ""
|
484
|
+
var_coef_hash.keys.each do |key|
|
485
|
+
coef = var_coef_hash[key].to_s
|
486
|
+
var = key
|
487
|
+
coef = "+"+coef unless coef.include?("-")
|
488
|
+
new_lhs += coef+"*"+var
|
489
|
+
end
|
490
|
+
if new_lhs[0] == "+"
|
491
|
+
new_lhs = new_lhs[1..-1]
|
492
|
+
end
|
493
|
+
formatted_constraint.gsub(lhs, new_lhs)
|
494
|
+
end
|
474
495
|
end
|
475
496
|
|
476
497
|
class LinearProgram
|
@@ -560,6 +581,9 @@ def subject_to(constraints, options=[])
|
|
560
581
|
constraints = constraints.map do |constraint|
|
561
582
|
OPL::Helper.sub_rhs_with_summed_constants(constraint)
|
562
583
|
end
|
584
|
+
constraints = constraints.map do |constraint|
|
585
|
+
OPL::Helper.sum_variables(constraint)
|
586
|
+
end
|
563
587
|
all_vars = OPL::Helper.get_all_vars(constraints)
|
564
588
|
variable_type_hash = OPL::Helper.produce_variable_type_hash(variable_types, all_vars)
|
565
589
|
rows = []
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-25 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Built on top of the glpk gem for linear programming. The syntax is copied
|
15
15
|
from OPL Studio, which remains my favorite linear programming software, but the
|