(columns: list)
| 116 | # 0 <= \lambda_{k} <= 1, \foreach k // Can use each column at most once (can be fractional) |
| 117 | # |
| 118 | def createMasterProblem(columns: list): |
| 119 | m = highspy.Highs() |
| 120 | m.setOptionValue('output_flag', False) |
| 121 | m.setOptionValue('random_seed', SEED) |
| 122 | |
| 123 | m.addVars(len(columns), [0.0]*len(columns), [1.0]*len(columns)) |
| 124 | |
| 125 | # min \sum_{k} \lambda_{k} |
| 126 | m.changeObjectiveSense(highspy.ObjSense.kMinimize) |
| 127 | m.changeColsCost(len(columns), list(range(len(columns))), [1.0]*len(columns)) |
| 128 | |
| 129 | # \sum_{k \in K_i} \lambda_{k} == 1, \foreach i |
| 130 | # 1 <= \sum_{k \in K_i} \lambda_{k} <= 1 |
| 131 | for i in range(NumberItems): |
| 132 | K_i = [k for k, column in enumerate(columns) if i in column] |
| 133 | m.addRow(1, 1, len(K_i), K_i, [1.0]*len(K_i)) |
| 134 | |
| 135 | m.run() |
| 136 | |
| 137 | solution = m.getSolution() |
| 138 | vals = list(solution.col_value) |
| 139 | duals = list(solution.row_dual) |
| 140 | |
| 141 | return m, vals, duals |
| 142 | |
| 143 | # |
| 144 | # Solve the knapsack subproblem exactly with HiGHS |
no test coverage detected