Esempio n. 1
0
    def addAdditionalConstraints(self, model):
        """
      Add specific constraints for DROMKP problems
      @ In, model, pyomo model instance, pyomo abstract model
      @ Out, model, pyomo model instance, pyomo abstract model
    """
        model = MultipleKnapsack.addAdditionalConstraints(self, model)

        ## model.dist will be changed on the fly
        def constraintWasserstein(model, i):
            expr = sum(
                sum(model.net_present_values[i] * model.x[i, m]
                    for i in model.investments) for m in model.capitals)
            return -model.gamma * model.dist[i] + model.nu[i] <= expr

        model.constraintWassersteinDistance = pyomo.Constraint(
            model.sigma, rule=constraintWasserstein)
        return model
Esempio n. 2
0
    def addAdditionalConstraints(self, model):
        """
      Add specific constraints for DROMKP problems
      @ In, model, pyomo model instance, pyomo abstract model
      @ Out, model, pyomo model instance, pyomo abstract model
    """
        model = MultipleKnapsack.addAdditionalConstraints(self, model)

        def cvarConstraint(model):
            return model.nu + sum(
                sum(model.net_present_values[i] * model.x[i, m]
                    for i in model.investments)
                for m in model.capitals) + model.u >= 0

        model.cvarConstraint = pyomo.Constraint(rule=cvarConstraint)

        ## used to retrieve additional information from the optimization
        def expectProfit(model):
            """
        Method to compute the expect profit of stochastic programming
        @ In, model, instance, pyomo abstract model instance
        @ Out, expr, pyomo.expression, constraint to compute the expect profit
      """
            return model.expectProfit - sum(
                sum(model.net_present_values[i] * model.x[i, m]
                    for i in model.investments) for m in model.capitals) == 0

        model.computeExpectProfit = pyomo.Constraint(rule=expectProfit)

        def cvar(model):
            """
        Method to compute the conditional value at risk
        @ In, model, instance, pyomo abstract model instance
        @ Out, expr, pyomo.expression, constraint to compute the CVaR
      """
            return model.cvar - model.u + 1. / (1. -
                                                model.alpha) * model.nu == 0

        model.computeCVAR = pyomo.Constraint(rule=cvar)

        return model