# 整数線形計画法(ILP) :::{container} prog-cpp **整数線形計画法(ILP)**は,Hi-QUBOを用いてQUBO式に変換できます. 例として,以下のILPを考えます: $$ \begin{aligned} \text{Maximize:} && 2x_0 +5x_1+5x_2\\ \text{Subject to:} && x_0 + 3 x_1 + x_2 &\leq 12 \\ && x_0 + 2x_2 &\leq 5\\ && x_1 + x_2 &\leq 4; \end{aligned} $$ ## Hi-QUBOプログラム 以下のHi-QUBOプログラムは,このILPをQUBO式として定式化し,Easy Solver を使って解きます: ```{literalinclude} /../programFiles/cppPrograms/basic/range-constraints-and-ilp-program1.cpp :language: cpp :caption: range-constraints-and-ilp-program1.cpp ``` このプログラムでは,`x` は3つの整数変数のベクトルであり,それぞれ $[0, 5]$ の範囲の整数値をとります. 目的関数と3つの制約は,それぞれ `objective`,`c1`,`c2`,`c3` で表されます. これらはペナルティ定数 `100` を用いて制約を強制する1つのQUBO式 `f` にまとめられます. Easy Solver は `f` の低エネルギー解を探索し,`sol` として返します. 得られた解と `objective`,および各制約の body(`c1.body(sol)`,`c2.body(sol)`,`c3.body(sol)`)の値は以下のように出力されます: ```{include} /../programFiles/markDown/basic/range-constraints-and-ilp.md :start-after: :end-before: ``` 目的関数値24の解が得られ,すべての制約が満たされていることが確認できます. ::: :::{container} prog-python **整数線形計画法(ILP)** は,PyQBPPを使用してQUBO式に変換できます. 例として,以下のILPを考えます: $$ \begin{aligned} \text{Maximize:} && 2x_0 +5x_1+5x_2\\ \text{Subject to:} && x_0 + 3 x_1 + x_2 &\leq 12 \\ && x_0 + 2x_2 &\leq 5\\ && x_1 + x_2 &\leq 4; \end{aligned} $$ ## PyQBPPプログラム 以下のPyQBPPプログラムは,このILPをQUBO式として定式化し,Easy Solver を使って解きます: ```{literalinclude} /../programFiles/pythonPrograms/basic/range-constraints-and-ilp-program1.py :language: python :caption: range-constraints-and-ilp-program1.py ``` このプログラムでは,`x` は3つの整数変数のベクトルであり,それぞれ $[0, 5]$ の範囲の整数値をとります. 目的関数と3つの制約は,それぞれ `objective`,`c1`,`c2`,`c3` で表されます. これらはペナルティ定数 `100` を用いて制約を強制する1つのQUBO式 `f` にまとめられます. Easy Solver は `f` の低エネルギー解を探索し,`sol` として返します. 得られた解と `objective`,`c1.body`,`c2.body`,`c3.body` の値は以下のように出力されます: ```{include} /../programFiles/markDown/basic/range-constraints-and-ilp.md :start-after: :end-before: ``` 目的関数値24の解が得られ,すべての制約が満たされていることが確認できます. :::