| @@ 1129-1149 (lines=21) @@ | ||
| 1126 | else: |
|
| 1127 | return 0 |
|
| 1128 | ||
| 1129 | def _minimum_investment_constraint(self): |
|
| 1130 | """Constraint factory for a minimum investment""" |
|
| 1131 | m = self.parent_block() |
|
| 1132 | ||
| 1133 | def _min_invest_rule(_): |
|
| 1134 | """Rule definition for applying a minimum investment""" |
|
| 1135 | for i, o in self.NON_CONVEX_INVESTFLOWS: |
|
| 1136 | for p in m.PERIODS: |
|
| 1137 | expr = ( |
|
| 1138 | m.flows[i, o].investment.minimum[p] |
|
| 1139 | * self.invest_status[i, o, p] |
|
| 1140 | <= self.invest[i, o, p] |
|
| 1141 | ) |
|
| 1142 | self.minimum_rule.add((i, o, p), expr) |
|
| 1143 | ||
| 1144 | self.minimum_rule = Constraint( |
|
| 1145 | self.NON_CONVEX_INVESTFLOWS, m.PERIODS, noruleinit=True |
|
| 1146 | ) |
|
| 1147 | self.minimum_rule_build = BuildAction(rule=_min_invest_rule) |
|
| 1148 | ||
| 1149 | return self.minimum_rule |
|
| 1150 | ||
| 1151 | def _maximum_investment_constraint(self): |
|
| 1152 | """Constraint factory for a maximum investment""" |
|
| @@ 338-361 (lines=24) @@ | ||
| 335 | + investment_costs |
|
| 336 | ) |
|
| 337 | ||
| 338 | def _minimum_invest_constraint(self): |
|
| 339 | r""" |
|
| 340 | .. math:: |
|
| 341 | P_{invest, min} \cdot Y_{invest, status} \le P_{invest} |
|
| 342 | """ |
|
| 343 | m = self.parent_block() |
|
| 344 | ||
| 345 | def _min_invest_rule(_): |
|
| 346 | """Rule definition for applying a minimum investment""" |
|
| 347 | for i, o in self.OFFSET_INVEST_NON_CONVEX_FLOWS: |
|
| 348 | for p in m.PERIODS: |
|
| 349 | expr = ( |
|
| 350 | m.flows[i, o].investment.minimum[p] |
|
| 351 | * self.invest_status[i, o, p] |
|
| 352 | <= self.invest[i, o, p] |
|
| 353 | ) |
|
| 354 | self.minimum_investment.add((i, o, p), expr) |
|
| 355 | ||
| 356 | self.minimum_investment = Constraint( |
|
| 357 | self.INVEST_NON_CONVEX_FLOWS, m.PERIODS, noruleinit=True |
|
| 358 | ) |
|
| 359 | self.minimum_rule_build = BuildAction(rule=_min_invest_rule) |
|
| 360 | ||
| 361 | return self.minimum_investment |
|
| 362 | ||
| 363 | def _maximum_invest_constraint(self): |
|
| 364 | r""" |
|