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 multidimentional 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