What's new に戻る

2025年12月25日より、JijZept AI は招待制ベータ版として提供を開始します。本記事では、JijZept AI の狙いと設計思想、実際の使い方のデモを紹介します。

JijZept AI をいち早く試してみたい方は、ぜひ下記LPページにあるウェイトリストにご登録ください!メールアドレスを入力するだけで完了します。ベータ版の招待コードが利用可能になり次第、順次ご案内します。

👉 JijZept AI ウェイトリスト登録

JijZept AIのランディングページ

はじめに

数理最適化は、製造スケジューリング、物流配送、資源配分など、意思決定を直接改善できる強力な手段です。一方で、現場で「解ける」状態に持っていくまでには、思っている以上に時間がかかります。業務の前提を理解し、制約を言語化して数理モデルに落とし込み、コードにして、ソルバーを回し、結果を解釈してまた直す。この反復が、最適化プロジェクト全体のリードタイムを押し上げます。

数理最適化プロジェクトの典型的な反復サイクル図

JijZept AI は、ユーザーが抱える最適化問題が解決される状態になるまでの時間を最小にすることを目的に開発している AI アシスタントです。つまり、最適化計算そのものを魔法のように自動化するというより、モデリング・実行・可視化・検証の往復回数を減らし、反復サイクルを速くすることにフォーカスしています。

従来フローで詰まりやすいポイント

日々最適化プロジェクトの業務に従事したり、最適化プロジェクトを遂行している多くの経験者と直接お話しをしたりした中で感じたのは、最適化プロジェクトが停滞しやすいのは、能力の問題というより「作業が分断されている」ことが原因であるケースが多いということです。数理モデルの検討、実装、実行、可視化が別々のツールや担当に分かれ、ちょっとした仕様変更でも行き来が増えます。典型的には、次のような箇所がボトルネックになります。

ステップ詰まりやすい理由
全体手戻りが発生し、往復が増える
定式化専門知識が必要で、試行錯誤が多い
実行ソルバーの設定や「どこまで解くか」の判断が難しい
結果解釈可視化・分析の作り込みに手間がかかる

JijZept AI の狙いと全体像

JijZept AI は、自然言語での要求から、JijModeling によるモデリング、JijZept Solver による実行、そして可視化までを「対話の中で」つなぎます。実務では、最初から完璧なモデルができることより、素早く叩き台を作って検証し、学んだことを次のモデルや検証事項に反映できることの方が重要です。JijZept AI は、その反復を短いループに圧縮することを目指しています。

JijZept AIの全体像図

JijZept AI でできること

JijZept AI に最適化したい課題を自然言語で入力すると、まずその課題を定式化し、 JijModeling のコードを生成します。コードが生成される過程で、その構文や実行可能性は自動的にチェックされます。そのうえで、生成したモデルを JijZept Solver に渡して最適化計算を実行し、得られた解を表やグラフでユーザーに提示します。最適化計算はクラウド実行を前提にした構成のため、ローカルでソルバー環境を整えるところから始めなくても、まずは検証のループを回せます。ひとつのチャットの中で「モデルを作る」「回す」「結果を見て直す」という最適化問題を解く一連のワークフローをシームレスに実行できる点が、作業の分断を減らすアプローチです。

また、実務のモデリングでは「似た問題を再利用する」ことが多いため、類似問題の参照(ナレッジ検索)も想定しています。ここは今後の磨き込み領域ですが、反復の高速化と再利用性は一貫して重視しています。

なぜ AI と相性が良いのか

JijZept AI がサービスとして成立できる理由は、単に LLM が賢いからというより、Jijが構築している基盤側 (JijModeling / JijZept Solver) が「AI が扱いやすい形」を意識して設計されている点にあります。

JijModeling:数式とデータを分けて扱う

多くのモデリングツールでは、数式の中に具体的な数値が混ざりがちです。人間にとっては直感的でも、AI にとっては「どこが構造で、どこがデータか」が曖昧になりやすい構造です。

JijModeling では、数式(problem)とデータ(instance_data)を分離して扱います。これにより、AI はまず数式の構造に集中してモデルを生成し、データは後から注入する、という整理がしやすくなります。結果として、汎用的なモデルを作りやすく、検証や再利用も進めやすくなります。また、JijModeling は数理モデルを記述するためのPythonベースの "プログラミング言語" (Embedded Domain Specific Language) であるため、AI は Python コードを生成するのと同じタスク強度でコードを生成でき、またAIが生成したコードの妥当性を検証しやすい点も重要です。

