Excelでソルバーを使って線形計画問題(栄養問題)を解く

みなさん,こんにちは。
シンノユウキ(shinno1993)です。

Excelを用いて最適化問題を解く方法を解説する連載の2回目。前回はExcelにソルバーアドインを追加する方法を紹介しました。

今回は実際に,最適化問題のうちの線形計画問題を栄養を例に紹介したいと思います。

では行きましょう!

前回やったこと

前回の記事では,Excelにソルバーアドインを追加する作業を行いました。ソルバーアドインは初期状態では有効になっておらず,有効化する作業が必要だからです。

以下の画像のように,メニューの「データ」にソルバーが追加されていれば問題ありません。追加されていない場合は,前回の記事を参考に追加作業を行ってみてください。

線形計画問題とは?

ある制約下で目的とする関数を最適化(最小もしくは最大)する変数の値を求める問題を数理計画問題といい,そのうち制約や関数が線形の方程式で示されるものを線形計画問題といいます。また,線形計画問題を解く手法のことを線形計画法と呼びます。

高校の数学でも取り扱われるもので,不等式と一次式が与えられ,一次式の最大もしくは最小の値を求めるといった問題が,線形計画問題に該当します。

線形計画問題を使いこなせるようになると,工場等での生産量の決定に役立てたり,できるだけコストをかけない栄養素的にベストな食事構成を作成したりといったことができるようになります。

実際にやってみる

では以下で実際に問題を解いていきましょう。

問題の概要

問題は私が直感的に理解しやすいように食事問題を題材とします。A,B,Cの3つの食品を組み合わせて摂取し,必要な栄養素摂取量を満たすという制限のもと,コストを最小限にできる摂取量の組み合わせを求めます。

食品の価格や栄養素量,また栄養素摂取量は以下です:

価格栄養素1栄養素2栄養素3
食品A20222010
食品B1213305
食品C1817512
必要な摂取量
栄養素1200
栄養素2200
栄養素3100

わかりやすいように,上記をExcelファイルに入力していきましょう!

  • 各種データ:食品A,B,Cのそれぞれにおいて,価格と栄養素,また今回求めたい摂取量を入力します。価格と栄養素は上記の問題設定を参考に入力してください。摂取量については,これから求めていきたい値ですので空欄でOKです。
  • 制限条件:制限条件もわかりやすくなるように入力しておきます。制限条件は,各栄養素を制限値以上摂取することです(詳細は上記参照)。実際の栄養素摂取量は各食品の摂取重量と栄養素量をかけ合わせた値ですので,各要素の積の合計を算出できるSUMPRODUCT関数を用いると便利です。比較方法や制限条件も,とりあえず入力しておくことをオススメします。
  • 目的条件:最小化もしくは最大化したい変数を設定します。今回は合計価格を最小化したいので,食品A,B,Cのそれぞれの価格と重量とをかけ合わせた値を入力します。これも上記と同様にSUMPRODUCT関数を用いると良いでしょう。

これでExcelシートの準備は整いましたので,次はいよいよソルバーを使っていきます。なお,サンプルとして上記を入力したExcelシートを用意しています。下記からDLしてご利用ください:

栄養問題サンプル.xlsx

ソルバーを使う

まずはソルバーのパラメータを設定します。メニューの「データ」→分析グループの「ソルバー」をクリックしてください。

以下のようなダイアログが開きますので,①~⑤まで順番に設定していきましょう!

ソルバーの実行手順
  • 手順①
    目的関数の設定

    まずは目的セルを設定します。

    「目的セルの選択」では最小化もしくは最大化したいセルのセル番地を入力します。直接番地を入力するか,右側のRefEditを使って指定しても構いません。

    「目標値」では目的関数を最大化したいか最小化したいか,もしくは推定値としたいかを選択します。今回の問題の場合は価格を最小化したいので「最小化」を選択してください。

  • 手順②
    変数セルの設定

    次は変数セルの選択です。ここでもセル番地を指定します。変数セルというのは,計算させるにあたって変化させたいセルのことです。今回の場合は各食品の重量がそれに該当します。上記で例として示したExcelシートではF3:F5が変数セルとなります。

  • 手順③
    制約条件の設定

    次に制約条件を入力していきます。今回の例では,制約条件は栄養素1~3について,実際の摂取量が必要な摂取量以上でなければならない,というものです。

    制約条件を追加するためには右側の「追加」をクリックします。ダイアログが開きます。

    「セル参照」には計算によって変化する値(実際の摂取量)の入力されているセル番地を,その右側のリストボックスには任意の比較方法を,制約条件には制限の基準値となる値(必要な摂取量)もしくはそれが入力されているセルのセル番地をそれぞれ入力します。入力が終わったらOKでをクリックしてください。

    最終的に以下のようになっていればOKです!

  • 手順④
    解決方法の選択

    次は解決方法を選択します。線形計画問題では,「シンプレックスLP」を選択しておけばOKですので今回もそれを選んでください。線形計画問題以外の問題,たとえば目的関数や制約条件が線形でないものの場合は他の解決法を選択する必要があります。

  • 手順⑤
    ソルバーの実行

    各種パラメータを入力したので,いよいよ問題を解いていきます。右下の「解決」をクリックしてください。

    すると,以下のようなダイアログが表示されます。「ソルバーによって解が見つかりました。」となっていればOKです。

    「OK」をクリックするとExcelの画面に戻ります。下記のように,変数セルに設定したセル(摂取量のセル)に自動的に値が設定されています。これで線形計画問題を解くことができました!

まとめ

今回はExcelのソルバーを使って実際に線形計画問題を解いてみました。

ソルバーを利用する場合,手順がやや多いので複雑に感じるかもしれませんが,慣れてくるとパラメータの設定等も手早く行える様になるかと思います。

次回は,Excelのソルバーを利用して,整数計画問題を解いてみたいと思います。

次回の記事はこちら↓

連載目次

  1. Excelに「ソルバー」アドインを追加しよう!
  2. Excelでソルバーを使って線形計画問題(栄養問題)を解く現在のページ
  3. Excelでソルバーを使って整数計画問題(献立問題)を解く
  4. Excelでソルバーを使って食事最適化法を試してみる
  5. ExcelのソルバーをVBAで自動化する方法
タイトルとURLをコピーしました