Ostatnio aktywny 11 months ago

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

neil zrewidował ten Gist 11 months ago. Przejdź do rewizji

Brak zmian

neil zrewidował ten Gist 11 months ago. Przejdź do rewizji

Brak zmian

neil zrewidował ten Gist 11 months ago. Przejdź do rewizji

1 file changed, 41 insertions

implicit_relaxation.jl(stworzono plik)

@@ -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)
Nowsze Starsze