# 整数線形計画法(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の解が得られ,すべての制約が満たされていることが確認できます.
:::