Skip to content

Commit 57bf420

Browse files
committed
Cannot work!
1 parent 6014e90 commit 57bf420

File tree

2 files changed

+52
-12
lines changed

2 files changed

+52
-12
lines changed

check/TestUserScale.cpp

Lines changed: 51 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,61 @@ void checkLpScaling(const HighsInt user_bound_scale,
1616
const HighsInt user_cost_scale, const HighsLp& unscaled_lp,
1717
const HighsLp& scaled_lp);
1818

19+
bool doubleEqual0(const double v0, const double v1) {
20+
return std::fabs(v0 - v1)/std::max(1.0, std::fabs(v0)) < 1e-12;
21+
}
22+
1923
TEST_CASE("user-cost-scale-after-run", "[highs_user_scale]") {
20-
std::string filename =
21-
std::string(HIGHS_DIR) + "/check/instances/adlittle.mps";
24+
std::string model = "avgas";
2225
Highs highs;
2326
const HighsInfo& info = highs.getInfo();
2427
highs.setOptionValue("output_flag", dev_run);
2528
for (HighsInt k = 0; k < 2; k++) {
29+
std::string filename =
30+
std::string(HIGHS_DIR) + "/check/instances/" + model + ".mps";
2631
highs.readModel(filename);
27-
highs.run();
28-
HighsInfo unscaled_info = info;
29-
HighsSolution unscaled_solution = highs.getSolution();
32+
highs.writeModel("");
33+
double col_cost_1 = highs.getLp().col_cost_[1]; // kInteger for flugpl
34+
double col_cost_2 = highs.getLp().col_cost_[2]; // kContinuous for flugpl
35+
double col_upper_1 = highs.getLp().col_upper_[1];
36+
double col_upper_2 = highs.getLp().col_upper_[2];
37+
double row_upper_0 = highs.getLp().row_upper_[0];
38+
double matrix_value_1 = highs.getLp().a_matrix_.value_[highs.getLp().a_matrix_.start_[1]];
39+
double matrix_value_2 = highs.getLp().a_matrix_.value_[highs.getLp().a_matrix_.start_[2]];
3040
HighsLp unscaled_lp = highs.getLp();
3141

32-
HighsInt user_bound_scale = 10;
42+
highs.run();
43+
double unscaled_objective = highs.getInfo().objective_function_value;
44+
45+
HighsInt user_bound_scale = 1;//8;
46+
double user_bound_scale_value = std::pow(2, user_bound_scale);
3347
REQUIRE(highs.setOptionValue("user_bound_scale", user_bound_scale) == HighsStatus::kOk);
48+
if (k == 0) {
49+
REQUIRE(highs.getLp().col_cost_[1] == col_cost_1);
50+
REQUIRE(highs.getLp().col_upper_[1] == user_bound_scale_value*col_upper_1);
51+
} else {
52+
REQUIRE(highs.getLp().col_cost_[1] == user_bound_scale_value*col_cost_1);
53+
REQUIRE(highs.getLp().col_upper_[1] == col_upper_1);
54+
}
55+
REQUIRE(highs.getLp().col_upper_[2] == user_bound_scale_value*col_upper_2);
56+
REQUIRE(highs.getLp().row_upper_[0] == row_upper_0);
3457

35-
HighsInt user_cost_scale = 30;
58+
HighsInt user_cost_scale = 4;
59+
double user_cost_scale_value = std::pow(2, user_cost_scale);
3660
REQUIRE(highs.setOptionValue("user_cost_scale", user_cost_scale) == HighsStatus::kOk);
61+
if (k == 0) {
62+
REQUIRE(highs.getLp().col_cost_[1] == user_cost_scale_value*col_cost_1);
63+
} else {
64+
REQUIRE(highs.getLp().col_cost_[1] == user_cost_scale_value*user_bound_scale_value*col_cost_1);
65+
}
66+
REQUIRE(highs.getLp().col_cost_[2] == user_cost_scale_value*col_cost_2);
67+
if (k == 0) {
68+
REQUIRE(highs.getLp().col_upper_[1] == user_bound_scale_value*col_upper_1);
69+
} else {
70+
REQUIRE(highs.getLp().col_upper_[1] == col_upper_1);
71+
}
72+
REQUIRE(highs.getLp().col_upper_[2] == user_bound_scale_value*col_upper_2);
73+
REQUIRE(highs.getLp().row_upper_[0] == user_bound_scale_value*row_upper_0);
3774

3875
HighsLp scaled_lp = highs.getLp();
3976
checkLpScaling(user_bound_scale, user_cost_scale, unscaled_lp, scaled_lp);
@@ -48,8 +85,12 @@ TEST_CASE("user-cost-scale-after-run", "[highs_user_scale]") {
4885
REQUIRE(info.max_dual_infeasibility == kHighsIllegalInfeasibilityMeasure);
4986
REQUIRE(info.sum_dual_infeasibilities == kHighsIllegalInfeasibilityMeasure);
5087

51-
filename =
52-
std::string(HIGHS_DIR) + "/check/instances/flugpl.mps";
88+
highs.run();
89+
REQUIRE(highs.getModelStatus() == HighsModelStatus::kOptimal);
90+
REQUIRE(doubleEqual0(highs.getInfo().objective_function_value,
91+
user_bound_scale_value*user_cost_scale_value*unscaled_objective));
92+
93+
model = "flugpl";
5394
REQUIRE(highs.setOptionValue("user_bound_scale", 0) == HighsStatus::kOk);
5495
REQUIRE(highs.setOptionValue("user_cost_scale", 0) == HighsStatus::kOk);
5596
}
@@ -69,11 +110,9 @@ TEST_CASE("user-cost-scale-after-load", "[highs_user_scale]") {
69110
HighsLp unscaled_lp = highs.getLp();
70111

71112
HighsInt user_bound_scale = 10;
72-
double user_bound_scale_value = std::pow(2, user_bound_scale);
73113
REQUIRE(highs.setOptionValue("user_bound_scale", user_bound_scale) == HighsStatus::kOk);
74114

75115
HighsInt user_cost_scale = 30;
76-
double user_cost_scale_value = std::pow(2, user_cost_scale);
77116
REQUIRE(highs.setOptionValue("user_cost_scale", user_cost_scale) == HighsStatus::kOk);
78117

79118
REQUIRE(highs.readModel(filename) == HighsStatus::kOk);
@@ -85,6 +124,7 @@ TEST_CASE("user-cost-scale-after-load", "[highs_user_scale]") {
85124
std::string(HIGHS_DIR) + "/check/instances/flugpl.mps";
86125
REQUIRE(highs.setOptionValue("user_bound_scale", 0) == HighsStatus::kOk);
87126
REQUIRE(highs.setOptionValue("user_cost_scale", 0) == HighsStatus::kOk);
127+
88128
}
89129

90130
highs.resetGlobalScheduler(true);

highs/lp_data/HighsLpUtils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2083,7 +2083,7 @@ void reportLpDimensions(const HighsLogOptions& log_options, const HighsLp& lp) {
20832083
HighsInt num_int = getNumInt(lp);
20842084
if (num_int) {
20852085
highsLogUser(log_options, HighsLogType::kInfo,
2086-
", %" HIGHSINT_FORMAT " nonzeros and %" HIGHSINT_FORMAT
2086+
", %" HIGHSINT_FORMAT " nonzero%s and %" HIGHSINT_FORMAT
20872087
" integer column%s\n",
20882088
lp_num_nz, lp_num_nz == 1 ? "" : "s", num_int,
20892089
num_int == 1 ? "" : "s");

0 commit comments

Comments
 (0)