ディド女王の牛の皮 ― 3000年前から人類が解いてきた『最適化』の話

2026.05.08

解説

ディド女王の牛の皮 ― 3000年前から人類が解いてきた『最適化』の話

紀元前9世紀のカルタゴ建国神話に登場する女王ディドは、牛1頭の皮を細く裂いて半円形に置き、限られた資源で最大の領土を確保しました。これが人類最古の「最適化問題」です。本記事では、3000年前のディドの問題から現代の数理最適化までの系譜をたどり、看護師シフト・配送ルート・在庫発注量の3つのケースをGoogle OR-Toolsで実際に計算した結果を紹介します。

プロローグ:紀元前9世紀、女王ディドと牛1頭の皮

いまから約3000年前、現在のチュニジア北部の海岸に、フェニキアからの逃亡者を率いた一人の女性が上陸しました。彼女の名はディド。後にカルタゴを建国する伝説の女王です(Wikipedia: Isoperimetric inequalityUniv. of Illinois: The Problem of Queen Dido)。

上陸したディドは地元の王と土地の取引をします。王は意地悪く、こう告げました。

「牛1頭の皮で囲める分の土地なら、お前にやろう」

普通に考えれば、せいぜい畳数枚分の土地しか得られません。しかしディドは違いました。彼女は牛の皮を細い細い紐に切り裂き、それを繋いでひと続きの長い紐にしたのです。そしてその紐を海岸線に沿って半円形に置き、内側の土地をすべて手に入れました。これがカルタゴの始まりです。

この逸話、実は人類最古の最適化問題として知られています。「限られた資源(皮)で目的(面積)を最大化する」という構造は、3000年経った現代の経営課題とまったく同じ。なぜディドは半円を選んだのか? 本当にそれが最大なのか? ── これは数学的に「等周問題(isoperimetric problem)」と呼ばれ、紀元前2世紀のゼノドロスが「同じ周長なら円が最大面積」を経験則として示し、19世紀のシュタイナーがようやく厳密に証明しました。

試しに、皮の長さを L=100 として、いくつかの囲い方の面積を比べてみます。

Article Image

細長く囲うと面積はわずか225。バランスを取って正方形寄りにすると600。「最適な長方形」(縦L/4 × 横L/2)でも1250。それに対して半円は1592 ── 同じ皮の長さで、最も賢い長方形よりもさらに約27%広い土地が手に入ります。ディドは紀元前9世紀に、この「半円が最強」という直感を持っていたのです。

私たちの仕事も、突き詰めればディドと同じ問いの繰り返しです。「限られたリソース(人・時間・お金)で、何かを最大化(または最小化)したい」。本記事ではこの3000年続く問いを「数理最適化」という現代の道具で解いてみます。実際にコードを書いて回した結果も載せますので、ぜひそのインパクトを感じてみてください。

数理最適化とは何か:ディドの問題を分解する

