@@ -15,10 +15,11 @@ function Base.write(io::IO, model::Model)
15
15
variables, constraints = NamedTuple[], NamedTuple[]
16
16
name_map = _write_variables (variables, model)
17
17
objective = _write_nlpblock (constraints, model, name_map)
18
+ has_scalar_nonlinear = false
18
19
if objective === nothing
19
- objective = _write_objective (model, name_map)
20
+ objective, has_scalar_nonlinear = _write_objective (model, name_map)
20
21
end
21
- _write_constraints (constraints, model, name_map)
22
+ has_scalar_nonlinear |= _write_constraints (constraints, model, name_map)
22
23
object = (;
23
24
name = " MathOptFormat Model" ,
24
25
version = (
@@ -29,6 +30,9 @@ function Base.write(io::IO, model::Model)
29
30
objective = objective,
30
31
constraints = constraints,
31
32
)
33
+ if has_scalar_nonlinear
34
+ object = (; has_scalar_nonlinear = true , object... )
35
+ end
32
36
JSON3. write (io, object)
33
37
return
34
38
end
@@ -122,27 +126,30 @@ function _write_objective(
122
126
)
123
127
sense = MOI. get (model, MOI. ObjectiveSense ())
124
128
if sense == MOI. FEASIBILITY_SENSE
125
- return (; :sense => moi_to_object (sense))
129
+ return (; :sense => moi_to_object (sense)), false
126
130
end
127
131
F = MOI. get (model, MOI. ObjectiveFunctionType ())
128
132
objective_function = MOI. get (model, MOI. ObjectiveFunction {F} ())
129
- return (;
133
+ object = (;
130
134
:sense => moi_to_object (sense),
131
135
:function => moi_to_object (objective_function, name_map),
132
136
)
137
+ return object, (F == MOI. ScalarNonlinearFunction)
133
138
end
134
139
135
140
function _write_constraints (
136
141
constraints:: Vector{NamedTuple} ,
137
142
model:: Model ,
138
143
name_map:: Dict{MOI.VariableIndex,String} ,
139
144
)
145
+ has_scalar_nonlinear = false
140
146
for (F, S) in MOI. get (model, MOI. ListOfConstraintTypesPresent ())
147
+ has_scalar_nonlinear |= (F == MOI. ScalarNonlinearFunction)
141
148
for index in MOI. get (model, MOI. ListOfConstraintIndices {F,S} ())
142
149
push! (constraints, moi_to_object (index, model, name_map))
143
150
end
144
151
end
145
- return
152
+ return has_scalar_nonlinear
146
153
end
147
154
148
155
"""
0 commit comments