Main Content

intlinprog の出力関数とプロット関数の構文

出力関数およびプロット関数とは

intlinprog は、アルゴリズムで特定のイベントが発生した後に、出力関数またはプロット関数を呼び出すことができます。これらのイベントには、ルート LP 問題を解くなどのアルゴリズムのある段階の完了、カットの追加、ヒューリスティックな方法の正常な完了、分枝限定時の新しい整数実行可能解の検索、相対ギャップの顕著な改善、分枝限定木における複数ノードの探索などが含まれます。

注意

intlinprog の出力関数とプロット関数は、他のソルバーのものと異なります。他の Optimization Toolbox™ ソルバーの出力関数とプロット関数については、出力関数とプロット関数の構文およびプロット関数を参照してください。

  • savemilpsolutions という組み込み出力関数が 1 つあります。この関数は、アルゴリズムがイベント発生時に見つけた整数実行可能点を集めます。実行可能点はベース ワークスペースの xIntSol という行列に配置されます。この行列の各列が 1 つの整数実行可能点を表します。また、目的関数の値を fIntSol というベクトルに保存します。このベクトルの各エントリは、xIntSol で対応する列の目的関数です。

  • optimplotmilp という組み込みプロット関数が 1 つあります。この関数は、最良の目的関数値について内部計算された範囲をプロットします。使用例については、工場、倉庫、販売店割り当てモデル: ソルバーベースを参照してください。

出力関数やプロット関数を呼び出すには、OutputFcn または PlotFcn に、出力関数やプロット関数へのハンドルを含む名前と値の引数を渡します。以下に例を示します。

options = optimoptions(@intlinprog,...
    OutputFcn=@savemilpsolutions,PlotFcn=@optimplotmilp);
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,options);

出力関数やプロット関数が複数ある場合、cell 配列として渡します。

options = optimoptions(@intlinprog,...
    OutputFcn={@savemilpsolutions,@customFcn});

カスタム関数の構文

カスタムの出力関数やプロット関数を記述するには、次の構文を使用します。

function stop = customFcn(x,optimValues,state)

intlinprog は、ユーザーが記述した関数に xoptimValues および state のデータを渡します。

  • stoptrue に設定すると、intlinprog を停止します。false に設定すると、intlinprog の続行を許可します。

  • x — 空の行列 []、あるいは実行可能点である N1 列のベクトル。x が空でない行列になるのは、intlinprog が新しい整数実行可能解を見つけたときだけです。x が空でない行列になりうるのは、phase'heuristics' または 'branching' の場合です。

  • optimValues — 構造体。詳細については、optimValues 構造体を参照してください。

  • state — 以下のいずれかの値です。

    • 'init'intlinprog が実行を開始しています。この状態を使用して、必要なプロットやデータ構造体を設定します。

    • 'iter'intlinprog が問題を解いています。ソルバーの進行状況に関連するデータにアクセスします。たとえば、プロットやファイル操作を実行します。

    • 'done'intlinprog が問題を解く処理を完了しました。ファイルを閉じる、プロットの注釈を完了するなどの操作を行います。

出力関数やプロット関数の例については、組み込み関数の savemilpsolutions.m または optimplotmilp.m を参照してください。

optimValues 構造体

optimValues フィールド意味
dualbound

最小化問題の場合は目的関数値のグローバル下限、最大化問題の場合はグローバル上限。phase = 'rootlp' の場合は空です。

fval

整数実行可能点でこれまでに見つかった最良の目的関数。phase = 'rootlp' のとき、fval はルート ノードの目的関数値です。これは整数実行可能点でないことがあります。

numfeaspoints

現在の解を改善する整数実行可能解の検出数。

numnodes

探索されたノードの数。phase = 'branching' の場合のみ、非ゼロです。

phase

アルゴリズムの段階。"highs" アルゴリズムの場合、phase は常に '' です。"legacy" アルゴリズムの場合、取りうる値は以下のとおりです。

  • 'rootlp'intlinprog がルート LP 問題を解決しました。

  • 'cutgen'intlinprog がカットを追加して下限を改善しました。

  • 'heuristics'intlinprog がヒューリスティックな方法によって新しい実行可能点を見つけました。

  • 'branching'intlinprog が分枝限定木にノードを作成し探索しています。

  • 'none'state'done' であり、新しい点は見つかっていません。

relativegap

dualboundfval の間の相対ギャップ。

  • "legacy" アルゴリズムの場合、relativegapoutput 引数での指定と厳密に同じである 0 ~ 100 のパーセンテージです。

  • "highs" アルゴリズムの場合、relativegap は 0 ~ 1 のスカラーです。

relativegap は、phase = 'rootlp' または numfeaspoints = 0 の場合は空になります。

time

これまでの経過秒数。state = 'init' の時点から tictoc で測定されます。