Naposledy aktivní 11 months ago

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

neil revidoval tento gist 11 months ago. Přejít na revizi

Žádné změny

neil revidoval tento gist 11 months ago. Přejít na revizi

Žádné změny

neil revidoval tento gist 11 months ago. Přejít na revizi

1 file changed, 41 insertions

implicit_relaxation.jl(vytvořil soubor)

@@ -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)
Novější Starší