@@ -51,7 +51,58 @@ HighsStatus solveLpHiPdlp(const HighsOptions& options, HighsTimer& timer,
5151
5252 // --- Print Summary ---
5353 logger.print_summary (pdlp.GetResults (), pdlp.GetIterationCount (), total_timer.read ());
54- return HighsStatus::kError ;
54+
55+ highs_info.pdlp_iteration_count = pdlp.GetIterationCount ();
56+
57+ model_status = HighsModelStatus::kUnknown ;
58+ highs_solution.clear ();
59+ highs_basis.valid = false ;
60+
61+ const TerminationStatus termination_status = pdlp.GetResults ().term_code ;
62+ switch (termination_status) {
63+ case TerminationStatus::OPTIMAL: {
64+ model_status = HighsModelStatus::kOptimal ;
65+ break ;
66+ }
67+ case TerminationStatus::INFEASIBLE: {
68+ assert (111 == 222 );
69+ model_status = HighsModelStatus::kInfeasible ;
70+ return HighsStatus::kOk ;
71+ break ;
72+ }
73+ case TerminationStatus::UNBOUNDED: {
74+ assert (111 == 333 );
75+ model_status = HighsModelStatus::kUnbounded ;
76+ return HighsStatus::kOk ;
77+ break ;
78+ }
79+ case TerminationStatus::TIMEOUT: {
80+ assert (111 == 444 );
81+ model_status = HighsModelStatus::kTimeLimit ;
82+ break ;
83+ }
84+ case TerminationStatus::WARNING:
85+ case TerminationStatus::FEASIBLE: {
86+ assert (111 == 555 );
87+ model_status = HighsModelStatus::kUnknown ;
88+ return HighsStatus::kError ;
89+ }
90+ default :
91+ assert (termination_status == TerminationStatus::ERROR);
92+ return HighsStatus::kError ;
93+ }
94+ assert (termination_status == TerminationStatus::OPTIMAL ||
95+ termination_status == TerminationStatus::TIMEOUT);
96+ highs_solution.col_value = x;
97+ highs_solution.col_value .resize (lp.num_col_ );
98+ highs_solution.row_dual = y;
99+ lp.a_matrix_ .product (highs_solution.row_value , highs_solution.col_value );
100+ lp.a_matrix_ .productTranspose (highs_solution.col_dual , highs_solution.row_dual );
101+ for (HighsInt iCol = 0 ; iCol < lp.num_col_ ; iCol++)
102+ highs_solution.col_dual [iCol] = lp.col_cost_ [iCol] - highs_solution.col_dual [iCol];
103+ highs_solution.value_valid = true ;
104+ highs_solution.dual_valid = true ;
105+ return HighsStatus::kOk ;
55106}
56107
57108void getHiPpdlpParamsFromOptions (const HighsOptions& options, HighsTimer& timer, PrimalDualParams& params) {
0 commit comments