JijZept Solver:実行までの「設定の壁」を低くする

従来のソルバー運用では、問題に応じたパラメータ設定や、計算時間と精度のトレードオフ判断が必要になることがあります。JijZept Solver は、細かなチューニングを前提にせずに最適化計算を実行できる体験を目指しています。これにより、AI 側から見たソルバーによる最適化計算の実行は単に「生成したモデルを渡して結果を得る」という一つのツール呼び出しに圧縮され、AIのコンテキストをよりシンプルに保つことができます。

ここは誤解を避けるために補足すると、最適化の現場では「どの程度の時間で、どの程度の品質の解を出すか」という要件がプロジェクトごとに異なります。JijZept AI はその判断を不要にするというより、まず検証を前に進めるための初速を上げ、必要に応じて設定や改善の議論に入れる状態を作る、という位置づけです。

使い方デモ:物流会社の積載最適化

ここからは、実際に JijZept AI を使って、少し実務寄りの問題を解く流れを示します。例として、物流会社「サクラ運輸」の積載計画を扱います。この問題のポイントは、単純なナップサックではなく、貨物の組み合わせによって追加の利益(あるいはコスト)が発生することです。

実際の JijZept AI 上のセッション

JijZept AIのチャット画面全体

問題設定

最大積載量 2,000kg のトラックに、5種類の貨物(A〜E)を積み込みます。各貨物には重量と基本利益があり、さらに組み合わせに応じてシナジー利益(またはコスト)が発生します。

貨物重量 (kg)基本利益 (万円)
A400120
B600180
C30090
D500150
E700210

シナジー利益は次の行列で与えられ、負の値は「一緒に運ぶとコストが発生する」ケース(たとえば別スペースが必要など)を表します。

ABCDE
A025150-10
B25030200
C15300105
D02010015
E-1005150

Step 1: ユーザーが自然言語で要件とデータを入力する

チャット画面に、上の表や前提をそのまま自然言語で入力します。JijZept AI はこのプロンプトから「何を最大化したいか」「何が制約か」「どんな追加効果があるか」を読み取り、定式化を実行します。

実際に入力したプロンプト
物流会社「サクラ運輸」では、最大積載量2000kgのトラック1台に、5種類の貨物(A, B, C, D, E)を積み込む計画を最適化したいと考えています。

各貨物には基本利益と重量がありますが、特定の貨物の組み合わせを一緒に輸送すると追加のシナジー利益が発生します(例:生鮮食品と冷蔵設備の組み合わせ)。

貨物データ:
| 貨物 | 重量 (kg) | 基本利益 (万円) |
|------|----------|----------------|
| A | 400 | 120 |
| B | 600 | 180 |
| C | 300 | 90 |
| D | 500 | 150 |
| E | 700 | 210 |

シナジー利益マトリックス(万円):
| | A | B | C | D | E |
|---|----|----|----|----|-----|
| A | 0 | 25 | 15 | 0 | -10 |
| B | 25 | 0 | 30 | 20 | 0 |
| C | 15 | 30 | 0 | 10 | 5 |
| D | 0 | 20 | 10 | 0 | 15 |
| E | -10| 0 | 5 | 15 | 0 |

負の値は非互換性コストを示します(例:貨物AとEは別々の保管スペースが必要)。

総利益(基本利益 + シナジー利益)を最大化する積み込み計画を求めてください。

JijZept AIのチャット入力画面

Step 2: JijZept AI が数理モデルを生成する

JijZept AI はこの問題を二次ナップサック問題(Quadratic Knapsack Problem)として捉え、目的関数に二次項(シナジー)を含む形で定式化しました。今回の設定では、目的関数は「基本利益の和」+「選んだ貨物ペアのシナジーの和」、制約は積載量(重量の合計が 2,000kg 以下)、決定変数は各貨物を積むかどうかの 0/1 変数になります。

JijZept AI が生成した JijModeling コード:

import jijmodeling as jm

problem = jm.Problem("Quadratic Knapsack Problem", sense=jm.ProblemSense.MAXIMIZE)

