| @@ 1151-1170 (lines=20) @@ | ||
| 1148 | ||
| 1149 | return self.minimum_rule |
|
| 1150 | ||
| 1151 | def _maximum_investment_constraint(self): |
|
| 1152 | """Constraint factory for a maximum investment""" |
|
| 1153 | m = self.parent_block() |
|
| 1154 | ||
| 1155 | def _max_invest_rule(_): |
|
| 1156 | """Rule definition for applying a minimum investment""" |
|
| 1157 | for i, o in self.NON_CONVEX_INVESTFLOWS: |
|
| 1158 | for p in m.PERIODS: |
|
| 1159 | expr = self.invest[i, o, p] <= ( |
|
| 1160 | m.flows[i, o].investment.maximum[p] |
|
| 1161 | * self.invest_status[i, o, p] |
|
| 1162 | ) |
|
| 1163 | self.maximum_rule.add((i, o, p), expr) |
|
| 1164 | ||
| 1165 | self.maximum_rule = Constraint( |
|
| 1166 | self.NON_CONVEX_INVESTFLOWS, m.PERIODS, noruleinit=True |
|
| 1167 | ) |
|
| 1168 | self.maximum_rule_build = BuildAction(rule=_max_invest_rule) |
|
| 1169 | ||
| 1170 | return self.maximum_rule |
|
| 1171 | ||
| @@ 363-386 (lines=24) @@ | ||
| 360 | ||
| 361 | return self.minimum_investment |
|
| 362 | ||
| 363 | def _maximum_invest_constraint(self): |
|
| 364 | r""" |
|
| 365 | .. math:: |
|
| 366 | P_{invest} \le P_{invest, max} \cdot Y_{invest, status} |
|
| 367 | """ |
|
| 368 | m = self.parent_block() |
|
| 369 | ||
| 370 | def _max_invest_rule(_): |
|
| 371 | """Rule definition for applying a minimum investment""" |
|
| 372 | for i, o in self.OFFSET_INVEST_NON_CONVEX_FLOWS: |
|
| 373 | for p in m.PERIODS: |
|
| 374 | expr = ( |
|
| 375 | self.invest[i, o, p] |
|
| 376 | <= m.flows[i, o].investment.maximum[p] |
|
| 377 | * self.invest_status[i, o, p] |
|
| 378 | ) |
|
| 379 | self.maximum_investment.add((i, o, p), expr) |
|
| 380 | ||
| 381 | self.maximum_investment = Constraint( |
|
| 382 | self.INVEST_NON_CONVEX_FLOWS, m.PERIODS, noruleinit=True |
|
| 383 | ) |
|
| 384 | self.maximum_rule_build = BuildAction(rule=_max_invest_rule) |
|
| 385 | ||
| 386 | return self.maximum_investment |
|
| 387 | ||