|
1 | | -function luksan_vlcek_obj(x, i) |
2 | | - return 100 * (x[i-1]^2 - x[i])^2 + (x[i-1] - 1)^2 |
| 1 | +function luksan_vlcek_obj(x, i, j) |
| 2 | + return 100 * (x[i-1, j]^2 - x[i, j])^2 + (x[i-1, j] - 1)^2 |
3 | 3 | end |
4 | 4 |
|
5 | | -function luksan_vlcek_con(x, i) |
6 | | - return 3x[i+1]^3 + 2 * x[i+2] - 5 + sin(x[i+1] - x[i+2])sin(x[i+1] + x[i+2]) + 4x[i+1] - |
7 | | - x[i]exp(x[i] - x[i+1]) - 3 |
| 5 | +function luksan_vlcek_con1(x, i, j) |
| 6 | + return 3x[i+1, j]^3 + 2 * x[i+2, j] - 5 |
| 7 | +end |
| 8 | +function luksan_vlcek_con2(x, i, j) |
| 9 | + return sin(x[i+1, j] - x[i+2, j])sin(x[i+1, j] + x[i+2, j]) + 4x[i+1, j] - |
| 10 | + x[i, j]exp(x[i, j] - x[i+1, j]) - 3 |
8 | 11 | end |
9 | 12 |
|
10 | 13 | function luksan_vlcek_x0(i) |
11 | 14 | return mod(i, 2) == 1 ? -1.2 : 1.0 |
12 | 15 | end |
13 | 16 |
|
14 | | -function _exa_luksan_vlcek_model(backend, N) |
| 17 | +function _exa_luksan_vlcek_model(backend, N; M = 1) |
15 | 18 |
|
16 | 19 | c = ExaCore(backend = backend) |
17 | | - x = variable(c, N; start = (luksan_vlcek_x0(i) for i = 1:N)) |
18 | | - s = constraint(c, luksan_vlcek_con(x, i) for i = 1:N-2) |
19 | | - objective(c, luksan_vlcek_obj(x, i) for i = 2:N) |
| 20 | + x = variable(c, N, M; start = [luksan_vlcek_x0(i) for i = 1:N, j=1:M]) |
| 21 | + s = constraint(c, luksan_vlcek_con1(x, i, j) for i = 1:N-2, j=1:M) |
| 22 | + constraint!(c, s, (i,j) => luksan_vlcek_con1(x, i, j) for i = 1:N-2, j=1:M) |
| 23 | + objective(c, luksan_vlcek_obj(x, i, j) for i = 2:N, j=1:M) |
20 | 24 |
|
21 | 25 | return ExaModel(c; prod = true), (x,), (s,) |
22 | 26 | end |
23 | 27 |
|
24 | | -function exa_luksan_vlcek_model(backend, N) |
25 | | - m, vars, cons = _exa_luksan_vlcek_model(backend, N) |
| 28 | +function exa_luksan_vlcek_model(backend, N; M = 1) |
| 29 | + m, vars, cons = _exa_luksan_vlcek_model(backend, N;M = M) |
26 | 30 | return m |
27 | 31 | end |
28 | 32 |
|
29 | | -function _jump_luksan_vlcek_model(backend, N) |
| 33 | +function _jump_luksan_vlcek_model(backend, N; M = 1) |
30 | 34 | jm = JuMP.Model() |
31 | 35 |
|
32 | | - JuMP.@variable(jm, x[i = 1:N], start = mod(i, 2) == 1 ? -1.2 : 1.0) |
| 36 | + JuMP.@variable(jm, x[i = 1:N, j=1:M], start = mod(i, 2) == 1 ? -1.2 : 1.0) |
33 | 37 | JuMP.@NLconstraint( |
34 | 38 | jm, |
35 | | - s[i = 1:N-2], |
36 | | - 3x[i+1]^3 + 2x[i+2] - 5 + sin(x[i+1] - x[i+2])sin(x[i+1] + x[i+2]) + 4x[i+1] - |
37 | | - x[i]exp(x[i] - x[i+1]) - 3 == 0.0 |
| 39 | + s[i = 1:N-2, j=1:M], |
| 40 | + 3x[i+1,j]^3 + 2x[i+2,j] - 5 + sin(x[i+1,j] - x[i+2,j])sin(x[i+1,j] + x[i+2,j]) + 4x[i+1,j] - |
| 41 | + x[i,j]exp(x[i,j] - x[i+1,j]) - 3 == 0.0 |
38 | 42 | ) |
39 | | - JuMP.@NLobjective(jm, Min, sum(100(x[i-1]^2 - x[i])^2 + (x[i-1] - 1)^2 for i = 2:N)) |
| 43 | + JuMP.@NLobjective(jm, Min, sum(100(x[i-1,j]^2 - x[i,j])^2 + (x[i-1,j] - 1)^2 for i = 2:N, j=1:M)) |
40 | 44 |
|
41 | 45 | return jm, (x,), (s,) |
42 | 46 | end |
43 | 47 |
|
44 | | -function jump_luksan_vlcek_model(backend, N) |
45 | | - jm, vars, cons = _jump_luksan_vlcek_model(backend, N) |
| 48 | +function jump_luksan_vlcek_model(backend, N; M = 1) |
| 49 | + jm, vars, cons = _jump_luksan_vlcek_model(backend, N; M = M) |
46 | 50 | return MathOptNLPModel(jm) |
47 | 51 | end |
0 commit comments