Creates a component that references other components
Reference generates a reference component; that is, an indexed
component that does not contain data, but instead references data
stored in other components as defined by a component slice. The
ctype parameter sets the Component.type() of the resulting
indexed component. If the ctype parameter is not set and all data
identified by the slice (at construction time) share a common
Component.type(), then that type is assumed. If either the
ctype parameter is None or the data has more than one ctype, the
resulting indexed component will have a ctype of
IndexedComponent.
If the indices associated with wildcards in the component slice all
refer to the same Set objects for all data identified by
the slice, then the resulting indexed component will be indexed by
the product of those sets. However, if all data do not share common
set objects, or only a subset of indices in a multidimensional set
appear as wildcards, then the resulting indexed component will be
indexed by a SetOf containing a
_ReferenceSet for the slice.
- Parameters:
reference (IndexedComponent_slice) – component slice that defines the data to include in the
Reference component
ctype (type [optional]) – the type used to create the resulting indexed component. If not
specified, the data’s ctype will be used (if all data share a
common ctype). If multiple data ctypes are found or type is
None, then IndexedComponent will be used.
Examples
>>> from pyomo.environ import *
>>> m = ConcreteModel()
>>> @m.Block([1,2],[3,4])
... def b(b,i,j):
... b.x = Var(bounds=(i,j))
...
>>> m.r1 = Reference(m.b[:,:].x)
>>> m.r1.pprint()
r1 : Size=4, Index={1, 2}*{3, 4}, ReferenceTo=b[:, :].x
Key : Lower : Value : Upper : Fixed : Stale : Domain
(1, 3) : 1 : None : 3 : False : True : Reals
(1, 4) : 1 : None : 4 : False : True : Reals
(2, 3) : 2 : None : 3 : False : True : Reals
(2, 4) : 2 : None : 4 : False : True : Reals
Reference components may also refer to subsets of the original data:
>>> m.r2 = Reference(m.b[:,3].x)
>>> m.r2.pprint()
r2 : Size=2, Index={1, 2}, ReferenceTo=b[:, 3].x
Key : Lower : Value : Upper : Fixed : Stale : Domain
1 : 1 : None : 3 : False : True : Reals
2 : 2 : None : 3 : False : True : Reals
Reference components may have wildcards at multiple levels of the
model hierarchy:
>>> m = ConcreteModel()
>>> @m.Block([1,2])
... def b(b,i):
... b.x = Var([3,4], bounds=(i,None))
...
>>> m.r3 = Reference(m.b[:].x[:])
>>> m.r3.pprint()
r3 : Size=4, Index=ReferenceSet(b[:].x[:]), ReferenceTo=b[:].x[:]
Key : Lower : Value : Upper : Fixed : Stale : Domain
(1, 3) : 1 : None : None : False : True : Reals
(1, 4) : 1 : None : None : False : True : Reals
(2, 3) : 2 : None : None : False : True : Reals
(2, 4) : 2 : None : None : False : True : Reals
The resulting reference component may be used just like any other
component. Changes to the stored data will be reflected in the
original objects:
>>> m.r3[1,4] = 10
>>> m.b[1].x.pprint()
x : Size=2, Index={3, 4}
Key : Lower : Value : Upper : Fixed : Stale : Domain
3 : 1 : None : None : False : True : Reals
4 : 1 : 10 : None : False : False : Reals