最近よく聞く「AI」と、本記事で扱う数理最適化は別物です。両者の違いを最初に押さえます。

  • AI(機械学習):過去のデータから「次に何が起きるか」を予測する技術。例:来月の売上予測、画像分類、需要予測
  • 数理最適化:制約条件のもとで「どう動けば一番得か」を計算で割り出す技術。例:シフト表作成、配送ルート決定、在庫量決定
  • 両者は競合ではなく補完関係です。「需要をAIで予測 → その予測に基づいて在庫量を最適化」のように、セットで使うのが本来の姿です。

    数理最適化のすべての問題は、3つの要素に分解できます。

  • ① 決定変数(Decision variables):自分が決められること(ディドの場合:皮で囲む形)
  • ② 制約条件(Constraints):守らなければいけない条件(皮の長さ100、海岸線に沿う)
  • ③ 目的関数(Objective function):最大化(または最小化)したい数(面積)
  • この3要素を書き出せれば、後はソルバー(最適化計算エンジン)が自動で最適解を見つけてくれます。今回はGoogle製のオープンソース最適化エンジン「OR-Tools」を使い、自分のMacでコードを実行した結果をそのまま載せます。

    ケース①:看護師のシフト表を70ミリ秒で組む

    シフト作成は、多くの現場が「ベテランが半日かけて手作業で組む」業務の代表格です。看護師、コールセンター、飲食、警備…。組合せが膨大で、休み希望や夜勤の偏りまで気にすると人間にはなかなか辛い作業です。

    問題設定

  • 看護師 8 名、14 日間、シフトは早番/遅番/夜勤/休 の4種
  • 1日あたり 早番2人・遅番2人・夜勤1人 が必要(合計5人勤務)
  • 夜勤の翌日は必ず休み
  • 14日間で最低3日休み
  • 連続勤務は6日まで(7日連続不可)
  • 目的:夜勤回数の偏りを最小化(公平性)
  • これを OR-Tools の制約プログラミング(CP-SAT)で解きました。

    Article Image

    結果:70ミリ秒で最適解が出ました(M3 Max MacBook Pro実行)。8人×14日×4シフトの組合せは理論上 4^112 ≒ 10^67 通りありますが、ソルバーは制約を活用して効率的に絞り込みます。

    夜勤回数を見ると、最大2回・最小1回で差は1回まで圧縮されています。手作業で組むと特定の人に夜勤が偏りがちですが、ソルバーは公平性を数式として追求できます。

    現実のシフトはもっと制約が多い(個人の希望、有給、スキルレベル、ペアワーク…)ですが、それも「制約条件」の形で追加するだけで対応できます。

    ケース②:配送ルートを最適化、走行距離を約半分に

    配送業の利益を圧迫する一番の要因は走行距離(=燃料費・人件費・時間)です。ヤマト運輸のCO₂削減目標、Amazonの配送効率、Uber Eatsの配達順…どれもVehicle Routing Problem(VRP)という古典的な数理最適化問題に行き着きます。

    問題設定

  • 配送拠点:1箇所(東京駅と仮定)
  • 配送先:15箇所(都内主要15エリア)
  • トラック:3台、各容量5件
  • 目的:全配送先を訪問して拠点に戻る、総走行距離の最小化
  • 「最適化なし」(拠点から各方面へ順番に出発)と「OR-ToolsのVRPソルバーで最適化」を比較しました。

    Article Image

    結果は劇的でした。最適化なし199.2 km → 最適化後 107.1 km、削減率46.2%。同じ15件を配送するのに、走行距離は半分以下になります。実際の配送業ではこの差がそのまま燃料費・人件費・CO₂排出量に跳ね返ります。

    この計算もMacで5秒。配送先が100箇所、200箇所と増えても、同じ仕組みでスケールします。

    ケース③:パン屋の発注量を、勘から数理に切り替える

    3つ目は在庫最適化。「明日の食パンを何個仕入れるか」── 多すぎれば廃棄、少なすぎれば品切れ。これはNewsvendor model(新聞売子モデル)という古典的問題で、解析的に最適発注量が求まります。

    問題設定(パン屋を想定)

  • 仕入価格 100円 / 個
  • 販売価格 250円 / 個
  • 売れ残ったら全廃棄(残存価値ゼロ)
  • 需要は確率的:平均80個、標準偏差25個(正規分布)
  • 臨界比率(critical fractile)= (販売価格 − 仕入価格) / 販売価格 = 0.6 から、最適発注量は Q* = 86 個。これを Monte Carlo シミュレーション(5万回試行)で検証し、4つの戦略を比べました。

    Article Image

    興味深いのは、「需要平均そのまま(Q=80)」でも30日累計 28.5万円、「最適化(Q*=86)」だと28.8万円と、その差は月2,331円。年間でも28,000円程度です。

    「思ったほど差がない」と感じたかもしれません。それこそが大事な気付きです。

  • 「勘で多めに仕入れ(Q=120)」だと、月5万円の機会損失(廃棄ロス)
  • 「勘で少なめ(Q=60)」も、月4万円の機会損失(売り逃し)
  • つまり、勘ベースの極端な仕入れこそが本当の損失源で、最適化の真価は「勘の暴走を止める」ことにある
  • 実際の店舗では商品数が数十〜数百あります。1商品で年28,000円の差でも、100商品なら年280万円。最適化は静かに、しかし確実に効いてきます。

    AIと最適化の使い分け:機械学習はパートナー

    ここまで読むと、AI(機械学習)と数理最適化の役割分担が見えてきます。

  • AI/機械学習:「明日の食パンの需要は何個か」「来週、どの曜日にスタッフが何人必要か」を予測する
  • 数理最適化:予測された需要をもとに、「では何個発注するか」「誰をシフトに入れるか」を計算で決める
  • つまり、AIで予測 → 最適化で意思決定という二段構えが本来の姿です。AIだけでも、最適化だけでも片手落ち。両方が組み合わさって、初めて経営の現場で機能します。

    「AIで全部解決する」というブームの裏側で、実は数理最適化のほうが地味に大きな利益を生んでいる、というのは業界では昔から知られた話です。

    中小企業でも、もう手の届く時代

    「うちみたいな会社には関係ない話でしょ?」と思われるかもしれません。実際、10年前まではそう言って良かったのです。最適化ソルバーは年間数百万円のライセンス料が必要で、専門家を雇う体力のある大企業向けの世界でした。

    でも、今は違います。

  • Google OR-Tools:商用利用OK・無料・本記事で実際に使ったソルバー。Pythonで数行から書ける
  • ChatGPT / Claude × 最適化:「シフトの制約を日本語で書いたらPythonコードを書いてくれる」レベルに到達。専門家がいなくても叩き台ができる
  • ノーコード最適化SaaS:シフト管理(Airシフト、HRMOS)、配送計画(Loogia、ODIN等)、在庫管理ツールに最適化機能が標準搭載される時代
  • 最適化に必要なのは、「自分の業務を3要素(決定変数・制約・目的)に分解する力」だけです。コーディングはAIが手伝ってくれます。むしろ自社の業務フローを言語化できるかどうかが鍵、というのは前回のハーネスエンジニアリングの記事でも触れた通りです。

    おわりに:3000年前のディドと、いまのあなた

    ディドが牛の皮を切り裂いたとき、彼女は数理最適化という言葉を知らなかったはずです。それでも「限られた資源を最大化する」という直感が、後の世にカルタゴを生み、地中海貿易の中心地を作り上げました。

    今あなたの会社のシフト表を組んでいるベテラン、配送ルートを朝決めている管理者、明日の発注量を悩んでいる店長 ── 彼らが日々向き合っているのは、本質的にディドと同じ問題です。違いはただ一つ、その答えを

  • 勘と経験で出すか
  • ソルバーに数十ミリ秒で出してもらうか
  • それだけです。そして3000年経った今、後者の入口は無料で開かれているのです。

    Kurasakuでは、シフト・配送・在庫・スケジューリングなど、業務に潜む最適化テーマの洗い出しから、実際の運用ツールの構築まで支援しています。「うちのこの業務、最適化できないかな?」というアイデアがあれば、一度お気軽にご相談ください。

    技術ブログ一覧へ戻る