@@ -369,9 +369,13 @@ struct HighsOptionsStruct {
369369 std::string hipo_system;
370370
371371 // Options for PDLP solver
372- bool pdlp_scaling ;
372+ HighsInt pdlp_features_off ;
373373 HighsInt pdlp_iteration_limit;
374- HighsInt pdlp_e_restart_method;
374+ HighsInt pdlp_scaling_mode;
375+ HighsInt pdlp_ruiz_iterations;
376+ HighsInt pdlp_restart_strategy;
377+ HighsInt pdlp_cupdlpc_restart_method;
378+ HighsInt pdlp_step_size_strategy;
375379 double pdlp_optimality_tolerance;
376380
377381 // Options for QP solver
@@ -536,9 +540,13 @@ struct HighsOptionsStruct {
536540 ipm_optimality_tolerance(0.0 ),
537541 ipm_iteration_limit(0 ),
538542 hipo_system(" " ),
539- pdlp_scaling( false ),
543+ pdlp_features_off( 0 ),
540544 pdlp_iteration_limit(0 ),
541- pdlp_e_restart_method(0 ),
545+ pdlp_scaling_mode(0 ),
546+ pdlp_ruiz_iterations(0 ),
547+ pdlp_restart_strategy(0 ),
548+ pdlp_cupdlpc_restart_method(0 ),
549+ pdlp_step_size_strategy(0 ),
542550 pdlp_optimality_tolerance(0.0 ),
543551 qp_iteration_limit(0 ),
544552 qp_nullspace_limit(0 ),
@@ -1260,20 +1268,48 @@ class HighsOptions : public HighsOptionsStruct {
12601268 advanced, &hipo_system, kHighsChooseString );
12611269 records.push_back (record_string);
12621270
1263- record_bool = new OptionRecordBool (
1264- " pdlp_scaling" , " Scaling option for PDLP solver: Default = true" ,
1265- advanced, &pdlp_scaling, true );
1266- records.push_back (record_bool);
1271+ record_int = new OptionRecordInt (
1272+ " pdlp_features_off" ,
1273+ " Mask for switching PDLP features off: 1 => Scaling; 2 => Restart; 4 "
1274+ " => AdaptiveStepSize" ,
1275+ advanced, &pdlp_features_off, kPdlpAllFeaturesOn , kPdlpAllFeaturesOn ,
1276+ kPdlpAllFeaturesOff );
1277+ records.push_back (record_int);
12671278
12681279 record_int = new OptionRecordInt (
12691280 " pdlp_iteration_limit" , " Iteration limit for PDLP solver" , advanced,
12701281 &pdlp_iteration_limit, 0 , kHighsIInf , kHighsIInf );
12711282 records.push_back (record_int);
12721283
1273- record_int = new OptionRecordInt (" pdlp_e_restart_method" ,
1274- " Restart mode for PDLP solver: 0 => none; "
1284+ record_int = new OptionRecordInt (" pdlp_scaling_mode" ,
1285+ " Scaling mode for PDLP solver (default = "
1286+ " 5): 1 => Ruiz; 2 => L2; 4 => PC" ,
1287+ advanced, &pdlp_scaling_mode, kPdlpScalingMin , kPdlpScalingRuiz +kPdlpScalingPC , kPdlpStepSizeStrategyMax );
1288+ records.push_back (record_int);
1289+
1290+ record_int = new OptionRecordInt (" pdlp_ruiz_iterations" ,
1291+ " Number of Ruiz scaling iteraitons for PDLP solver" ,
1292+ advanced, &pdlp_ruiz_iterations, 0 , 10 , kHighsIInf );
1293+ records.push_back (record_int);
1294+
1295+ record_int = new OptionRecordInt (" pdlp_restart_strategy" ,
1296+ " Restart strategy for PDLP solver: 0 => off; "
1297+ " 1 => fixed; 2 => adaptive" ,
1298+ advanced, &pdlp_restart_strategy,
1299+ kPdlpRestartStrategyMin , kPdlpRestartStrategyOff , kPdlpRestartStrategyMax );
1300+ records.push_back (record_int);
1301+
1302+ record_int = new OptionRecordInt (" pdlp_cupdlpc_restart_method" ,
1303+ " Restart mode for cuPDLP-C solver: 0 => none; "
12751304 " 1 => GPU (default); 2 => CPU " ,
1276- advanced, &pdlp_e_restart_method, 0 , 1 , 2 );
1305+ advanced, &pdlp_cupdlpc_restart_method, 0 , 1 , 2 );
1306+ records.push_back (record_int);
1307+
1308+ record_int = new OptionRecordInt (" pdlp_step_size_strategy" ,
1309+ " Step size strategy for PDLP solver: 0 => fixed; "
1310+ " 1 => adaptive; 2 => Malitsky-Pock" ,
1311+ advanced, &pdlp_step_size_strategy,
1312+ kPdlpStepSizeStrategyMin , kPdlpStepSizeStrategyFixed , kPdlpRestartStrategyMax );
12771313 records.push_back (record_int);
12781314
12791315 record_double = new OptionRecordDouble (
0 commit comments