Skip to content

Commit e070929

Browse files
committed
Add option for hipo_scaling
1 parent e5042b4 commit e070929

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

docs/src/options/definitions.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,11 @@
445445
- Type: boolean
446446
- Default: false
447447

448+
## hipo\_scaling
449+
- HiPO scaling strategy: "curtis-reid" or "norm"
450+
- Type: string
451+
- Default: "curtis-reid"
452+
448453
## pdlp\_scaling
449454
- Scaling option for PDLP solver: Default = true
450455
- Type: boolean

highs/ipm/IpxWrapper.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,17 @@ HighsStatus solveLpHipo(const HighsOptions& options, HighsTimer& timer,
552552
return HighsStatus::kError;
553553
}
554554

555+
if (options.hipo_scaling == kHipoCRscaling) {
556+
hipo_options.scaling = hipo::kOptionCRscaling;
557+
} else if (options.hipo_scaling == kHipoNormScaling) {
558+
hipo_options.scaling = hipo::kOptionNormScaling;
559+
} else {
560+
highsLogUser(options.log_options, HighsLogType::kError,
561+
"Unknown value of option %s\n", kHipoScalingString.c_str());
562+
model_status = HighsModelStatus::kSolveError;
563+
return HighsStatus::kError;
564+
}
565+
555566
// block size option
556567
hipo_options.block_size = options.hipo_block_size;
557568

highs/ipm/hipo/ipm/Options.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,20 @@ enum OptionParallel {
3535
kOptionParallelDefault = kOptionParallelChoose
3636
};
3737

38+
enum OptionScaling {
39+
kOptionScalingMin = 0,
40+
kOptionCRscaling = kOptionScalingMin,
41+
kOptionNormScaling,
42+
kOptionScalingMax = kOptionNormScaling,
43+
kOptionScalingDefault = kOptionCRscaling
44+
};
45+
3846
struct Options {
3947
// Solver options
4048
OptionNla nla = kOptionNlaDefault;
4149
OptionCrossover crossover = kOptionCrossoverDefault;
4250
OptionParallel parallel = kOptionParallelDefault;
51+
OptionScaling scaling = kOptionScalingDefault;
4352

4453
// Metis options
4554
bool metis_no2hop = false;

highs/lp_data/HighsOptions.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,10 @@ const string kHipoTreeString = "tree";
307307
const string kHipoNodeString = "node";
308308
const string kHipoBothString = "both";
309309

310+
const string kHipoScalingString = "hipo_scaling";
311+
const string kHipoCRscaling = "curtis-reid";
312+
const string kHipoNormScaling = "norm";
313+
310314
struct HighsOptionsStruct {
311315
// Run-time options read from the command line
312316
std::string presolve;
@@ -373,6 +377,7 @@ struct HighsOptionsStruct {
373377
std::string hipo_parallel_type;
374378
HighsInt hipo_block_size;
375379
bool hipo_metis_no2hop;
380+
std::string hipo_scaling;
376381

377382
// Options for PDLP solver
378383
bool pdlp_scaling;
@@ -545,6 +550,7 @@ struct HighsOptionsStruct {
545550
hipo_parallel_type(""),
546551
hipo_block_size(0),
547552
hipo_metis_no2hop(false),
553+
hipo_scaling(""),
548554
pdlp_scaling(false),
549555
pdlp_iteration_limit(0),
550556
pdlp_e_restart_method(0),
@@ -1272,6 +1278,13 @@ class HighsOptions : public HighsOptionsStruct {
12721278
advanced, &hipo_metis_no2hop, false);
12731279
records.push_back(record_bool);
12741280

1281+
record_string =
1282+
new OptionRecordString(kHipoScalingString,
1283+
"HiPO scaling option: \"curtis-reid\" "
1284+
"or \"norm\".",
1285+
advanced, &hipo_scaling, kHipoCRscaling);
1286+
records.push_back(record_string);
1287+
12751288
record_bool = new OptionRecordBool(
12761289
"pdlp_scaling", "Scaling option for PDLP solver: Default = true",
12771290
advanced, &pdlp_scaling, true);

0 commit comments

Comments
 (0)