|
3 | 3 | import glob |
4 | 4 | import numbers |
5 | 5 | import logging |
6 | | -import os |
7 | 6 | import os.path |
8 | 7 | import sys |
9 | 8 | from typing import Dict, List, Optional, Tuple, Union |
|
159 | 158 | const void* highs, double* col_value, double* col_dual, |
160 | 159 | double* row_value, double* row_dual |
161 | 160 | ); |
| 161 | +HighsInt Highs_setSolution( |
| 162 | + const void* highs, double* col_value, double* row_value, |
| 163 | + double* col_dual, double* row_dual |
| 164 | +); |
162 | 165 | HighsInt Highs_deleteRowsBySet( |
163 | 166 | void* highs, const HighsInt num_set_entries, const HighsInt* set |
164 | 167 | ); |
@@ -507,7 +510,13 @@ def set_objective_sense(self: "SolverHighs", sense: str): |
507 | 510 | check(self._lib.Highs_changeObjectiveSense(self._model, sense_map[sense])) |
508 | 511 |
|
509 | 512 | def set_start(self: "SolverHighs", start: List[Tuple["mip.Var", numbers.Real]]): |
510 | | - raise NotImplementedError("HiGHS doesn't support a start solution.") |
| 513 | + # using zeros for unset variables |
| 514 | + nvars = len(self.model.vars) |
| 515 | + cval = ffi.new("double[]", [0.0 for _ in range(nvars)]) |
| 516 | + for col in start: |
| 517 | + cval[col[0].idx] = col[1] |
| 518 | + |
| 519 | + self._lib.Highs_setSolution(self._model, cval, ffi.NULL, ffi.NULL, ffi.NULL) |
511 | 520 |
|
512 | 521 | def set_objective(self: "SolverHighs", lin_expr: "mip.LinExpr", sense: str = ""): |
513 | 522 | # set coefficients |
|
0 commit comments