Skip to content

Commit cb20ac7

Browse files
committed
remove lambertW
1 parent d803679 commit cb20ac7

File tree

3 files changed

+4
-18
lines changed

3 files changed

+4
-18
lines changed

Project.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ CodecBzip2 = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd"
88
CodecZlib = "944b1d66-785c-5afd-91f1-9de20f533193"
99
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
1010
JSONSchema = "7d188eb4-7ad8-530c-ae41-71a32a6d4692"
11-
LambertW = "984bce1d-4616-540c-a9ee-88d1112d94c9"
1211
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1312
MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0"
1413
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"

src/Bridges/Constraint/relentr_to_exp.jl

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -104,23 +104,13 @@ function MOI.get(model::MOI.ModelLike, attr::Union{MOI.ConstraintDual, MOI.Const
104104
return dual
105105
end
106106
# Given constraint dual start of (u, v, w), constraint dual on GreaterThan is u
107-
# and on exponential cone constraint i is (r,s,t) for -r exp (s/r - 1) = t, where
108-
# s = w_i, t = v_i, and r = exp(W(-s / (-t * e))) * (-t * e), where W is the
109-
# Lambert W function. The derivation of the r expression follows:
110-
# -r exp (s/r - 1) = t => s/r - 1 = log(t/-r) => s/r = log (e * t/-r)
111-
# => -s = r log (r / (-t * e)) => -s / (-t * e) = r / (-t * e) log (r / (-t * e))
112-
# let x = r / (-t * e) and y = -s / (-t * e), solve y = x log x using Lambert W function:
113-
# x = exp(W(y)) => r / (-t * e) = exp(W(-s / (-t * e))) => r = exp(W(-s / (-t * e))) * (-t * e).
114-
import LambertW
107+
# and on exponential cone constraint i is (r_i, w_i, v_i), but since y_i is free,
108+
# its dual is 0, so we have -r_i + value[1] == 0 hence r_i = value[1].
115109
function MOI.set(model::MOI.ModelLike, ::MOI.ConstraintDualStart, bridge::RelativeEntropyBridge, value)
116110
MOI.set(model, MOI.ConstraintDualStart(), bridge.ge_index, value[1])
117111
w_start = 1 + length(bridge.y)
118112
for i in eachindex(bridge.y)
119-
s_value = value[w_start + i]
120-
t_value = value[1 + i]
121-
r_value = exp(LambertW.lambertw(s_value / (t_value * ℯ))) * -t_value *
122-
@assert -r_value * exp(s_value / r_value - 1) - t_value 0
123-
MOI.set(model, MOI.ConstraintDualStart(), bridge.exp_indices[i], [r_value, s_value, t_value])
113+
MOI.set(model, MOI.ConstraintDualStart(), bridge.exp_indices[i], [value[1], value[w_start + i], value[1 + i]])
124114
end
125115
return
126116
end

test/Bridges/Constraint/relentr_to_exp.jl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using Test
22

3-
import LambertW
43
using MathOptInterface
54
const MOI = MathOptInterface
65
const MOIT = MathOptInterface.Test
@@ -89,9 +88,7 @@ config = MOIT.TestConfig()
8988
else
9089
@test MOI.get(mock, attr, greater[1]) == 2
9190
for i in 1:2
92-
(s_value, t_value) = (value[3 + i], value[1 + i])
93-
r_value = exp(LambertW.lambertw(s_value / (t_value * ℯ))) * -t_value *
94-
@test MOI.get(mock, attr, exps[i]) == [r_value, s_value, t_value]
91+
@test MOI.get(mock, attr, exps[i]) == [value[1], value[3 + i], value[1 + i]]
9592
end
9693
end
9794
end

0 commit comments

Comments
 (0)