3.3.14. 範囲最小(大)値取得関数 Min,Max

範囲最小値取得関数 Min 及び範囲最大値取得関数 Max は, 添字付けされた定数式の中から最小(大)のものを返す関数です.:

i = Element(value=[1, 2])
j = Element(value=['p', 'q'])
avalue = {(1,'p'): 10, (1,'q'): 11, (2,'p'): 20, (2,'q'): 21}
a = Parameter(index=(i,j), value=avalue)
Min(a[i,j], (i,j))  # 10

Sum 関数と同様にすべての範囲に亘る場合は第二引数を省略することができます.:

Min(a[i,j])  # 10

一部の添字について演算を行う場合は 第二引数を省略することはできません. 次の例は \(\min_i a_{i,j}\)\(\min_j a_{i,j}\) を表しています.:

Min(a[i,j], i)
# Min(a[i,j], i)['X']=10
# Min(a[i,j], i)['Y']=11
Min(a[i,j], j)
# Min(a[i,j], j)[1]=10
# Min(a[i,j], j)[2]=20

条件式を用いて,添字の範囲を制限する事もできます. 次の例では,\(\min_{i>3} a_i\) を記述しています.:

i = Element(value=range(1, 6))
a = Parameter(index=i)
a[i] = i
Min(a[i>3])  # 4

その他の例は 範囲演算関数 Sum, Prod も確認してください.

3.3.14.1. 最小(大)値取得関数 MinOf,MaxOf

最小値取得関数 MinOf,最大値取得関数 MaxOf は各最小(大)のものを返す関数です.:

i = Element(value=[11, 21, 31])
a = Parameter(index=i, value={11: 22, 21: 32, 31: 12})
b = Parameter(index=i, value={11: 33, 21: 13, 31: 23})
Printf('i={i}, a={a}, b={b}', i=i, a=a[i], b=b[i])
# i=11, a=22, b=33
# i=21, a=32, b=13
# i=31, a=12, b=23
MinOf(i, a[i], b[i])
# MinOf(i, a[i], b[i])[1]=11
# MinOf(i, a[i], b[i])[2]=13
# MinOf(i, a[i], b[i])[3]=12

次の例は MinOf 関数を用いて変数の上限を一度に設定しています.:

x = Variable(index=i)
x[i] <= MinOf(i, a[i], b[i])