検索条件
当サイトでは任意の額面を手持ちの切手を組み合わせて最小の枚数で用意する 切手組み合わせ計算ツール を公開しています。
その内部では整数計画問題ソルバである GLPK (Gnu Linear Programming Kit) を使って最適解を求めていますが、
同様のことを Microsoft Excel と付属ソルバを使って求めてみようと思います。
- Excel のオプション -> アドイン -> 管理 -> Excel アドイン -> ソルバーアドイン があるのを確認 -> 設定ボタンをクリック

- ソルバーアドイン にチェック -> OK ボタンをクリック

- 例えば次のようなフォーマットを用意します。

Excel ファイルは こちら
kitte.xlsx です。
- C2 セルに 組み合わせたい金額を入力します
- B5 セルから B24 セルには切手の単価を入力します。とりあえず現在発売中の切手の金額を入力します。
- D5 セルから D24 セルに手持ちの枚数を入力します。
- F5 セルから F24 セルに後ほど結果が代入されます。なんでもいいのですが、とりあえず 0 で埋めておきます。
- C26 セルは組み合わせ試行中の合計金額を表します。数式 =SUMPRODUCT(B5:B24,F5:F24) を入力します。この数式は (単価×枚数) の総和を意味します。
- C27 セルは組み合わせ試行中の合計枚数を表します。数式 =SUM(F5:F24) を入力します。これがこの問題の最小化させたい目的関数となります。
- メニューの データ タブ -> 分析 -> ソルバー をクリック


- 目的セルを C27 に設定します。このセルは合計枚数を示すものです。
- 目標値は 最小値 を選択します。合計枚数を最小にする解を得たいからです。
- 変数セルは F5:F24 にします。ソルバーによってこの範囲に各切手の枚数が代入されていきます。
- 制約条件の対象 に3つ条件を追加します。
- (1) C26 = C2
これによって合計金額が指定の金額と等しくなるように制約します。

- (2) F5:F24 <= D5:D24
これによって各切手の使用枚数が各々の在庫数以下であることを制約します。

- (3) F5:F24 = 整数
これによって切手の使用枚数が整数しか取り得ないことを制約します。
整数に制約したいときには真ん中のセレクトボックスで int を選択します。

- 制約のない変数を非負数にする にチェックします。切手の使用枚数はマイナスにはならないからです。
- 解決方法の選択 では シンプレックスLP を選択します。ここで解決したい問題が線形を示す問題だからです。
- 最後に 解決 ボタンをクリックします。
- 「整数解が見つかりました」と出たら成功です。
- ソルバーの解の保持 を選択して OK ボタンをクリックします。
- F5:F24 セル範囲に代入されている枚数が答えです。
- 「実行可能解が見つかりませんでした」と出たら、手持ちの切手では合計金額ちょうどの組み合わせが作れなかったということです。
- 計算前の値に戻す を選択して OK ボタンをクリックして戻り、在庫枚数などの条件を見直しましょう。