logo

MATLABで線形計画問題を解く方法 📂最適化理論

MATLABで線形計画問題を解く方法

概要

Optimization Toolboxを使えばいいんだ1線形計画問題を行列形で表されたA,b,cA, \mathbf{b}, \mathbf{c}を入れて使う。

コード

Maximizex1+x2subject tox1+x21x13x22 \begin{matrix} \text{Maximize} & & x_{1} & + & x_{2} \\ \text{subject to} &-& x_{1} & + & x_{2} & \le & 1 \\ & & x_{1} & & & \le & 3 \\ & & & & x_{2} & \le & 2 \end{matrix}

簡単な例として、x1,x20x_{1} , x_{2} \ge 0のような最大化問題を解いてみよう。生エビ寿司屋ではこの問題をシンプレックス・メソッドを使って手で解いて、その答え(x1,x2)=(3,2)\left( x_{1}^{\ast}, x_{2}^{\ast} \right) = (3,2)を知っている。この線形計画問題は、

OptimizecTxsubject toAxb \begin{matrix} \text{Optimize} & \mathbf{c}^{T} \mathbf{x} \\ \text{subject to} & A \mathbf{x} \le \mathbf{b} \end{matrix}

このような形で、c=(1,1)\mathbf{c} = (1,1)A=[111010]A = \begin{bmatrix} -1 & 1 \\ 1 & 0 \\ 1 & 0 \end{bmatrix}b=(1,3,2)\mathbf{b} = (1,3,2)だから、次のように書き写して解くことができる。

>> A = [-1 1
    1 0
    0 1];

b = [1 3 2];
c = [-1 -1];

x = linprog(f,A,b,[],[], [0,0])

ここで、c = [-1,-1]c = [1,1]ではなく使う理由は、linprog()の基本的な最適化方向が最小化のためだ。その方向だけを反転すれば最大化と同じで、結果は我々が既に知っていたように(x1,x2)=(3,2)=\left( x_{1}, x_{2} \right) = \left( 3,2 \right) =[3 2]だ。

최적해를 구했습니다.

x =

     3
     2

環境

  • OS: Windows
  • MATLAB: v9.9.0.1592791 (R2020b)
  • Optimization Toolbox: v9.0 (R2020b)

参考にした方がいいもの