@@ -498,14 +498,23 @@ function MOI.add_constraint(
498498 if _is_fixed (model, x)
499499 error (" Variable $x is fixed. Cannot also set upper bound." )
500500 end
501- ub = _clamp_inf (set. upper)
502501 model. variable_info[x. value]. has_upper_bound = true
503- KNITRO. @_checked KNITRO. KN_set_var_upbnd (model, _c_column (x), ub)
504502 ci = MOI. ConstraintIndex {MOI.VariableIndex,MOI.LessThan{Float64}} (x. value)
505503 model. constraint_mapping[ci] = convert (Cint, x. value)
504+ MOI. set (model, MOI. ConstraintSet (), ci, set)
506505 return ci
507506end
508507
508+ function MOI. set (
509+ model:: Optimizer ,
510+ :: MOI.ConstraintSet ,
511+ ci:: MOI.ConstraintIndex{MOI.VariableIndex,MOI.LessThan{Float64}} ,
512+ s:: MOI.LessThan{Float64} ,
513+ )
514+ KNITRO. @_checked KNITRO. KN_set_var_upbnd (model, ci. value - 1 , _clamp_inf (s. upper))
515+ return
516+ end
517+
509518# ##
510519# ## MOI.VariableIndex -in- GreaterThan
511520# ##
@@ -534,14 +543,23 @@ function MOI.add_constraint(
534543 if _is_fixed (model, x)
535544 error (" Variable $x is fixed. Cannot also set lower bound." )
536545 end
537- lb = _clamp_inf (set. lower)
538546 model. variable_info[x. value]. has_lower_bound = true
539- KNITRO. @_checked KNITRO. KN_set_var_lobnd (model, _c_column (x), lb)
540547 ci = MOI. ConstraintIndex {MOI.VariableIndex,MOI.GreaterThan{Float64}} (x. value)
541548 model. constraint_mapping[ci] = convert (Cint, x. value)
549+ MOI. set (model, MOI. ConstraintSet (), ci, set)
542550 return ci
543551end
544552
553+ function MOI. set (
554+ model:: Optimizer ,
555+ :: MOI.ConstraintSet ,
556+ ci:: MOI.ConstraintIndex{MOI.VariableIndex,MOI.GreaterThan{Float64}} ,
557+ s:: MOI.GreaterThan{Float64} ,
558+ )
559+ KNITRO. @_checked KNITRO. KN_set_var_lobnd (model, ci. value - 1 , _clamp_inf (s. lower))
560+ return
561+ end
562+
545563# ##
546564# ## MOI.VariableIndex -in- Interval
547565# ##
@@ -570,17 +588,25 @@ function MOI.add_constraint(
570588 if _is_fixed (model, x)
571589 error (" Variable $x is fixed. Cannot also set lower bound." )
572590 end
573- lb = _clamp_inf (set. lower)
574- ub = _clamp_inf (set. upper)
575591 model. variable_info[x. value]. has_lower_bound = true
576592 model. variable_info[x. value]. has_upper_bound = true
577- KNITRO. @_checked KNITRO. KN_set_var_lobnd (model, _c_column (x), lb)
578- KNITRO. @_checked KNITRO. KN_set_var_upbnd (model, _c_column (x), ub)
579593 ci = MOI. ConstraintIndex {MOI.VariableIndex,MOI.Interval{Float64}} (x. value)
580594 model. constraint_mapping[ci] = convert (Cint, x. value)
595+ MOI. set (model, MOI. ConstraintSet (), ci, set)
581596 return ci
582597end
583598
599+ function MOI. set (
600+ model:: Optimizer ,
601+ :: MOI.ConstraintSet ,
602+ ci:: MOI.ConstraintIndex{MOI.VariableIndex,MOI.Interval{Float64}} ,
603+ s:: MOI.Interval{Float64} ,
604+ )
605+ KNITRO. @_checked KNITRO. KN_set_var_lobnd (model, ci. value - 1 , _clamp_inf (s. lower))
606+ KNITRO. @_checked KNITRO. KN_set_var_upbnd (model, ci. value - 1 , _clamp_inf (s. upper))
607+ return
608+ end
609+
584610# ##
585611# ## MOI.VariableIndex -in- EqualTo
586612# ##
@@ -612,14 +638,23 @@ function MOI.add_constraint(
612638 if _is_fixed (model, x)
613639 error (" Variable $x is already fixed." )
614640 end
615- eqv = _clamp_inf (set. value)
616641 model. variable_info[x. value]. is_fixed = true
617- KNITRO. @_checked KNITRO. KN_set_var_fxbnd (model, _c_column (x), eqv)
618642 ci = MOI. ConstraintIndex {MOI.VariableIndex,MOI.EqualTo{Float64}} (x. value)
619643 model. constraint_mapping[ci] = convert (Cint, x. value)
644+ MOI. set (model, MOI. ConstraintSet (), ci, set)
620645 return ci
621646end
622647
648+ function MOI. set (
649+ model:: Optimizer ,
650+ :: MOI.ConstraintSet ,
651+ ci:: MOI.ConstraintIndex{MOI.VariableIndex,MOI.EqualTo{Float64}} ,
652+ s:: MOI.EqualTo{Float64} ,
653+ )
654+ KNITRO. @_checked KNITRO. KN_set_var_fxbnd (model, ci. value - 1 , _clamp_inf (s. value))
655+ return
656+ end
657+
623658# ##
624659# ## ConstraintDualStart :: VariableIndex -in- {LessThan,GreaterThan,EqualTo,Interval}
625660# ##
@@ -722,32 +757,62 @@ function MOI.add_constraint(
722757 p = Ref {Cint} (0 )
723758 KNITRO. @_checked KNITRO. KN_add_con (model, p)
724759 num_cons = p[]
725- # Add bound to constraint.
726- if isa (set, MOI. LessThan{Float64})
727- val = _clamp_inf (set. upper)
728- KNITRO. @_checked KNITRO. KN_set_con_upbnd (model, num_cons, val)
729- elseif isa (set, MOI. GreaterThan{Float64})
730- val = _clamp_inf (set. lower)
731- KNITRO. @_checked KNITRO. KN_set_con_lobnd (model, num_cons, val)
732- elseif isa (set, MOI. EqualTo{Float64})
733- val = _clamp_inf (set. value)
734- KNITRO. @_checked KNITRO. KN_set_con_eqbnd (model, num_cons, val)
735- else
736- @assert set isa MOI. Interval{Float64}
737- # Add upper bound.
738- lb, ub = _clamp_inf (set. lower), _clamp_inf (set. upper)
739- KNITRO. @_checked KNITRO. KN_set_con_lobnd (model, num_cons, lb)
740- KNITRO. @_checked KNITRO. KN_set_con_upbnd (model, num_cons, ub)
741- end
760+ ci = MOI. ConstraintIndex {F,S} (num_cons)
761+ model. constraint_mapping[ci] = num_cons
762+ MOI. set (model, MOI. ConstraintSet (), ci, set)
742763 nnz, columns, coefficients = _canonical_linear_reduction (func)
743764 KNITRO. @_checked (
744765 KNITRO. KN_add_con_linear_struct_one (model, nnz, num_cons, columns, coefficients),
745766 )
746- ci = MOI. ConstraintIndex {F,S} (num_cons)
747- model. constraint_mapping[ci] = num_cons
748767 return ci
749768end
750769
770+ function MOI. set (
771+ model:: Optimizer ,
772+ :: MOI.ConstraintSet ,
773+ ci:: MOI.ConstraintIndex{F,MOI.GreaterThan{Float64}} ,
774+ s:: MOI.GreaterThan{Float64} ,
775+ ) where {F<: Union{MOI.ScalarAffineFunction{Float64},MOI.ScalarQuadraticFunction{Float64}} }
776+ num_cons = model. constraint_mapping[ci]
777+ KNITRO. @_checked KNITRO. KN_set_con_lobnd (model, num_cons, _clamp_inf (s. lower))
778+ return
779+ end
780+
781+ function MOI. set (
782+ model:: Optimizer ,
783+ :: MOI.ConstraintSet ,
784+ ci:: MOI.ConstraintIndex{F,MOI.LessThan{Float64}} ,
785+ s:: MOI.LessThan{Float64} ,
786+ ) where {F<: Union{MOI.ScalarAffineFunction{Float64},MOI.ScalarQuadraticFunction{Float64}} }
787+ num_cons = model. constraint_mapping[ci]
788+ KNITRO. @_checked KNITRO. KN_set_con_upbnd (model, num_cons, _clamp_inf (s. upper))
789+ return
790+ end
791+
792+ function MOI. set (
793+ model:: Optimizer ,
794+ :: MOI.ConstraintSet ,
795+ ci:: MOI.ConstraintIndex{F,MOI.Interval{Float64}} ,
796+ s:: MOI.Interval{Float64} ,
797+ ) where {F<: Union{MOI.ScalarAffineFunction{Float64},MOI.ScalarQuadraticFunction{Float64}} }
798+ num_cons = model. constraint_mapping[ci]
799+ lb, ub = _clamp_inf (s. lower), _clamp_inf (s. upper)
800+ KNITRO. @_checked KNITRO. KN_set_con_lobnd (model, num_cons, lb)
801+ KNITRO. @_checked KNITRO. KN_set_con_upbnd (model, num_cons, ub)
802+ return
803+ end
804+
805+ function MOI. set (
806+ model:: Optimizer ,
807+ :: MOI.ConstraintSet ,
808+ ci:: MOI.ConstraintIndex{F,MOI.EqualTo{Float64}} ,
809+ s:: MOI.EqualTo{Float64} ,
810+ ) where {F<: Union{MOI.ScalarAffineFunction{Float64},MOI.ScalarQuadraticFunction{Float64}} }
811+ num_cons = model. constraint_mapping[ci]
812+ KNITRO. @_checked KNITRO. KN_set_con_eqbnd (model, num_cons, _clamp_inf (s. value))
813+ return
814+ end
815+
751816function MOI. supports (
752817 :: Optimizer ,
753818 :: MOI.ConstraintDualStart ,
@@ -807,30 +872,15 @@ function MOI.add_constraint(
807872 p = Ref {Cint} (0 )
808873 KNITRO. @_checked KNITRO. KN_add_con (model, p)
809874 num_cons = p[]
810- # Add upper bound.
811- if isa (set, MOI. LessThan{Float64})
812- val = _clamp_inf (set. upper)
813- KNITRO. @_checked KNITRO. KN_set_con_upbnd (model, num_cons, val)
814- elseif isa (set, MOI. GreaterThan{Float64})
815- val = _clamp_inf (set. lower)
816- KNITRO. @_checked KNITRO. KN_set_con_lobnd (model, num_cons, val)
817- elseif isa (set, MOI. EqualTo{Float64})
818- val = _clamp_inf (set. value)
819- KNITRO. @_checked KNITRO. KN_set_con_eqbnd (model, num_cons, val)
820- elseif isa (set, MOI. Interval{Float64})
821- lb = _clamp_inf (set. lower)
822- ub = _clamp_inf (set. upper)
823- KNITRO. @_checked KNITRO. KN_set_con_lobnd (model, num_cons, lb)
824- KNITRO. @_checked KNITRO. KN_set_con_upbnd (model, num_cons, ub)
825- end
875+ ci = MOI. ConstraintIndex {typeof(func),typeof(set)} (num_cons)
876+ model. constraint_mapping[ci] = num_cons
877+ MOI. set (model, MOI. ConstraintSet (), ci, set)
826878 nnz, columns, coefficients = _canonical_linear_reduction (func)
827879 KNITRO. @_checked (
828880 KNITRO. KN_add_con_linear_struct_one (model, nnz, num_cons, columns, coefficients),
829881 )
830882 nnz, I, J, V = _canonical_quadratic_reduction (func)
831883 KNITRO. @_checked KNITRO. KN_add_con_quadratic_struct_one (model, nnz, num_cons, I, J, V)
832- ci = MOI. ConstraintIndex {typeof(func),typeof(set)} (num_cons)
833- model. constraint_mapping[ci] = num_cons
834884 return ci
835885end
836886
@@ -1397,6 +1447,8 @@ function MOI.optimize!(model::Optimizer)
13971447 end
13981448 model. nlp_loaded = true
13991449 end
1450+ empty! (model. x)
1451+ empty! (model. lambda)
14001452 KNITRO. KN_solve (model. inner)
14011453 model. number_solved += 1
14021454 return
0 commit comments