2

I'm fairly new to Pyomo and trying to figure out what the use cases are for an indexed set (a set of sets). As far as I can tell, it can be substituted for parameter and behave the same way. Any insight or examples of how indexed sets should be used in Pyomo would be much appreciated.

I came across this problem while I was trying to create a set that "labels" my time set, t. I have model.t as a set of timestamps, and want to say, for example, that the first 3 timestamps are part of group A, the next 3 are part of group B, etc. I'm doing all this in an Abstract Model and feel a Param does the same as an Indexed Set

import datetime
import pyomo.environ as pe

class CreateModel:
    def __init__(self):
        self.model = pe.AbstractModel()
        self.model.t = pe.Set()
        self.model.labels = pe.Set()
        self.model.labeled_t = pe.Set(self.model.labels)

        # OR
        # self.model.labeled_t = pe.Param(self.model.labels)


def main():
    # Some dummy input data
    inputs = {
        None:{
            't':{
                None:[
                    datetime.date(2020, 1, 1), datetime.date(2020, 1, 2),
                    datetime.date(2020, 1, 3), datetime.date(2020, 1, 4)
                ]
            },
            'labels':{None:{'A', 'B'}},
            'labeled_t':{
                'A':[datetime.date(2020, 1, 1), datetime.date(2020, 1, 2)],
                'B':[datetime.date(2020, 1, 3), datetime.date(2020, 1, 4)]
            }
        }
    }
    m = CreateModel()
    m.model.create_instance(inputs)

if __name__ == '__main__':
    main()

In this example the behavior is the same, so why would I ever want an indexed set?

Conor
  • 111
  • 2
  • 6

0 Answers0