# プレースホルダ
n = jm.Placeholder("n")           # 貨物数
W = jm.Placeholder("W")           # 最大積載量
p = jm.Placeholder("p", ndim=1)   # 基本利益
w = jm.Placeholder("w", ndim=1)   # 重量
s = jm.Placeholder("s", ndim=2)   # シナジーマトリックス

# 決定変数
x = jm.BinaryVar("x", shape=(n,))

# インデックス
i = jm.Element("i", belong_to=(0, n))
j = jm.Element("j", belong_to=(0, n))

# 目的関数:基本利益 + シナジー利益
problem += jm.sum(i, p[i] * x[i]) + jm.sum([i, (j, j > i)], s[i, j] * x[i] * x[j])

# 制約:積載量以内
problem += jm.Constraint("capacity", jm.sum(i, w[i] * x[i]) <= W)

JijZept AIのモデリング結果画面

Step 3: JijZept AI がソルバーで最適解を得る

JijZept AI が数理モデルを作成した後、続けてそれをソルバーに入力して最適化計算を実行しました。このとき、JijZept Solver が最適化計算を行い、解を返します。今回の例では A・B・C・E が選択され、D は選ばれませんでした。

貨物重量 (kg)基本利益 (万円)選択
A400120
B600180
C30090
D500150-
E700210

数値で確認すると、重量は 400+600+300+700=2,000 kg でちょうど上限を使い切り、基本利益は 120+180+90+210=600 万円です。シナジーは (A,B)=+25、(A,C)=+15、(A,E)=-10、(B,C)=+30、(C,E)=+5 で合計 +65 万円となり、総利益は 665 万円になります。D は単体利益が 150 万円と悪くありませんが、D を入れると他の貨物を減らす必要があり、ペアのシナジー込みで見ると A・B・C・E の方が利益が大きくなる、という結果になります。

この計算結果は、LogiOR データセットで公表されている最適値 (ground_truth = 665) と一致しています。つまり、JijZept AI はゼロショットプロンプトでこの最適化問題を正しく理解し、最適解を見つけたことになります。

JijZept AIのソルバー実行結果画面

Step 4: JijZept AI が結果を可視化して検証する

最後に「結果を可視化して」と JijZept AI に依頼すると、最適解がグラフで表示されました。選択された貨物が強調表示され、積載量制限のラインも併せて見えるため、結果を読み解くための追加作業を減らせます。

JijZept AIの可視化画面

この例のように、シナジー(利益・コスト)を含む組合せ最適化でも、要件の説明からモデル生成、実行、可視化までを一つの対話の中で実行できます。

ヒューマンインザループで検証を加速する

ここまでのデモでは、要件の入力からモデル生成、ソルバー実行、可視化までをシームレスに進められることを示しました。実務ではこの流れを ヒューマンインザループ として回し、生成→実行→可視化→修正を短いサイクルで反復しながら、前提の曖昧さや解釈のズレを早い段階で洗い出していきます。JijZept AI が担うのは「それらしいドラフトを作る」ことに留まらず、検証に必要な一連の手順をつなぎ直し、意思決定に耐えるモデルへ育てるまでの往復を短くすることです。

このときの確認観点は、大きく四つに整理できます。まず目的関数では、KPIを何で代表させるか、ペナルティや優先度をどう置くかといった「最適化の方針」が適切に定義できているかを確かめます。次に制約条件では、運用ルールや例外をどこまで表現するかに加えて、必ず守る hard と、状況に応じて緩められる soft をどう切り分けるかが品質を左右します。三つ目は入力データで、粒度・単位・欠損の扱いを揃えたうえで、暗黙の前提を文章として明文化できているかを点検します。最後に、結果については、可視化だけでなく、簡単なケースでの整合性確認や感度分析を通じて、「なぜその解になるのか」を説明できる状態にしておくことが重要です。

この検証ループが速いほど、後工程での手戻りが減り、関係者が納得して採用できる計画に近づきます。そして、その検証ループを強力に支援するのが JijZept AI です。

今後の展望

JijZept AI は現在も開発を進めており、MCP(Model Context Protocol)サーバーとして外部の AI サービスから利用できる形や、VSCode 上でモデリング支援を受けられる拡張機能などを検討しています。ロードマップは変更される可能性がありますが、我々は最適化計算のワークフローを高速に実行できるようにプロダクトを伸ばしていく計画です。

JijZept AI 招待制ベータ版を公開:数理最適化のためのAIアシスタント - What's new - JijZept AI