@@ -667,53 +667,6 @@ function optimize_inner!(model::Optimizer)
667667 return
668668end
669669
670- """
671- _log_solution(model::Optimizer, variables::Vector{MOI.VariableIndex})
672-
673- Log the solution. We don't have a pre-computed point, so compute one from the
674- variable values.
675- """
676- function _log_solution (model:: Optimizer , variables:: Vector{MOI.VariableIndex} )
677- if ! model. silent
678- _, Y = _compute_point (model, variables, model. f)
679- _log_solution (model, Y)
680- end
681- return
682- end
683-
684- """
685- _log_solution(model::Optimizer, variables::Vector{MOI.VariableIndex})
686-
687- Log the solution. We have a pre-computed point.
688- """
689- function _log_solution (model:: Optimizer , Y)
690- if ! model. silent
691- print (_format (model. subproblem_count), " " )
692- for y in Y
693- print (" " , _format (y))
694- end
695- println (" " , _format (time () - model. start_time))
696- end
697- return
698- end
699- """
700- _log_solution(model::Optimizer, msg::String)
701-
702- Log the solution. Assume the subproblem failed to solve.
703- """
704- function _log_solution (model:: Optimizer , msg:: String )
705- if ! model. silent
706- print (_format (model. subproblem_count), " " )
707- print (rpad (msg, 13 * MOI. output_dimension (model. f)))
708- println (" " , _format (time () - model. start_time))
709- end
710- return
711- end
712-
713- _format (x:: Int ) = Printf. @sprintf (" %5d" , x)
714- _format (x:: Float64 ) = Printf. @sprintf (" % .5e" , x)
715- _format (:: Nothing ) = " "
716-
717670function _compute_ideal_point (model:: Optimizer )
718671 for (i, f) in enumerate (MOI. Utilities. eachscalar (model. f))
719672 if _check_premature_termination (model) != = nothing
@@ -822,6 +775,82 @@ function MOI.optimize!(model::Optimizer)
822775 return
823776end
824777
778+ function _print_header (io:: IO , model:: Optimizer )
779+ rule = " -" ^ (7 + 13 * (MOI. output_dimension (model. f) + 1 ))
780+ println (io, rule)
781+ println (io, " MultiObjectiveAlgorithms.jl" )
782+ println (io, rule)
783+ println (
784+ io,
785+ " Algorithm: " ,
786+ replace (
787+ string (typeof (model. algorithm)),
788+ " MultiObjectiveAlgorithms." => " " ,
789+ ),
790+ )
791+ println (io, rule)
792+ print (io, " solve #" )
793+ for i in 1 : MOI. output_dimension (model. f)
794+ print (io, lpad (" Obj. $i " , 13 ))
795+ end
796+ println (io, " Time " )
797+ println (io, rule)
798+ return
799+ end
800+
801+ function _print_footer (io:: IO , model:: Optimizer )
802+ rule = " -" ^ (7 + 13 * (MOI. output_dimension (model. f) + 1 ))
803+ println (io, rule)
804+ println (io, " TerminationStatus: " , model. termination_status)
805+ println (io, " ResultCount: " , length (model. solutions))
806+ println (io, rule)
807+ return
808+ end
809+
810+ """
811+ _log_subproblem_solve(model::Optimizer, variables::Vector{MOI.VariableIndex})
812+
813+ Log the solution. We don't have a pre-computed point, so compute one from the
814+ variable values.
815+ """
816+ function _log_subproblem_solve (model:: Optimizer , arg)
817+ if ! model. silent
818+ _log_subproblem_inner (model, arg)
819+ end
820+ return
821+ end
822+
823+ # Variables; compute the associated Y
824+ function _log_subproblem_inner (model:: Optimizer , x:: Vector{MOI.VariableIndex} )
825+ _, Y = _compute_point (model, x, model. f)
826+ _log_subproblem_solve (model, Y)
827+ return
828+ end
829+
830+ # We have a pre-computed point.
831+ function _log_subproblem_inner (model:: Optimizer , Y:: Vector )
832+ print (_format (model. subproblem_count), " " )
833+ for y in Y
834+ print (" " , _format (y))
835+ end
836+ println (" " , _format (time () - model. start_time))
837+ return
838+ end
839+
840+ # Assume the subproblem failed to solve.
841+ function _log_subproblem_inner (model:: Optimizer , msg:: String )
842+ print (_format (model. subproblem_count), " " )
843+ print (rpad (msg, 13 * MOI. output_dimension (model. f)))
844+ println (" " , _format (time () - model. start_time))
845+ return
846+ end
847+
848+ _format (x:: Int ) = Printf. @sprintf (" %5d" , x)
849+
850+ _format (x:: Float64 ) = Printf. @sprintf (" % .5e" , x)
851+
852+ _format (:: Nothing ) = " "
853+
825854function _optimize! (model:: Optimizer )
826855 model. start_time = time ()
827856 empty! (model. solutions)
@@ -833,18 +862,7 @@ function _optimize!(model::Optimizer)
833862 return
834863 end
835864 if ! model. silent
836- rule = " -" ^ (7 + 13 * (MOI. output_dimension (model. f) + 1 ))
837- println (rule)
838- println (" MultiObjectiveAlgorithms.jl" )
839- println (rule)
840- println (" Algorithm: " , _describe (model. algorithm))
841- println (rule)
842- print (" solve #" )
843- for i in 1 : MOI. output_dimension (model. f)
844- print (lpad (" Obj. $i " , 13 ))
845- end
846- println (" Time " )
847- println (rule)
865+ _print_header (stdout , model)
848866 end
849867 # We need to clear the ideal point prior to starting the solve. Algorithms
850868 # may update this during the solve, otherwise we will update it at the end.
@@ -857,10 +875,7 @@ function _optimize!(model::Optimizer)
857875 _sort! (model. solutions, MOI. get (model, MOI. ObjectiveSense ()))
858876 end
859877 if ! model. silent
860- println (rule)
861- println (" Terminating with status: " , status)
862- println (" Number of non-dominated solutions: " , length (model. solutions))
863- println (rule)
878+ _print_footer (stdout , model)
864879 end
865880 if MOI. get (model, ComputeIdealPoint ())
866881 _compute_ideal_point (model)
0 commit comments