-
Notifications
You must be signed in to change notification settings - Fork 35
/
tools.jl
96 lines (78 loc) · 2.49 KB
/
tools.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
91
92
93
94
95
96
export has_bounds, bound_constrained, unconstrained
export linearly_constrained, equality_constrained, inequality_constrained
export has_equalities, has_inequalities
for field in fieldnames(NLPModelMeta)
meth = Symbol("get_", field)
@eval begin
@doc """
$($meth)(nlp)
$($meth)(meta)
Return the value $($(QuoteNode(field))) from meta or nlp.meta.
"""
$meth(meta::NLPModelMeta) = getproperty(meta, $(QuoteNode(field)))
end
@eval $meth(nlp::AbstractNLPModel) = $meth(nlp.meta)
@eval export $meth
end
"""
has_bounds(nlp)
has_bounds(meta)
Returns whether the problem has bounds on the variables.
"""
has_bounds(meta::NLPModelMeta) = length(meta.ifree) < meta.nvar
"""
bound_constrained(nlp)
bound_constrained(meta)
Returns whether the problem has bounds on the variables and no other constraints.
"""
bound_constrained(meta::NLPModelMeta) = meta.ncon == 0 && has_bounds(meta)
"""
unconstrained(nlp)
unconstrained(meta)
Returns whether the problem in unconstrained.
"""
unconstrained(meta::NLPModelMeta) = meta.ncon == 0 && !has_bounds(meta)
"""
linearly_constrained(nlp)
linearly_constrained(meta)
Returns whether the problem's constraints are known to be all linear.
"""
linearly_constrained(meta::NLPModelMeta) = meta.nlin == meta.ncon > 0
"""
equality_constrained(nlp)
equality_constrained(meta)
Returns whether the problem's constraints are all equalities.
Unconstrained problems return false.
"""
equality_constrained(meta::NLPModelMeta) = length(meta.jfix) == meta.ncon > 0
"""
inequality_constrained(nlp)
inequality_constrained(meta)
Returns whether the problem's constraints are all inequalities.
Unconstrained problems return true.
"""
inequality_constrained(meta::NLPModelMeta) = meta.ncon > 0 && length(meta.jfix) == 0
"""
has_equalities(nlp)
Returns whether the problem has constraints and at least one of them is an equality.
Unconstrained problems return false.
"""
has_equalities(meta::NLPModelMeta) = meta.ncon ≥ length(meta.jfix) > 0
"""
has_inequalities(nlp)
Returns whether the problem has constraints and at least one of them is an inequality.
Unconstrained problems return false.
"""
has_inequalities(meta::NLPModelMeta) = meta.ncon > 0 && meta.ncon > length(meta.jfix)
for meth in [
:has_bounds,
:bound_constrained,
:unconstrained,
:linearly_constrained,
:equality_constrained,
:inequality_constrained,
:has_equalities,
:has_inequalities,
]
@eval $meth(nlp::AbstractNLPModel) = $meth(nlp.meta)
end