最終更新 11 months ago

The example is from Scott et al., 2011. Generalized mccormick relaxations. Journal of Global Optimization, 51(4), pp.569-606.

neil revised this gist 11 months ago. Go to revision

No changes

neil revised this gist 11 months ago. Go to revision

No changes

neil revised this gist 11 months ago. Go to revision

1 file changed, 41 insertions

implicit_relaxation.jl(file created)

@@ -0,0 +1,41 @@
1 + using McCormick, BenchmarkTools
2 +
3 + """
4 + Direct relaxation of implicit function
5 + """
6 + function direct_relax(f, x, p)
7 + delta = Inf
8 + while delta > 1e-8
9 + x_prev = x
10 + x = f(x, p)
11 + delta = abs(x_prev.cv - x.cv) + abs(x_prev.cc - x.cc)
12 + end
13 +
14 + return x
15 + end
16 +
17 + """
18 + Faster alternative
19 + """
20 + function fast_direct_relax(f, x, p)
21 + delta = Inf
22 + while delta > 1e-8
23 + x_prev = x
24 + x_m = x.cv + .5 * (x.cc - x.cv)
25 + x = f(x_m, p)
26 + delta = abs(x_prev.cv - x.cv) + abs(x_prev.cc - x.cc)
27 + end
28 +
29 + return x
30 + end
31 +
32 + f(x, p) = (p - (p^3)/6 + (p^5)/120)*x^(-1/2) + 100
33 +
34 + p = MC{1,NS}(1.0, 1.0, Interval(0.5, 5.0))
35 + x = MC{1,NS}(1.0, 1.0)
36 +
37 + res = @btime direct_relax(f, x, p)
38 + println(res) # 342.860 μs (2414 allocations: 96.52 KiB) MC{1, NS}(99.8362536820914, 100.40188539116205, [97.9454, 103.135], [0.0], [0.0], true)
39 +
40 + res = @btime fast_direct_relax(f, x, p)
41 + println(res) # 2.972 μs (301 allocations: 4.75 KiB) MC{1, NS}(99.8675794497822, 100.37248484959062, [97.9679, 103.101], [0.0], [0.0], true)
Newer Older