-
Notifications
You must be signed in to change notification settings - Fork 48
/
hs102.jl
90 lines (79 loc) · 2.78 KB
/
hs102.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# Hock and Schittkowski problem number 102.
#
# Source:
# Problem 102 in
# W. Hock and K. Schittkowski,
# Test examples for nonlinear programming codes,
# Lectures Notes in Economics and Mathematical Systems 187,
# Springer Verlag, Heidelberg, 1981.
#
# classification PPR-AN-7-6
#
# A. Montoison, Montreal, 05/2018.
export hs102
"HS102 model"
function hs102(args...; kwargs...)
nlp = Model()
a = 0.125
lvar = [0.1 * ones(6); 0.01]
@variable(nlp, lvar[i] ≤ x[i = 1:7] ≤ 10, start = 6)
exposant_f = Array{Float64}(undef, 4, 7)
exposant_f[1, :] = [1, -1, 0, 2, 0, -3, a]
exposant_f[2, :] = [-1, -2, 1, 1, -1, 0, -0.5]
exposant_f[3, :] = [-2, 1, 0, -1, -2, 1, 0]
exposant_f[4, :] = [2, 2, -1, 0, 0.5, -2, 1]
@NLexpression(
nlp,
f,
10 * prod(x[i]^exposant_f[1, i] for i = 1:7) +
15 * prod(x[i]^exposant_f[2, i] for i = 1:7) +
20 * prod(x[i]^exposant_f[3, i] for i = 1:7) +
25 * prod(x[i]^exposant_f[4, i] for i = 1:7)
)
exposant_c1 = Array{Float64}(undef, 3, 7)
exposant_c1[1, :] = [0.5, 0, -1, 0, 0, -2, 1]
exposant_c1[2, :] = [3, 1, -2, 0, 0, 1, 0.5]
exposant_c1[3, :] = [0, -1, 1, -0.5, 0, 2 / 3, 1 / 4]
@NLconstraint(
nlp,
1 - 0.5 * prod(x[i]^exposant_c1[1, i] for i = 1:7) -
0.7 * prod(x[i]^exposant_c1[2, i] for i = 1:7) -
0.2 * prod(x[i]^exposant_c1[3, i] for i = 1:7) ≥ 0
)
exposant_c2 = Array{Float64}(undef, 3, 7)
exposant_c2[1, :] = [-0.5, 1, -1, 0, -1, 1, 0]
exposant_c2[2, :] = [0, 0, 1, -1, -1, 2, 0]
exposant_c2[3, :] = [-1, 0.5, 0, -2, -1, 1 / 3, 0]
@NLconstraint(
nlp,
1 - 1.3 * prod(x[i]^exposant_c2[1, i] for i = 1:7) -
0.8 * prod(x[i]^exposant_c2[2, i] for i = 1:7) -
3.1 * prod(x[i]^exposant_c2[3, i] for i = 1:7) ≥ 0
)
exposant_c3 = Array{Float64}(undef, 4, 7)
exposant_c3[1, :] = [1, 0, -1.5, 0, 1, -1, 1 / 3]
exposant_c3[2, :] = [0, 1, -0.5, 0, 1, -1, -0.5]
exposant_c3[3, :] = [-1, 1, 0.5, 0, 1, 0, 0]
exposant_c3[4, :] = [0, -2, 1, 0, 1, -1, 1]
@NLconstraint(
nlp,
1 - 2 * prod(x[i]^exposant_c3[1, i] for i = 1:7) -
0.1 * prod(x[i]^exposant_c3[2, i] for i = 1:7) - 1 * prod(x[i]^exposant_c3[3, i] for i = 1:7) -
0.65 * prod(x[i]^exposant_c3[4, i] for i = 1:7) ≥ 0
)
exposant_c4 = Array{Float64}(undef, 4, 7)
exposant_c4[1, :] = [-2, 1, 0, -1, 0.5, 0, 1 / 3]
exposant_c4[2, :] = [0.5, 2, 1, 1 / 3, -2 / 3, 0, 1 / 4]
exposant_c4[3, :] = [-3, -2, 1, 0, 1, 0, 3 / 4]
exposant_c4[4, :] = [0, 0, -2, 1, 0, 0, 0.5]
@NLconstraint(
nlp,
1 - 0.2 * prod(x[i]^exposant_c4[1, i] for i = 1:7) -
0.3 * prod(x[i]^exposant_c4[2, i] for i = 1:7) -
0.4 * prod(x[i]^exposant_c4[3, i] for i = 1:7) -
0.5 * prod(x[i]^exposant_c4[4, i] for i = 1:7) ≥ 0
)
@NLconstraint(nlp, 100 ≤ f ≤ 3000)
@NLobjective(nlp, Min, f)
return nlp
end