Upgrade to Pro — share decks privately, control downloads, hide ads and more …

9.3 Special ordered sets of variables

9.3 Special ordered sets of variables

Model Building in Mathematical Programming
9.3 Special ordered sets of variables

Naoki Nishimura

August 09, 2022
Tweet

Other Decks in Technology

Transcript

  1. 9.3 Special ordered sets of variables Naoki Nishimura @nnnnishi4 1

    Model Building in Mathematical Programming
  2. n Special order set of variables (SOS) とは︖ • 典型的な条件を満たす変数の集合

    n 利点は︖ • SOSの構造を利⽤した⾼速な分枝限定操作がソルバーによっては 搭載されている n 応⽤例は︖ • SOS type1(変数集合のうち1つだけが⾮ゼロになる) example 9.5: いずれか⼀つの⽤地に⼯場を建設する example 9.6: 離散的な関数を表現 • SOS type2(隣接するたかだか2つの変数が⾮ゼロになる) example 9.7: ⾮線形関数の区分線形近似 example 9.8: 多変量⾮線形関数の区分線形近似 n SOSを利⽤できないソルバーを利⽤しているときには︖ • 線形表現でも同等の条件を表せる n 実装は︖ • Python-MIPを利⽤するとpythonからCBCのSOSを利⽤できる 2 概要
  3. • 2つの典型的なタイプの条件を満たす変数集合に対してSOS1と SOS2という概念が提案された [Beale and Tomlin 1969] ü SOS1︓1つの変数が⾮ゼロでなければならない変数の集合 ü

    SOS2︓最⼤2つの変数が⾮ゼロである変数の集合、 2つの変数は与えられた順序で隣接しなければならない • ある変数のセットがSOS1またはSOS2に属するという条件を、 整数の変数と制約を使ってモデル化することは可能 • しかし、専⽤のアルゴリズムで処理すると⾼速に処理できる 3 9.3 Special ordered sets of variables
  4. SOS1︓変数集合のうち1つだけが⾮ゼロになる • デポはA,B,C,D,Eのいずれかの位置に1つだけ建設することができる • 0-1変数δiを⽤いてデポがi (∈{A,B,C,D,E})に設置︓δi=1とする • 変数の集合(δ1,δ2,δ3,δ4,δ5)はSOS1とみなすことができる • SOS1であるという条件と制約(9.56)で整数性を保証されおり、

    δiが整数であることを規定する必要はない → どれか⼀つが⾮ゼロで和が1なので、どれかが1その他が0となるため • デポが⾃然な順序で並んでいるとSOSには⼤きな利点がある • https://python-mip.readthedocs.io/en/latest/examples.html#exsos 4 SOS1の例︓Depot Siting (Example 9.5)
  5. 5 参考1︓SOSでの変数への順序(重み)付け ILOG CPLEX Optimization Studio/12.9.0/ Example: SOS Type 1

    for sizing a warehouse https://www.ibm.com/docs/en/icos/12.9.0?topic=sos-example-type-1-sizing-warehouse 変数につけた重みをもとに 分枝限定操作がされる 例では建設費⽤に⽐例した 重み付けをしている
  6. • ⼯場の⽣産能⼒Cは投資額Iの増加により離散的に拡張できる • 変数の集合(δ0, δ1, δ2, δ3, δ4, δ5)をSOS1とする •

    CをIの離散的な関数を表現できる • C(I)︓ δ0=1のときI=0,C=0, δ1=1のときI=I1,C=C1... • 0-1変数の2値以上の変数への⼀般化ともみなせる 7 SOS1の例︓Capacity Extension (Example 9.6)
  7. SOS type2︓隣接するたかだか2つの変数が⾮ゼロになる 8 SOS2の例︓Non-linear Functions (Example 9.7) 左図の区分線形関数上の点はO,A,B,C,Dの うちの隣接する2点の内分点として表せる 例︓

    y=x**3を左下のように区分線形近似する λ4=0.5, λ5=0.5とするとx1=2のときのyは 以下のように近似される 2**3 ≒ (3.375*0.5 + 15.625*2)/2= 9.5
  8. SOS2の例︓Non-linear Functions of Two or More Variables • z =g(x,

    y)をxとyの⾮線形関数とする • 図9.2のように(x, y)の値の格⼦点を定義 (等間隔と限らない) • 各格⼦点に⾮負の重み変数λijを考える • 格⼦点における(x, y)の値を(Xs, Yk)とすると、 関数z=g(x, y)は以下の関係で近似される • SOS2の⼀般化であるような以下を条件として加える • (9.66) はξ、ηをSOS2として以下のように表現できる 9 ξ2 η5 • ξに関するSOS2︓多くとも2つの隣接する⾏和が⾮ゼロ • ηに関するSOS2︓多くとも2つの隣接する列和が⾮ゼロ 例︓ξ2 =1/3, ξ3 =2/3, η5 =1/4, η6 =3/4 のとき ① λ52 =1/6、λ62 =1/6、λ53 =1/12、λ63 =7/12 ② λ52 =1/4, λ62 =1/12, λ63 =2/3 などと⼀意性のない形で表せてしまう ζをさらにSOS2として加えると②の3頂点に⼀意に定まる ζ1 • x⽅向の格⼦点間の補完をしなければξ, ζは不要 • λは chain of linked SOS sets と呼ばれる
  9. • 利⽤しているソルバーにSOSの機能が搭載されていれば利⽤するのが望ましい • SOSの機能が利⽤できなくても、意味する条件は0-1変数と線形制約を⽤いて 課すこともできる n SOS1 • (x1, x2,

    ... , xn)でSOS1を表したいとする → xiは⾮負としても⼀般性を失わない • xが0-1変数でないとき、0-1インジケータ変数δ1, δ2, ... , δnを導⼊し、 xと以下のように対応させる(Mi,miはxiの上下界を表す定数) • δについて以下の制約を課す • xが0-1変数のときは単純にδをxとみなして(9.70)だけでよい 10 SOS1の表現 xiが⾮負なので、 δiが1のとき mi ≦ xi ≦ Mi δiが0のとき xi = 0 ≧ miはxiの下界なので誤植 X
  10. 12 SOS2の表現 n SOS2 • (λ1, λ2, ... , λn)でSOS2を表したいとする

    • 0-1変数δ1, δ2, ... , δn-1を導⼊し、xと以下のように対応させる • これはSOS1とSOS2の関係を表している • (9.72)はδをSOS1とすれば省略してOK 例︓δ1=1,他δ=0とすると λ1,λ2≦1, ほかλ=0となり、 隣接するたかだか2つのλが ⾮ゼロとなる λの和が1でないときは(9.71)の δに和を係数として乗ずればよい