예제 #1
0
파일: MCKP.py 프로젝트: milljm/LOGOS
 def printSolution(self, model):
     """
   Output optimization solution to screen
   @ In, model, instance, pyomo optimization model
   @ Out, outputDict, dict, dictionary stores the outputs
 """
     outputDict = KnapsackBase.printSolution(self, model)
     msg = "Selected investments include:"
     logger.info(msg)
     for item in model.investments:
         for opt in model.optionsOut[item]:
             outputName = '__'.join([item, opt])
             numSelected = pyomo.value(model.x[item, opt])
             outputDict[outputName] = [numSelected]
             if numSelected == 1:
                 msg = "Investment: " + str(item) + " with option: " + str(
                     opt) + " is selected!"
                 logger.info(msg)
     outputDict['MaxNPV'] = model.obj()
     logger.info("Maximum NPV: %16.4f" % (outputDict['MaxNPV']))
     # Accessing Duals
     # In some cases, a solver plugin will raise an exception if it encounters a Suffix type that it does not handle
     # One should be careful in verifying that Suffix declarations are being handled as expected when switching
     # to a different solver or solver interface.
     if self.solver == 'cbc':
         logger.info("Duals Information for Constraint Capacity:")
         print("Resources|Time_Periods      Capacity_Margin")
         for const in model.component_objects(pyomo.Constraint,
                                              active=True):
             if const.name == 'constraintCapacity':
                 for index in const:
                     print("{0:20s} {1:10.1f}".format(
                         str(index), model.dual[const[index]]))
     return outputDict
예제 #2
0
    def printSolution(self, model):
        """
      Output optimization solution to screen
      @ In, model, instance, pyomo optimization model
      @ Out, outputDict, dict, dictionary stores the outputs
    """
        outputDict = KnapsackBase.printSolution(self, model)
        msg = "Selected investments include:"
        logger.info(msg)
        outputDict.update({item: list() for item in model.investments})
        outputDict['capitals'] = list(cap for cap in model.capitals)
        for cap in model.capitals:
            for item in model.investments:
                numSelected = pyomo.value(model.x[item, cap])
                outputDict[item].append(numSelected)
                if numSelected == 1:
                    msg = "Investment: " + str(
                        item) + " is selected for capitals: " + str(cap)
                    logger.info(msg)
                elif numSelected > 1:
                    msg = "Investment: " + str(
                        item) + " is selected with limit " + str(
                            int(numSelected)) + " for capitals " + str(cap)
                    logger.info(msg)
        logger.info("Maximum NPV: %16.4f" % (model.obj()))
        outputDict['MaxNPV'] = model.obj()

        # Accessing Duals
        # In some cases, a solver plugin will raise an exception if it encounters a Suffix type that it does not handle
        # One should be careful in verifying that Suffix declarations are being handled as expected when switching
        # to a different solver or solver interface.
        if self.solver == 'cbc':
            logger.info("Duals Information for Constraint Capacity:")
            print("Capitals|Time_Periods      Capacity_Margin")
            for const in model.component_objects(pyomo.Constraint,
                                                 active=True):
                if const.name == 'constraintCapacity':
                    for index in const:
                        print("{0:20s} {1:10.1f}".format(
                            str(index), model.dual[const[index]]))
        return outputDict