@@ -913,15 +913,20 @@ function InfiniteOpt.build_optimizer_model!(
913913
914914 # add variables
915915 for vref in all_variables(model)
916- dvref = dispatch_variable_ref(vref)
917- if dvref isa InfiniteVariableRef # have to handle the infinite variable functional start value
918- inf_var = InfiniteOpt._core_variable_object(dvref)
919- info = InfiniteOpt.TranscriptionOpt._format_infinite_info(inf_var, zeros(length(raw_parameter_refs(dvref))))
916+ if index(vref) isa InfiniteVariableIndex
917+ start = NaN # easy hack
920918 else
921- info = InfiniteOpt._variable_info(dvref)
919+ start = start_value(vref)
920+ start = isnothing(start) ? NaN : start
922921 end
923- new_vref = add_variable(determ_model, ScalarVariable(info),
924- name(dvref)) # TODO update infinite variable names
922+ lb = has_lower_bound(vref) ? lower_bound(vref) : NaN
923+ ub = has_upper_bound(vref) ? upper_bound(vref) : NaN
924+ if is_fixed(vref)
925+ lb = fix_value(vref)
926+ end
927+ info = VariableInfo(!isnan(lb), lb, !isnan(ub), ub, is_fixed(vref), lb,
928+ !isnan(start), start, is_binary(vref), is_integer(vref))
929+ new_vref = add_variable(determ_model, ScalarVariable(info), name(vref))
925930 deterministic_data(determ_model).infvar_to_detvar[vref] = new_vref
926931 end
927932
@@ -934,25 +939,23 @@ function InfiniteOpt.build_optimizer_model!(
934939 end
935940
936941 # add the constraints
937- for cref in all_constraints(model)
938- if !InfiniteOpt._is_info_constraint(cref)
939- constr = constraint_object(cref)
940- new_func = _make_expression(determ_model, constr.func)
941- if new_func isa NonlinearExpression
942- if constr.set isa MOI.LessThan
943- ex = :($new_func <= $(constr.set.upper))
944- elseif constr.set isa MOI.GreaterThan
945- ex = :($new_func >= $(constr.set.lower))
946- else # assume it is MOI.EqualTo
947- ex = :($new_func == $(constr.set.value))
948- end
949- new_cref = add_nonlinear_constraint(determ_model, ex)
950- else
951- new_constr = build_constraint(error, new_func, constr.set)
952- new_cref = add_constraint(determ_model, new_constr, name(cref))
942+ for cref in all_constraints(model, Union{GenericAffExpr, GenericQuadExpr, NLPExpr})
943+ constr = constraint_object(cref)
944+ new_func = _make_expression(determ_model, constr.func)
945+ if new_func isa NonlinearExpression
946+ if constr.set isa MOI.LessThan
947+ ex = :($new_func <= $(constr.set.upper))
948+ elseif constr.set isa MOI.GreaterThan
949+ ex = :($new_func >= $(constr.set.lower))
950+ else # assume it is MOI.EqualTo
951+ ex = :($new_func == $(constr.set.value))
953952 end
954- deterministic_data(determ_model).infconstr_to_detconstr[cref] = new_cref
953+ new_cref = add_nonlinear_constraint(determ_model, ex)
954+ else
955+ new_constr = build_constraint(error, new_func, constr.set)
956+ new_cref = add_constraint(determ_model, new_constr, name(cref))
955957 end
958+ deterministic_data(determ_model).infconstr_to_detconstr[cref] = new_cref
956959 end
957960
958961 # update the status
@@ -1008,7 +1011,7 @@ function InfiniteOpt.optimizer_model_expression(
10081011 expr::JuMP.AbstractJuMPScalar,
10091012 key::Val{DetermKey}
10101013 )
1011- model = optimizer_model(JuMP.owner_model(vref ))
1014+ model = optimizer_model(InfiniteOpt._model_from_expr(expr ))
10121015 return _make_expression(model, expr)
10131016end
10141017
0 commit comments