0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

スプレッドシートのOpenSolverを用いて線形計画

0
Last updated at Posted at 2025-12-01

この記事はTimee Product Advent Calendar 2025のシリーズ2の2日目の記事です。
https://qiita.com/advent-calendar/2025/timee-product

自己紹介

タイミーに2025/6にデータアナリストとして入社したishidaです。前職ではIT企業でデータ分析のコンサルタントとして、R/Python/C++とかで統計・機械学習や最適化を使って意思決定支援/データ利活用支援を行っていました。Excelはほぼ毎日触っていました。

スプシでソルバーを使いたい

入社後は皆さんMacなので(私はwindowsを希望したら通ったのでwindowsユーザー)、Excel よりもスプレッドシートを使う機会が増えました。関数や可視化集計についてはExcelと近しいことができるので、ほとんど問題ありません。

ないかなあと諦めていたのがsolverです。solverがあると、予算配分・人員配置などの資源配分の問題であったり、モデルのパラメータの最適化であったり、スプシで完結して解ける問題の幅がぐっと広がります。Excelのsolverは重宝していたのですが、スプレッドシートでも調べてみると OpenSolver という拡張機能を使うことで線形計画法と混合整数計画法が解けるとわかったため、実際に試してみました。
https://opensolver.org/opensolver-for-google-sheets/

アドオンをインストール

拡張機能 > アドオン > アドオンを取得 から、open solverで検索すると出てくるのでインストールしましよう

「open solver」
image.png

想定する線形計画の問題

以下のような生産計画問題を考えます。

  • 原料Aを 1kg 製造するには 2 時間 かかり、5,000 円 の利益が得られる
  • 原料Bを 1kg 製造するには 3 時間 かかり、7,000 円 の利益が得られる
  • 製造時間は 40 時間以下
  • 製造量の合計は 15 kg 以下
  • 利益最大となるように、A・B をそれぞれ何 kg 製造すべきか?

スプレッドシートの設定

この問題を解くためのスプレッドシートでのセッティングは以下。
image.png

B2, B3 : 原料A, Bの製造量(適当な初期値)
C2, C3 : 1kgあたりの利益(5000, 7000)
D2, D3 : 1kgあたりの製造時間(2, 3)

F2     : 製造時間上限(40)
G2     : 製造量上限(15)
H2     : 製造量下限(0)

B5     : =B2*C2 + B3*C3(総利益)
B6     : =B2*D2 + B3*D3(総製造時間)
B7     : =B2 + B3(総製造量)

これで、セッティングは完了。
ここからOpenSolverで問題を解決していきます。

OpenSolver起動

拡張機能 > OpenSolver > Open sidebar で、Opensolverを起動します。

OpenSolver の設定

image.png

Objective Cell(目的セル)

  • B5(総利益)

Objective Sense(目的の方向)

  • maximise(最大化)

Variable Cells(変数セル)

  • B2:B3(原料A・Bの製造量)

Constrains(制約式)

  • B2:B3 >= H2 原料A,Bは0kg以上
  • B6 <= F2  原料A,Bの総製造時間は40時間以下
  • B2:B3 >= H2 原料A,Bの総重量は15kg以下

実行結果

「Solve Model」を実行すると、以下の最適解が得られます。
image.png

  • 原料A:5 kg
  • 原料B:10 kg
  • 最大利益:95,000 円

製造時間、製造量の制約もすべて満たしています。

  • 製造時間:5×2 + 10×3 = 40 時間
  • 製造量 :5 + 10 = 15 kg

制約式にintを設定すると、整数計画になります。
線形計画、混合整数計画について対応したものなので今はできないですが最小2乗法にも使いたいので、非線形でも使えるようになると嬉しい。

最後に、、タイミーでは一緒に働くメンバーを募集してます!ご興味があればぜひお話しましょう!
プロダクト採用サイトTOP
カジュアル面談申込はこちら

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?