Dernière activité 3 months ago

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

neil a révisé ce gist 3 months ago. Aller à la révision

Aucun changement

neil a révisé ce gist 3 months ago. Aller à la révision

Aucun changement

neil a révisé ce gist 3 months ago. Aller à la révision

1 file changed, 41 insertions

implicit_relaxation.jl(fichier créé)

@@ -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)
Plus récent Plus ancien