3.8.10. 多次元の添字のテクニック¶
多次元の添字は便利な面もありますが,次元が多くなると少し見づらくなることもあります. 以下のモデルを見てみましょう.:
>>> ijk = Element(value=[(1,3,5), (1,3,6), (1,4,5), (2,3,5)], name='ijk')
>>> x = Variable(index=ijk(0,1), name='x')
>>> a = Parameter(index=ijk(1), value=1, name='a')
>>> Sum(x[ijk(0,1)], ijk(0,2)) >= a[ijk(1)] # 通常の書き方
(Sum(x[ijk(0,1)], ijk(0,2))[ijk(1)]>=a[ijk(1)]):
2*x[1,3]+x[2,3]>=1
x[1,4]>=1
こんなとき PySIMPLE ではエイリアスを使うことで記述を簡潔にすることができます.:
>>> i, j, k = ijk(0), ijk(1), ijk(2) # エイリアスを使った書き方
>>> Sum(x[i,j], (i,k)) >= a[j]
(Sum(x[ijk(0),ijk(1)], (ijk(0),ijk(2)))[ijk(1)]>=a[ijk(1)]):
2*x[1,3]+x[2,3]>=1
x[1,4]>=1
多次元の添字にも拘らず,その疎性を気にすることなくモデルを記述することができています. また,エイリアスの定義部分は以下のようにして汎用化することも可能です.:
>>> i, j, k = map(ijk, range(ijk.set.dim)) # 汎用化
>>> Sum(x[i,j], (i,k)) >= a[j]
(Sum(x[ijk(0),ijk(1)], (ijk(0),ijk(2)))[ijk(1)]>=a[ijk(1)]):
2*x[1,3]+x[2,3]>=1
x[1,4]>=1