6
6
import os
7
7
import os .path
8
8
import sys
9
- from typing import List , Optional , Tuple , Union
9
+ from typing import Dict , List , Optional , Tuple , Union
10
10
11
11
import cffi
12
12
@@ -247,7 +247,7 @@ def add_var(
247
247
lb : numbers .Real = 0 ,
248
248
ub : numbers .Real = mip .INF ,
249
249
var_type : str = mip .CONTINUOUS ,
250
- column : "Column" = None ,
250
+ column : "mip. Column" = None ,
251
251
name : str = "" ,
252
252
):
253
253
# TODO: handle column data
@@ -553,7 +553,16 @@ def constr_get_expr(self: "SolverHighs", constr: "mip.Constr") -> "mip.LinExpr":
553
553
upper = ffi .new ("double[]" , 1 )
554
554
num_nz = ffi .new ("int*" )
555
555
status = self ._lib .Highs_getRowsByRange (
556
- self ._model , row , row , lower , upper , num_nz , ffi .NULL , ffi .NULL , ffi .NULL
556
+ self ._model ,
557
+ row ,
558
+ row ,
559
+ num_row ,
560
+ lower ,
561
+ upper ,
562
+ num_nz ,
563
+ ffi .NULL ,
564
+ ffi .NULL ,
565
+ ffi .NULL ,
557
566
)
558
567
559
568
# - second, to get the coefficients in pre-allocated arrays.
@@ -564,14 +573,14 @@ def constr_get_expr(self: "SolverHighs", constr: "mip.Constr") -> "mip.LinExpr":
564
573
self ._model ,
565
574
row ,
566
575
row ,
576
+ num_row ,
567
577
lower ,
568
578
upper ,
569
579
num_nz ,
570
580
matrix_start ,
571
581
matrix_index ,
572
582
matrix_value ,
573
583
)
574
- assert matrix [0 ] == 0
575
584
576
585
return mip .xsum (matrix_value [i ] * self .model .vars [i ] for i in range (num_nz ))
577
586
@@ -582,13 +591,21 @@ def constr_set_expr(
582
591
583
592
def constr_get_rhs (self : "SolverHighs" , idx : int ) -> numbers .Real :
584
593
# fetch both lower and upper bound
585
- row = constr .idx
586
594
num_row = ffi .new ("int*" )
587
595
lower = ffi .new ("double[]" , 1 )
588
596
upper = ffi .new ("double[]" , 1 )
589
597
num_nz = ffi .new ("int*" )
590
598
status = self ._lib .Highs_getRowsByRange (
591
- self ._model , row , row , lower , upper , num_nz , ffi .NULL , ffi .NULL , ffi .NULL
599
+ self ._model ,
600
+ idx ,
601
+ idx ,
602
+ num_row ,
603
+ lower ,
604
+ upper ,
605
+ num_nz ,
606
+ ffi .NULL ,
607
+ ffi .NULL ,
608
+ ffi .NULL ,
592
609
)
593
610
594
611
# case distinction for sense
@@ -606,7 +623,16 @@ def constr_set_rhs(self: "SolverHighs", idx: int, rhs: numbers.Real):
606
623
upper = ffi .new ("double[]" , 1 )
607
624
num_nz = ffi .new ("int*" )
608
625
status = self ._lib .Highs_getRowsByRange (
609
- self ._model , idx , idx , lower , upper , num_nz , ffi .NULL , ffi .NULL , ffi .NULL
626
+ self ._model ,
627
+ idx ,
628
+ idx ,
629
+ num_row ,
630
+ lower ,
631
+ upper ,
632
+ num_nz ,
633
+ ffi .NULL ,
634
+ ffi .NULL ,
635
+ ffi .NULL ,
610
636
)
611
637
612
638
# update bounds as needed
@@ -735,7 +761,7 @@ def var_set_var_type(self: "SolverHighs", var: "mip.Var", value: str):
735
761
)
736
762
self ._var_type [var .idx ] = value
737
763
738
- def var_get_column (self : "SolverHighs" , var : "mip.Var" ) -> "Column" :
764
+ def var_get_column (self : "SolverHighs" , var : "mip.Var" ) -> "mip. Column" :
739
765
# Call method twice:
740
766
# - first, to get the sizes for coefficients,
741
767
num_col = ffi .new ("int*" )
@@ -779,7 +805,7 @@ def var_get_column(self: "SolverHighs", var: "mip.Var") -> "Column":
779
805
coeffs = [matrix_value [i ] for i in range (num_nz [0 ])],
780
806
)
781
807
782
- def var_set_column (self : "SolverHighs" , var : "mip.Var" , value : "Column" ):
808
+ def var_set_column (self : "SolverHighs" , var : "mip.Var" , value : "mip. Column" ):
783
809
# TODO
784
810
raise NotImplementedError ()
785
811
@@ -837,7 +863,8 @@ def get_status(self: "SolverHighs") -> mip.OptimizationStatus:
837
863
self ._lib .kHighsModelStatusModelEmpty : OS .OTHER ,
838
864
self ._lib .kHighsModelStatusOptimal : OS .OPTIMAL ,
839
865
self ._lib .kHighsModelStatusInfeasible : OS .INFEASIBLE ,
840
- self ._lib .kHighsModelStatusUnboundedOrInfeasible : OS .UNBOUNDED , # or INFEASIBLE?
866
+ self ._lib .kHighsModelStatusUnboundedOrInfeasible : OS .UNBOUNDED ,
867
+ # ... or should it be INFEASIBLE?
841
868
self ._lib .kHighsModelStatusUnbounded : OS .UNBOUNDED ,
842
869
self ._lib .kHighsModelStatusObjectiveBound : None ,
843
870
self ._lib .kHighsModelStatusObjectiveTarget : None ,
0 commit comments