MSI 用

Xpress-Optimizer
Reference Manual
Release 13© Copyright Dash Associates 1984–2002
本マニュアル中の商標のうちDash Associatesのものでないものについては承認を受けてあります。
このユーザーガイド内の全ての会社、製品、名前、データは架空のもので、Xpress-MPの使い方を説明するためだけのものです。名前やデータが実在のものと似ていても偶然の結果です。

Dashへのお問い合わせ
Xpress-MP の使用についてのご質問，ご意見は、以下のテクニカルサポートにご連絡ください。
Xpress-MP ソフトウェアの販売や注文について のお問い合わせは、あなたの地域の販売所か以下のDash 販売所にご連絡下さい。
最新のニュース、 Xpress-MP ソフトウェアやドキュメントのアップデートについては、Xpress-MP のウェブサ
イトをご覧下さい。
http://www.dashoptimization.com/
USA, Canada and The Americas Elsewhere
Dash Optimization Inc. Dash Optimization Ltd.
560 Sylvan Avenue Quinton Lodge, Binswood Avenue
Englewood Cliffs Leamington Spa
NJ 07632 Warwickshire CV32 5RX
USA UK
Telephone: (201) 567 9445 Telephone: +44 1926 315862
Fax: (201) 567 9443 Fax: +44 1926 315854
email: support-usa@dashoptimization.com email: support@dashoptimization.com
USA, Canada and The Americas Elsewhere
Dash Optimization Inc. Dash Optimization Ltd.
560 Sylvan Avenue Blisworth House, Church Lane
Englewood Cliffs Blisworth
NJ 07632 Northants NN7 3BX
USA UK
Telephone: (201) 567 9445 Telephone: +44 1604 858993
Fax: (201) 567 9443 Fax: +44 1604 858147
email: sales@dashoptimization.com email: sales@dashoptimization.com
Xpress-Optimizer Reference Manual Contents i

目次
1 はじめに 1
1.1 概要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Xpress-Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 整数計画法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Xpress-Optimizerの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 本マニュアルの構成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6 表記法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Xpress-MP に よ る 問 題 の 解 決 9

MSI 用2.1 概要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 初期化と終了. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 問題を読む. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 問題を解く. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
2.5 結果を見る. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
2.6 最適化の例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7 クイックリファレンス. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
3 最 適 解 ， 実 行 不 能 ， 非 有 界 15
3.1 求解過程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 実行不能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3 非有界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4 スケーリング. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
4 求 解 ア ル ゴ リ ズ ム の 性 能 19
4.1 アルゴリズムの選定. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2 シンプレックス法の性能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19TENSAKU
4.3 バリア法の性能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.4 整数計画法の性能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
5 アルゴリズムの実行 29
5.1 行列を見る，修正する. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2 事前分析のはたらき. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.3 コールバックを使う. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
5.4 カットマネージャのはたらき. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.5 目標計画法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6 コ ン ソ ー ル と ラ イ ブ ラ リ 関 数 41
6.1 コンソールモード関数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Xpress-Optimizer Reference Manual Contents ii

6.2 関数の記述要領. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7 制御パラメータ 255
7.1 制御パラメータの扱い方. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
8 問 題 特 性 301
8.1 問題特性の検索. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .301
9 エラーメッセージ＆リターンコード 317
9.1 Xpress-MP Optimizerのリターンコード. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
9.2 Optimizer のエラーコード. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
A ログとファイル形式 339
A.1 ファイル形式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
A.2 XMPS 行列ファイル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
A.3 ASCII 解ファイル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348
A.4 ASCII レンジファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .353
A.5 ディレクティブファイル (.dir) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .357
A.6 行列変更ファイル (.alt). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358
A.7 グローバルログ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
索 引 361
Xpress-Optimizer Reference Manual Overview 1

Introduction

1

MSI 用1 はじめに
1.1 概要Xpress-Optimizerは Xpress-MPソフトウェアセットの一部で、様々な最適化問題に適用できる強力なツールです。コンソールやグラフィカルインタフェースにより、またライブラリ関数によって直接アクセスでき、Optimizerは最良の結果を得るために高速で柔軟性のある簡単な機能を備えています。最高技術を駆使したアクセスルーチンや最適化アルゴリズムは、解くのにかな
りの時間がかかりそうな大規模な問題の攻略を可能にします。プログラム単体で、あるいはユーザ自身のプログラムにおいてタスクを処理する場合、 Xpress- Optimizerは、無限の可能性の世界ヘの扉を開きます。コンソール Xpressユーザの場合、「コンソールモード」にはOptimizerの重要な核となる機能を使用するためのたくさんのコマンドがあります。MPSやLP形式ファ
イルからモデルは読み込まれ、Optimizerにサポートされたアルゴリズムで最適化され、様々な方法で解を見ることができます。更に、アルゴリズムに様々な影響を与える制御パラメータの設定により、最適化プロセスを制御できます。
Xpress-MP Optimizer ライブラリのユーザは、更に「アドバンストモード」を利用することで、コンソールモードの全ての機能が使えます。このインタフェースの拡張により、Optimizer の内部データ構造へアクセスできたり、大規模な行列の管理ができます。カット面の追加ができ
るカットマネージャは、混合型整数計画問題を効率的に解くための Tailor-made な戦略の実現性を提供します。
しかしながら、ライブラリの一番の利点は、ユーザが自分のプログラムでOptimizerを呼びだし、自身のアプリケーションと Xpress- Optimizerのパワーを連結し、上記のことを自動的に行えることです。Ｃ，Fortran，Java，VisualBasicを含む汎用言語で、ライブラリ関数が使えます。
表記法についてC言語の点から説明しますが、他の言語の場合の相違点や簡単な例は Xpress-MP
Essentialsマニュアルに載っています。
Xpress-Optimizer Reference Manual The Xpress-Optimizer 2

Introduction

1

1.2 Xpress-Optimizer
Xpress-Optimizer は、行列構造を最大限に利用するよう、綿密にプログラムされた最適化ツールです。整数計画法については、多様な離散要素、すなわち実行可能解で非線形性を満たさなくてはならない要素を扱えます。ここではそのような解を、学術用語としての厳密な正確さは別にして、整数解と呼びます。
Optimizerは、次の３つの方法の中の１つにより問題を読み込みます。
• MPS形式の行列ファイル• バイナリ形式（ Xpress-Modelerにより作成したBIF形式）ファイル• LP形式の行列ファイル
Optimizer は、主・双対シンプレックス法による線形最適化、あるいはライセンスを持っていればニュートンバリア法で最適化を行います。整数解の探索法を指示することができます。レンジ（感度分析）も実施可能です。通常、Optimizer は解を解ファイル（.sol）に書き出します。表計算やデータベースソフトとのインタフェースとして ASCII 形式の解ファイルを作成できます。
Optimizer は、また、途中の解を基底ファイルの形式で保存できます。ある線形問題の最適解や変数の状態を基底ファイルとして保存しておき、よく似たモデルのシンプレックス LP 解のパスは、出発点としてその基底ファイルを使うと、短くなる場合があります。

MSI 用MPS形式やLP行列ファイルは、エディターで調べたり修正できるASCIIファイルですが、解ファイル、レンジファイル、workファイルはバイナリ形式に圧縮されているため、エディタ
ーで見ることはできません。これらのファイルの説明と表記法については、参考資料Ａ「ログとファイル形式」をご覧下さい。

1.3 整数計画法
線形計画法で精度よくモデル化できる問題は多数ありますが、決定問題の中核に離散的な決定要素のある状況があります。このような非線形性の機能が必要なものには、主として以下の３つがあります。
• 離散的な集合の中から要素を選ぶ
Xpress-Optimizer Reference Manual Integer Programming Considerations 3

Introduction1• 論理的な関係を表す• 関数の大域的最適解を求める

このような問題は Xpress-Mosel， Xpress-BCL， Xpress-Modeler のいずれかを使うことでモデル化できます。ライセンスがあれば、Optimizer で大域的最適解を求めることができます。普通、基本的構造は線形ですが、非線形性がいくつかの変数に関して分離型のときも、うまく使えます。
Xpress-MPには、大域的最適化のために以下の道具がそろっています。
２進変数(BV)— 0か1のどちらかをとる変数。0-１型変数
整数変数(UI)—整数値のみを取る変数。上限を指定する必要があります
部分的整数変数(PI)—指定された限界までは整数値を取り、それ以上は任意の値を取る変数準連続変数(SC)—０かある範囲の値をとる変数。変数が全て使われるか、
最低限以上使う必要のある状況のモデルに使われます
準連続整数変数(SI)—０、またはある範囲の値を取る整数変数
タイプ１の特殊順序集合(SOS1) —変数の順序付き集合で、０以外の値を取る変数が高々１
つのもの
タイプ２の特殊順序集合(SOS2) —変数の順序付き集合で、０以外の値を取る変数が高々２つで、２つあるときは変数が集合の中で隣り合っている
もの
Optimizer は最適解を見つけ、最適であることを確認するために分枝限定法を使用します。探索法については、多くの問題でうまくいった方法をデフォルトとして設定してあります。しかしながら、大型の MIP 問題ではモデル化の知識が非常に重要です。大型の実用モデルを解く
際に、小型化した例題で注意深く実験してみることは、常に有効であると思われます。
（事前分析を除いて）Optimizerにおける整数計画法の機能は、LP問題としての最適化の後に用いられます。入力データにあった非線形性や離散性は、ここで考慮されます。種々のインタフェイスにおけるOptimizerよる整数計画の使用例は、すでにリファレンスマニュアルの前に読んだとは思いますが、 Xpress-MP Essentialsに示してあります。
Xpress-Optimizer Reference Manual Running the Xpress-Optimizer 4

Introduction

1

MSI 用1.4 Xpress-Optimizerの実行
初期化
Optimizer を実行するには有効なパスワードファイル xpress.pwd が必要です。これは、特定の機械，イーサーネットアドレス，ドングルによって作られます。これらのどれかが存在しない場合には、「No purchased authorization found」というメッセージが画面表示され、「studentmode（学生モード）」に入ります。そして、この制限のある状態で動作を続けます。Optimizer
はパスワードファイルを Optimizer のあるローカルディレクトリで探します。そこになければ、環境変数 XPRESS に指定されたディレクトリを探します。パスワードファイルは Xpress-MP
DLLs ，executables と同じディレクトリに、常時置いておく必要があり、XPRESS 変数を設定する必要なく見つけられることに注意してください。
続いて、Optimizer は問題に名前をつけます。問題名を指定しなければ、コンソールユーザは、指定するように促されますが、それを無視すると、デフォルトの問題名 $$$$$$$$ となります。ユーザに指定された問題名については、ドライブ，パスとファイル名だけが受け付けら
れ、拡張子は無視されます。
問題名 problem_name は Optimizer が作成する各拡張子で区別された種々のファイル全ての基本として使われます。行列（MPS）ファイルは problem_name.mat，バイナリのインターフェースファイルは problem_name.bif，解ファイルは problem_name.sol です。
問題名が決まると、Optimizerはoptimizer.iniという初期化ファイルを読みこみます。これは、Optimizerの実行形態にかかわらず、デフォルトで使用される記述やコマンドを含むASCII
形式のファイルです。このコマンドは制御パラメータの設定や表示に限ることなく、行列入力，最適化等、他の一般的なコマンドを含むことができます。初期化ファイルが存在しない、もし
くは見つからない場合、Optimizerは組み込みのデフォルトで初期化されます。

コンソールXpressオ プ シ ョ ン
コンソール Xpress ユーザの場合、以下のようにして Optimizer を呼びだします。
C:\> optimizer [problem_name] [@filename]]
Optimizerが起動される際、問題名はオプションでコマンドラインに指定できますが、省略すると、上記のように促されます。
Xpress-Optimizer Reference Manual Running the Xpress-Optimizer 5

Introduction

1

また、コマンドライン上で、@に続いて指定されたセカンドファイルからコマンドを読んでコンソール Xpress をバッチモードで実行することができます。＠とセカンドファイル名の間にはスペースを入れられません。このようにすると、コマンドがセカンドファイルからキーボー
ド入力のように読まれます。一見これはリダイレクト機能（つまり、＜）のようですが、＠機
能はバッチモード動作で他のプログラムから Optimizer が呼びだされるときに使えます。
バッチファイルがある場合、それは完結している必要があります。キーボードに戻ってコマンドの続きを入力することはできません。STOP や QUIT コマンドがファイル中には必要で、そうしないとシステムはハングアップします。
バッチファイルがコマンドラインに指定されない場合は、初期化処理の後、Optimizerのプロンプト”＞”が表示され、標準入力からコマンドが読まれます。

コンソール Xpressでの最適化実行の中止
Optimizer のコンソール Xpress ユーザの場合、CTRL-C を入力すると、 Optimizer は実行中のコ

マンドを中断し、プロンプト’＞’に戻ります。この方法で中断しようとすると、安全な状態まで計算を実行した後、終了し、プロンプトに戻ります。その時の解は解ファイルに保存され、

MSI 用後で中断したコマンドを再入力すると、その時点から繰返しを再開します。
次のコマンドが先回りしてタイプしてあった場合、OSによってはCTRL-Cが使えないことがあります。

終了
Optimizerには次の３種類の終わり方があります。
(a) エラーのない正常終了(b) 解の状態を示すエラーコードを伴う終了(c) 致命的なエラーによる即時終了
Xpress-Optimizer Reference Manual Structure of this Manual 6

Introduction1

正常終了は、QUIT や STOP コマンドで正常に終了したことを示します。ただし、コマンドの実行結果や致命的でないエラーがあったかによるので、問題が解けて最適解が得られたかどうかは分かりません。
コンソール Xpress ユーザが STOP コマンドで Optimizer を終了する場合、解の状態を示す０でないリターンコードが返されます。リターンコードのリストについては９章「エラーメッセー
ジ＆リターンコード」をご覧ください。
致命的なエラーが発生すると、Optimizerは直ちに停止します。これは、必要なファイルが見つからない，ディスク容量に空きがない，メモリが足りないといった場合に起きます。

1.5 本マニュアルの構成
マニュアルは主に 2 つの部分で構成されています。まず、2 章「 Xpress-MP による問題の解決」には、Optimizer の基本的な使い方に関する概要が書かれており、よく使うルーチンやその設定方法が紹介されています。次に３章「最適解，実行不能，非有界」では、最適化の過程で発生する問題や問題から得られる解についての概要を示してあります。４章「求解アルゴリズムの性能」には、頻繁に使う制御の説明が、求解過程を高度化する方法のいくつかの考えと一緒に説明してあります。最後に、５章「アルゴリズムの実行」には、Optimizer の使用方法についての、より高度な話題が詳述されています。
以上の５章に続いて、リファレンスを示す３章があります。６章「コンソールとライブラリ関数」にはコンソール，アドバンストモードの全関数をアルファベット順に詳述してあります。
７章「制御パラメータ」と８章「問題特性」には様々な制御と特徴についてのリファレンスがあり、９章「エラーメッセージ＆リターンコード」には、Optimizerのエラーとリターンコードのリストがあります。そして、ファイルフォーマットについての説明を付録に示します。

1.6 表記法
マニュアルでは以下のような標準表記法を用います。
コンピュータコードフラグはfixed width fontで、数式や変数はイタリック体で表してあります。ライブラリ関数の拡張については、Ｃ言語を用いて説明され、配列等のような構造については、Ｃの言語表記が用いられます。
Xpress-Optimizer Reference Manual Conventions Used 7

Introduction

1コンソールモードルーチンについては、コンソール，ライブラリとも、通常、コンソールコマ
ンドが括弧に入れられた形で書かれます。コンソールユーザに関係ない章では、ライブラリフ
ォームのみで示されます。コンソールとライブラリの間のコマンドや制御の文法的な違いは、

MSI 用

６章「コンソールとライブラリ関数」をご覧ください。以下の表記法については、適宜使用します。
• 角括弧 […] はオプションを囲みます• 波括弧 {…} は選択された１つのオプションを囲みます• 式の中のイタリック体はメタ変数を表します。メタ変数に続く説明に使用方法を示します• 「.」は、「リターンキーあるいはエンターキーを押す」という意味です。通常、大きなキーのマークです• CTRLに１文字続くものは、「 CTRLキーを押した状態で、その文字を入力する」の意味です。
CTRL，コントロールキーは、通常、キーボードの左下隅にあります• 縦棒の「|」は、多くのキーボードでは¦ですが、画面上では、しばしば中央の隙間がない状態で表示され、混乱します。UNIXでは、これをパイプと言います。ＰＣ画面上で箱を描くのに時々使われる文字とは違うので注意してください。ASCII形式では、「|」はヘキサコード「７Ｃ」，１０進法「124」です。
Xpress-Optimizer Reference Manual Conventions Used 8

Introduction

1

Xpress-Optimizer Reference Manual Overview 9Problem-Solving with

2
2 Xpress-MPによる問題の解法
Xpress-MP

2.1 概要Xpress-Optimizer では、コンソールモードコマンドによる中核的機能の操作、アドバンストモ

ードルーチンによる内部データ構造への広範囲なアクセスが提供され、広く様々なルーチンが使えます。 Xpress-Optimizer のユーザは様々で、扱う問題も広範囲に渡りますが、ほとんどの最適化は、ルーチンを「自然にグループ化」し、標準テンプレートで実行されます。ここでは、このことについて示します。
一般的な最適化の過程を図１に示します 。一般に、問題を解く場合には、５つの主要なプロ
セスを経ます。Optimizerは、問題を解くにあたり、まず初期化されます。次に、その問題の行列がメモリに読み込まれ、問題を解く最適化ルーチンの１つが呼びだされます。そして、その問題の解を確認し、最後にユーザはOptimizerを終了します。この構成は、複数の問題を同時に操作できるというOptimizerの能力が使われるとより複雑になるかもしれませんが、コマンドを構築する上では非常に有用です。
図 1 問題の最適化
Initialization Read in a Optimize
Problem Problem
View theSolution
Termination

2.2 初期化と終了
Optimizer
Optimizer を使う際、まず、初期化の過程を経ます。コンソール Xpress では、この処理は自動的に行なわれますが、ライブラリユーザの場合、他のライブラリルーチンの前に XPRSinit

MSI 用を呼びだして、手動でシステムを初期化しなくてはなりません。このコマンドは必要なライブ
ラリをチェックし、あなたの Xpress-MP のライセンスを確認します。一旦、このチェックが終われば、他のすべてのルーチンが動作可能となります。
セッションの終わりでOptimizerルーチンの全ての呼びだしが完了すると、終了処理に移ります。
ここでは、Optimizerによって使われたメモリが他の処理のために解放され、読み書きするために開かれていたファイルが閉じられます。コンソールユーザの場合、QUITやSTOPコマンドが与えられると、この処理は自動的に実行されます。ライブラリユーザは、同様の処理を実行するためにXPRSfreeルーチンを呼びます。
Xpress-Optimizer Reference Manual Reading in a Problem 10

Problem-Solving with
Xpress-MP

2

問題環境
ライブラリユーザの場合、複数の問題環境を活用するためには、一度Optimizerを初期化し、問題の行列が読み込まれる前にXPRScreateprobルーチンを用いて問題環境が作られなくてはならなりません。（ライセンスの範囲で）これらの環境はいくつでも作ることができ、最適化，保存，実行というプロセスは与えられた任意の回数だけ実行可能となります。これは、各関数を呼びだす際に最初の引数として問題ポインタを指定することによって、実施可能となります。
このような環境が必要でなくなったときには、XPRSdestroyprobを用いて取り除くことができます 。全ての環境を取り除くときには、XPRSfreeを呼びだす前に実行してください。

Optimizerの出力
コンソール Xpressユーザの場合、出力は直接、画面とログファイルに送られます。一方、ライ
ブラリユーザの場合、更にフレキシブルな出力が可能です。コマンドXPRSsetlogfileにより、特定の問題に関する出力にログファイルを特化できます。あるいは、XPRSsetcbmessageコ
マンドにより定義される出力コールバック関数を用いることで、出力を受け取って、アプリケーション内で直接処理することが可能です。詳しくは5.3節「コールバックを使う」を参照してください。

2.3 問題を読み込む
初期化が終わると、Optimizerは問題を読み込めます。問題は基本的に２つの方法で Optimizer
データ構造に読み込まれます。シンプルなのは、XPRSreadprob (READPROB)を用いたMPSまたはLPファイルからの行列の読み込みです。ライブラリユーザの場合は、XPRSloadlp，
XPRSloadqp，XPRSloadglobal，XPRSloadqglobalを用いて問題をデータ構造からロードすることも可能です。そしてMPS名をXPRSaddnamesを用いてモデルに付加することができます。問題がロードされると、それに続いて呼びだす入力ルーチンにより、問題は上書きされます。以下のことは重要です。MIP問題において、原問題の行列は、求解アルゴリズムによって、もとの状態に戻せなくなるように書き換えられることがあります。つまり、最適化処理が始まると、原問題を復帰できると思うべきではありません。恐らく最も重要な事は、事前分析されたMIP行列は、XPRSglobal (GLOBAL)を呼びだした後には、決して事後分析されないことです。そして、概して、その問題を変更したり再度使うのであれば、原問題の行列を再ロードするか、複製して保存する必要があります。詳しくは、5.2節「事前分析のはたらき」を参照ください。
Xpress-Optimizer Reference Manual Solving the Problem 11

Problem-Solving with
Xpress-MP

2

MSI 用2.4 問題を解く
問題のロード後、その問題を解く（解こうとする）ことができます。 XPRSmaxim (MAXIM)，
XPRSminim (MINIM)コマンドにより LP, QP, MIP（混合型整数計画）問題の最大化や最小化が可能です。ここで、MIP 問題については、LP 緩和問題を解いた後、コマンド XPRSglobal(GLOBAL)により解きます。また、XPRSrange (RANGE) を使うことでレンジング（感度分析）ができます。
他にも様々なことができます。シンプレックスLP最適化処理は、事前に類似の問題から得られた最適基底から開始することで、高速化できます。これらの基底はXPRSwritebasis(WRITEBASIS)，XPRSreadbasis (READBASIS) ，XPRSloadbasisを用いてユーザデータ構造
からの入力を用いて保存，復元することができます。また、整数探索方向を指定でき、それは
XPRSreaddirs (READDIRS)によりファイルからロード可能です。ディレクティブファイルの形式については、付録Ａ「ログとファイル形式」に説明があります。他にも高度な機能として
コールバック関数やカットマネージャのカスタマイズができます。これらについては、５章「アルゴリズムの実行」に説明があります。

2.5 結果を見る
最適化が終了すると、解を得られるか、問題が実行不能，非有界であることを確認できるかのいずれかです。後者の場合、ユーザはどうして問題がそうなったのかを知り、それを修正した
いと思うでしょう。これについては、後程、３章「最適解，実行不能，非有界」で触れます。
前者の場合、ユーザは解について詳しく知りたいと思うでしょう。
Xpress-MPには解かれた問題の詳細にアクセスするためのたくさんの機能があります。
XPRSwritesol (WRITESOL)やXPRSwriteprtsol (WRITEPRTSOL)を使うことで、完全な解をASCIIファイルで得られます。XPRSwritesol (WRITESOL)は他のアプリケーションとの互換性に優れています。XPRSwriteprtsol (WRITEPRTSOL)は主にプリンタに送るのに適しています。レンジ情報を得るための同様のコマンドは、XPRSwriterange (WRITERANGE)と
XPRSwriteprtrange (WRITEPRTRANGE)です。ライブラリユーザはまた、XPRSgetsolを使うことで自分たちのプログラムから直接解にアクセスすることができます。この場合、最適な決定変数の値やスラック変数，双対値，リデューストコストが返されます。更に、最適化アルゴ
リズムは、problem attributes （問題特性）を用いて、解かれた問題についての更に詳しい情報を出力します。これらは、特定の情報について問い合わせられたり、ライブラリ関数
XPRSgetintattrib，XPRSgetdblattrib，XPRSgetstrattribを使うタイプのユーザの変数に関して提供されるオブジェクトの集合です。特性の例としては、LPや(M)IP問題の目的関数の最適値を各々返すLPOBJVAL，MIPOBJVALなどが含まれます。特性のリストについては、
８章「問題特性」を参照してください。
Xpress-Optimizer Reference Manual Optimization by Example 12

Problem-Solving with
Xpress-MP2

2.6 最適化の例
これまで、 Xpress-Optimizer の一般的な特徴と使い方について簡単に紹介しました。以下の節
では、よくある問題や Optimizer の性能のような話題を Optimizer のより高度な特徴と共に考えます。また、種々の関数や使い方についてのリファレンスを本マニュアルの後半部分に示します。
Optimizerの使用例としては、多くのソースプログラムが、特に Xpress-MP Essentialsにおいて利用可能です。 Xpress-MP Essentialsは Xpress-MPソフトウェアを着実に使いこなすための基本

MSI 用となるものであり、リファレンスマニュアルを読む前に適切な章を読むことを強くお勧めします。より高度な例は、 Xpress-MP CD-ROMにあります。

2.7 クイックリファレンス
初期化と終了XPRSinit
XPRScreateprob
XPRSsetlogfile
XPRSsetcbmessage
XPRSdestroyprob
XPRSfreeOptimizerを初期化する

問題環境を作成する
Optimizerの全出力を直接ログファイルへ書き出す
出力コールバック関数を定義する
問題環境を破棄する
Optimizerにより使用されたメモリを解放し、全ての開いているファ
イルを閉じる

Xpress-Optimizer Reference Manual Quick Reference 13

Problem-Solving with
Xpress-MP

2

問題を読む
問題を解く
結果を見る
XPRSreadprob
XPRSloadlp
XPRSloadqp
XPRSloadglobal
XPRSloadqglobal
XPRSaddnames
XPRSreadbasis
XPRSloadbasis
XPRSreaddirs
XPRSmaxim
XPRSminim
XPRSglobal
XPRSrange
XPRSgetbasis
XPRSwritebasis
XPRSwritesol
XPRSwriteprtsol
XPRSwriterange
XPRSwriteprtrange
XPRSgetsol
XPRSgetintattrib
XPRSgetdblattrib
XPRSgetstrattrib

MPS，LP，QPまたはバイナリ形式ファイルを読み込む
LP問題をOptimizerにロードする
QP問題をOptimizerにロードする
MIP問題をOptimizerにロードする
２次のMIP問題をOptimizerにロードする
行や列のレンジに名前を付ける
ファイルから基底を読み込む
ユーザデータ構造から基底をロードする
ディレクティブファイルを読み込む
問題の目的関数を最大化する問題の目的関数を最小化する
整数解を探索する
レンジ情報を計算し、ファイルに保存する
現在の基底をユーザ配列に戻す
基底をファイルに書き込む
現在の解をASCIIファイルに書き込む
現在の解を印刷可能な形式でファイルに書き込む
レンジ情報をASCIIファイルに書き込む
レンジ情報を印刷可能な形式でファイルに書き込む
解の値をユーザ配列に戻す
整数型問題の属性の値を回復する
倍精度型問題の属性の値を回復する
文字列問題の属性の値を回復する

Xpress-Optimizer Reference Manual Quick Reference 14

Problem-Solving with
Xpress-MP

2

MSI 用Xpress-Optimizer Reference Manual The Solution Process 15

Optimality, Infeasibility

3
3 最適解, 実行不能, 非有界& Unboundedness

3.1 求解過程
Optimizer に問題の行列が作られると、一般にユーザはそれを解くために最適化ルーチンの１つを呼びだし、有用な最適解を得ます。しかし、最適化はいつもこのように単純なものではな
く、求解の過程でいくつかの問題が起こり得ます。実際の場面では、しばしば問題規模が大きく、解くのに長時間を要することがあります。このことは、複雑な MIP 問題の場合に特にそうです。解くのに長時間を要しそうな問題において、最適化に要する時間は制御パラメータの注意深い設定や工夫により、しばしば改善されます。以下ではこのことについて示します。
コンソールユーザは CTRL-C キーを押すことで、いつでも最適化計算を安全に終了できます。
Optimizer が終了する前に、そのときの最適化計算の現在位置が保存できます。そして、必要があればコマンドを再入力することで、計算を継続できます。ライブラリユーザはこの機能を使えませんが、シンプレックス反復計算の実行回数の上限を指定する LPITERLIMIT、あるいはニュートンバリア法において同様の指定をする BARITERLIMIT を設定すれば、最適化の計算量を制限できます。また、制御 MAXTIME により、実計算時間限度を設定できます。探索を早く終えたい場合には、これら３つの制御が適切な値に設定されているかを調査してみるべきです。また、最適化を中断させるものは１つとは限りません。
これらの問題が生じることなく、無事に最適化が終了する場合には、得られた解について有用な出力をたくさん得ることができます。理想的には、問題が適切で、その解が有用であると確認できると最適解が得られたことになるでしょう。しかしながら、これはこのような場合にのみ得られるのではありません。問題が実行不能で解が見つからない場合も同じように可能です。
また、モデルによって無限解が得られる非有界である場合についても同様です。ここでは、これらの可能性について若干触れます。
Xpress-Optimizer Reference Manual Infeasibility 16

Optimality, Infeasibility& Unboundedness

3

3.2 実行不能
全ての制約条件を満足するような解が存在しない場合、その問題を実行不能と言います。
Xpress-Optimizerには、求解過程における実行不能な箇所を発見し、モデルの実行不能性について診断する様々な方法があります。

事前分析における実行不能性の診断
事前分析機能を使うことで（5.2節「事前分析のはたらき」参照）、実行不能性について様々なチェックができます。実行不能が検出された場合、その過程を遡ってトレースしたり原因を調べることができます。この診断は、最適化ルーチン（XPRSminim(MINIM)やXPRSmaxim(MAXIM) )が呼ばれる前に、制御パラメータTRACEを１に設定しておけば、いつでも実施されます。この場合、実行不能の原因が最適化ルーチンからの出力の一部としてレポートされ、必要に応じて問題を修正できます。

既約実行不可能集合
実行不能性を分析するための一般的な方法に、それ自身が実行不能行列である部分小行列を発見することがあります。Optimizer は既約実行不可能集合 (IISs)を見つけることで、これを実行

MSI 用します。IIS は実行不能な制約と変数の上下限値の最小集合で、その中の制約や上下限のどれかを取り除くと実行可能となります。
モデルによっては、複数の実行不能が存在することがあります。１つの IIS を修正するだけでは、モデルを実行可能にできないかもしれません。そのため、Optimizer は XPRSiis (IIS) によってモデル中の各実行不能についての IIS を見つけることができます。この探索はパラメー
タ MAXIIS により制御され、これは発見する IIS の最大数を制御します。実行不能が異なる IIS
によって表されることがあり、 Xpress-MP は実行不能性を簡単に診断できるように最小制約数の IIS を探します。ライブラリユーザの場合、 IIS については XPRSgetiis を用いることで探せます。
IISが見つかると、１つの制約や上下限を取り除くことで、 IIS による実行不能を完全に解消できるかを知ることは有用です。よって、sub-IIS isolation（分離sub-IIS ）と呼ばれる IIS の部分集合を見つけることを試みます。分離sub-IIS のいずれかの要素を取り除くと、他の IIS の実行不能性を増加させることなく、そのIIS の全ての実行不能性を取り除きます。それゆえ、分離subIISはそれぞれが独立した実行不能の原因である可能性が高く、取り除くべき制約や上下限を示します。分離sub-IIS を発見することは常に可能ではありませんが、見つかれば、要素が星印でマークされます。分離sub-IIS は全ての独立した IIS が見つかるまで探されます。
Xpress-Optimizer Reference Manual Unboundedness 17

Optimality, Infeasibility& Unboundedness3

整数実行不能ある種のMIP問題の中には、LP（緩和）問題では最適解が存在するのに、実行不能となる場
合があります。この場合、LP緩和問題の実行可能領域は、困ったことに、整数条件を満足する解を含まず、これら条件の１つを除くか他の制約条件の１つを除くしか解を得る方法がありません。この問題は、恐らく最も難しい種類の実行不能問題であり、その原因を特定することは容易ではありません。

3.3 非有界
モデルの制約条件を満たしながら、目的関数が無限によくなるような問題をunbounded（非有界）と呼びます。この場合、普通、無限に利益が得られるというより、解かれたモデルの定式化に問題があることを示しています。Optimizerが非有界を発見した場合、ユーザはそのモデルについて、不足しているもの，不十分なもの，不正確な制約条件，データについて確認するべきです。

3.4 スケーリング
時として、制約条件や目的関数内で桁が大変大きく変化する問題を解こうとすることがあります。このようなモデルは悪いスケールのモデルです。簡単な例を示します。
最適化の過程において、Optimizerは制約条件や目的関数を用いて多数の引き算や割り算を実施します。これらの計算が、桁が大きく違う状態で実施されると、コンピュータの計算精度やXpress-MPで用いられる固定許容範囲のために誤差が蓄積され、信頼可能な最適解が見つけられなくなります。
最大化:
制約条件:
z 106x 7y + =MSI 用106x 0.1y + 100 .
107x 8y + 500 .
1012x 106y + 50 106 ⋅ .
Xpress-Optimizer Reference Manual Scaling 18

Optimality, Infeasibility& Unboundedness

3

この悪影響を最小化するために、問題は Optimizer に入れられる前に、できる限りスケーリン
グされるべきです。上記の例では、係数と最後の制約条件がスケーリングできます。前者による問題は、列スケーリングや効果的な座標変換を新変数による置換と共に実施することで解決できるかもしれません。後者による問題については、行スケーリングにより解決できるかもしれません。
モデルの定式化の際に、よくスケーリングされた行列の作成に多くの時間をかけることは、大変有効です。これはいつも簡単にできることではないため、 Xpress-MP には、これを簡単に実施するためのスケーリングのオプションが、いくつか組み込まれています。用いるスケーリン
グの形式は、制御パラメータ SCALING に設定されるビットによります。スケーリングの特別な形を用いたいときは、要求するスケーリングに相当する値の合計を SCALING に設定します。
例えば、行，列のスケーリングを行い、また再度、行をスケーリングする場合、SCALING を
そのように設定します。XPRSreadprob (READPROB) の間に問題はスケーリングされ、その後、
XPRSscale (SCALE) により再スケーリングされます。一般に、［XPRSalter (ALTER)を使った］変更に続いて、あるいは［XPRSrecurse(RECURSE)を使った］逐次線形計画の間に行列を再スケーリングしたいときがあります。XPRSscale (SCALE)を呼びだす前に SCALING を設定すれば、通常とは違うスケーリング戦略を実施できます。
SCALING のデフォルト値は 35 で、最大要素法により行，列をスケーリングします。スケーリ
ングの必要がない場合には、XPRSreadprob (READPROB)を呼びだす前に SCALING を０にしてください。
スケーリングは行列要素によってのみ決定されます。目的係数，右辺値，上下限値はスケーリ
ングに影響しません。非零SCALINGはLP変数をスケーリングしますが、整数要素のスケーリ
ングはXPRSglobal (GLOBAL)ではサポートされていません。つまり、整数要素のスケーリン
グはMIP問題の定式化の際に注意深く考えられなくてはなりません。
ビット
0
1
2
3
4
5

値
1
2
4
8
16
32

スケーリング方法
行のスケーリング
列のスケーリング
再度の行のスケーリング
maximin 法
Curtis-Reid 法
0=>幾何平均でのスケーリング
1=>最大要素でのスケーリング（maximin法とCurtis-Reid法では使えません）

x
106x
1 2 4++7=
Xpress-Optimizer Reference Manual Choice of Algorithm 19

Performance Issues

4

MSI 用4 求解アルゴリズムの性能
4.1 アルゴリズムの選定
Xpress-Optimizer は、基本的に３つのソルバーが１つになったものであり、LP や QP の問題を解くために、主シンプレックスアルゴリズム，双対シンプレックスアルゴリズム，ニュートン
バリア内点法からユーザは選びます。与えられる状況における最も適切な最適化アルゴリズム
は問題に依存します。一般に、モデルが実行不能でない，または実行不能に近いのでなければ、
通常、双対シンプレックス法の方が主シンプレックス法より、かなり高速です。問題が実行不能なようであれば、主シンプレックス法が恐らく一番よく、実行不能の原因を簡単に求められます。ニュートンバリア法のような内点法は、問題の行列が A で、行列 ATA が密な場合、バリアが遅くなりますが、あるクラスの問題では、よいパフォーマンスを示します。
デフォルトでは、 Xpress-Optimizer は LP 問題を解くのに双対シンプレックス法を用い、QP 問
題を解くのにバリア法を用います。ほとんどのユーザには、これで十分であり、このことを変更する必要はありません。しかしながら、問題を解くのに余りに長時間を要しそうであれば、別のアルゴリズムを試すのもよいと思われます。このことは、最適化ルーチン XPRSmaxim(MAXIM)，XPRSminim (MINIM)にフラグを立てて指定できます。デフォルトで使われるアルゴ
リズムは制御パラメータ DEFAULTALG の値で決められます。
以下では、これらの方法に関する性能と整数解の探索について詳しく示します。

4.2 シンプレックス法の性能
シンプレックス法
線形制約の集合で定義される領域は実行可能領域として知られる多面体です。同じ線形目的関数値を有する等高線集合である点は超平面を作ります。目的関数の最適値は、実行可能領域の境界上にのみ存在し、常にその多面体のある頂点に存在します。時々、目的関数の等高線集合
が多面体の境界の一部に平行であり、最適解は解の線や面、超平面に存在し、一意的に決まらない場合があります。しかしながら、このような場合においても、最適解を作る決定変数値が連続であるのは明らかですから、最適解の値は実行可能領域の頂点のみを考えれば発見することができます。一般に、頂点は制約や変数の上下限が問題内の等号で成立するところに存在します。シンプレックス法は、通常、頂点での解や基底（基底解）を考慮し、最適解が見つかるまで、あるいはその問題が実行不能や非有界であることが分かるまで、１つの頂点から別の頂点へ移動したり繰り返したりします。必要な反復回数は、モデルのサイズと共に増加しますが、
通常、制約条件の数により大きく依存します。
Xpress-Optimizer Reference Manual Simplex Performance 20

Performance Issues

4

主，双対シンプレックス法では、考慮する頂点や反復方法が違います。ＬＰ問題では双対シンプレックス法がデフォルトですが、XPRSminim (MINIM) ，XPRSmaxim (MAXIM)をフラグdと共に用いることで、明示的に呼びだせます。

逆行列計算
シンプレックス法での最適化の際、Optimizerは極めてよく逆行列計算という処理を実施します。
その頻度は制御INVERTFREQとINVERTMINにより決まります。これは現在の解を計算し直して、より簡潔な表現を探し、その精度を調べようとします。しかし、Optimizerは現在の解の新しい表現を探せないことがあります。これは、計算精度の問題やクラッシュ，XPRSreadbasis(READBASIS)により作成される不安定な初期条件によるもので、この場合、いくつかのベクト

MSI 用

ルは基底から除かれたり、スラックや人為変数に相当するユニットベクトルにより置き換えられます。逆行列計算により、Optimizerはアルゴリズムを継続する前により安定した解を見つけるために、現在の解を調整しようとします。

部分プライシングとDevexプライシング
双対シンプレックスOptimizerは、制御PRICINGALGにより部分プライシングとPaul Harris’
Devexプライシングを組み合わせて使います。一般に、部分プライシングは高速の繰返し計算を大量に行い、Devexプライシングは遅い反復計算を少し実施します。どちらがよいかは、大いに問題によります。PRICINGALGを０に設定すると、Optimizerは部分プライシングで開始し、自動的にDevexプライシングに切り替える時期を決めます。OptimizerがDevexプライシングに切り替わらないようにするには、PRICINGALGを-1に設定しますOptimizerをDevexプライシン
グに強制的に切り替えるにはPRICINGALG制御を1に設定してください。

出力
ＬＰ最適解を探している間、コンソールOptimizerは画面に繰返しログを表示します。ライブラ
リユーザの場合、同じ情報をXPRSsetlogfile，XPRSsetcblplog関数により得られます。このログはLPLOG回の反復ごとに作られます。LPLOGを正の値に設定すると、概要出力を作成します。一方、負の値に設定すると、詳細なログを作成します。０に設定すると、ログは解き終わった時にのみ表示されます。
Xpress-Optimizer Reference Manual Barrier Performance 21

Performance Issues

4

4.3 バリア法の性能
ニュートンバリア法
シンプレックス法とは違い、ニュートンバリア法は LP や QP 問題を解くための内点法です。
名前が示しているように、これは実行可能領域内の点から点へ次々と繰り返し移動する方法です。その実行可能領域の境界へ達するとペナルティが課されるため、この方法での反復は、実行可能領域を離れられません。しかしながら、LP 問題の最適解は実行可能領域の境界上に存在するため、このペナルティは、最適解に収束するための反復計算を実行できるようにアルゴ
リズムが続行するのに合わせて、ダイナミックに減らされなくてはなりません。
内点法は、通常、厳密に実行可能領域内の解に到達した後、真の最適な頂点解に接近しようとするだけです。それゆえ、その接近に際しては、決定変数の数値ではなく、必要な反復回数を決めます。よって、シンプレックス法とは違って、バリア法はしばしばは問題の大きさに関わらず、似たような回数の繰返しで完了します。
このバリアソルバーはXPRSminim (MINIM)かXPRSmaxim (MAXIM)にbフラグを付けて、問題に対して呼びだします。これは、デフォルトでQP問題に使われることになっています。二次目
的関数では、多面体の実行可能領域の頂点より面上に最適解が一般的には存在します。

バリアの性能制御
ニュートンバリア法は解探索が遅いときや数字上に問題があるとき、制御の値を変えることで、その動きを変えられます。CACHESIZEが正しく設定されているかの確認は、性能に大きな影響を与えます。これについては、インテルやAMDでないプラットフォーム上ではマニュアル
で設定してください。同じく、コレスキー因子分解の順序アルゴリズムをBARORDERを用いて変更することは効果があります。これを２に設定すると、オーダリング自体は非常に遅くなりますが、しばしばよい結果となります。DENSECOLLIMITのような他の制御をマニュアルで設定すると、よい効果があります。例えば、木探索で密な列が見つかったような数値上の問題については、密な列の操作を不可能にすることで、なくすことができます。このためには

MSI 用DENSECOLLIMITを大きな値に設定します。この場合、最適化速度は犠牲になりますが、数値上の振舞いは、普通、よくなります。
Xpress-Optimizer Reference Manual Barrier Performance 22

Performance Issues

4クロスオーバー
一般に、バリア法は最適解が与えられた許容範囲内であれば終了します。この解は、実行可能領域の境界上にあるため、Optimizerは、この段階でクロスオーバーを実施し、シンプレックス法を使って最適化を完了するようにし、真の解である最適解を得ようとします。最適基底解が必要な場合には、本手法は最適化が開始される前に実施される必要があります。CROSSOVER
制御はこれを管理し、デフォルトではLP問題には１が設定されています。CROSSOVERが０に設定されると、クロスオーバーは実施されず、純粋にバリア法で解を探索します。

収束
最適化は、通常、主問題，双対問題の解が実行可能で、相対値双対ギャップがBARGAPSTOPより小さいと終了します。言い換えると次の通りです。例えば、BARGAPSTOP =1.0E-8のときは、最適解の目的関数値が８桁正しいことを意味します。BARPRIMALSTOPとBARDUALSTOPパラメータは、主問題と双対問題の実行可能性の終了基準を与えます。一般に、BARGAPSTOP，
BARPRIMALSTOP，BARDUALSTOP制御を変える必要はありませんが、クロスオーバーが用いら
れ、シンプレックス法がクロスオーバー基底から最適基底を得るまで何度も繰返しを実施する
ような場合には、これらの制御パラメータの値を（例えば10から100倍）小さくするのは有効かも知れません。ニュートンバリア法は、各繰返しにおいて探索方向を計算し、その方向にス
テップを進みます。このステップサイズがBARSTEPSTOPより小さければ、探索を終了します。
収束が非常に遅い場合には、BARSTEPSTOPをもっと大きな値に設定してシンプレックス法を早い段階で呼びだし、早く計算を終わらせる方がよいかもしれません。

出力
シンプレックス法のようにコンソールOptimizerは繰返しログを表示できます。同様にライブラ
リユーザはXPRSsetlogfile，XPRSsetcbbarlogにより同じ情報を得られます。どちらも
BAROUTPUT制御の値に依存します 。
primalobj dualobj –1.0 dualobj +-------------------------------------------------------------- BARGAPSTOP .
Xpress-Optimizer Reference Manual Integer Programming — The Global Search 23

Performance Issues

4

4.4 整数計画法の性能
分枝限定法
Xpress-Optimizer は混合型整数計画問題（MIP）を解くのに分枝限定法を用います。ここでは、整数解探索の制御を理解するのを助けるために、その簡単な概略を示します。本手法には３つの主要な概念があり、それは、分割，緩和，見切りです。
緩和とは整数計画問題の整数制約を取り除くことです。緩和問題は線形計画問題ですから、解くことができ、以下のどれかの結果となります。
ａ）LP は実行不能であり、よって MIP もまた実行不能であるｂ）LP は実行可能だが、いくつかの整数制約が満足されない、つまり MIP はまだ解けていないｃ）LP は実行可能で、全ての整数制約も満足されており、MIP は解けている

MSI 用ｄ）LP は非有界である
最後のｄ）はややこしい場合です。これは最初の緩和問題でしか起きず、問題がよく検討されていない場合にあり得ます。よって、この LP は非有界でないと考えられます。
ａ）とｃ）の場合は、更なる検討作業は不要で、その MIP 問題を「見切った」と言います。
ｂ）は満たされていない整数制約の１つを選んで分割を実施しなくてはならず、まだ作業途中です。
例えば、LP 最適解の整数変数ｘの値が 1.34 とすると、これは整数制約に違反しています。原
問題では x＜1.0 か x＞2.0 のどちらかが成立します。この２つのＩＰ問題が解ければ、ｘの整数値を取り逃がすことはありません。そこで、問題を２つの部分問題に分割します。これらの部分問題の両方が解けて、２つのうちのいい解を選ぶと、MIP が解けたことになります。各
部分問題を解くには、先と同様に緩和手法を使い、これを繰り返します。
これはある程度の任意性のある木探索アルゴリズムと言われるものです。木の各ノードは MIP
部分問題です。MIP は緩和され、LP 緩和問題が解かれます。その緩和が見切られなければ、その MIP は２つの部分問題に分割され、各子問題はノード MIP と同じ制約に１つの制約を追加されます。よって、各ノードは見切られるか、２つの子（部分問題）を持つかのどちらかです。
IP problem
x2.x1.

Sub-problem 2 Sub-problem 1
Xpress-Optimizer Reference Manual Integer Programming — The Global Search 24

Performance Issues

4

木を探索する途中、整数解が見つかると、問題の解の限界が得られます。MIP の LP 緩和問題の最適目的関数値はその MIP 問題のそれより悪いことはありません。見つかった MIP ノードの最もよい値は、未解決ノードのカットオフ（足切り値）として使えます。LP 緩和問題の値
が足切り値よりよくなければ、そのノード以下のいかなる MIP 子問題は、既に得られたＭＩ
Ｐ解の値よりよくなることはありません。この場合もノードを見切ることができ、これ以上の考慮は必要ないのです。
足切り値の考え方は整数解がないと分かった場合のみならず、ある値よりよい最適解がある、
あるいはあることが考えられる場合にも応用できます。緩和問題の値が足切り値より悪ければ、そのノードは捨てられます。しかしながら、過度に楽天的な足切り値を選ぶと、最適解を含む全ての整数実行可能解を見逃す危険があります。
整数最適解にある程度の許容範囲（許容範囲）を考えられるのであれば、足切り値の考え方は更に強力になります。整数解が見つかったとき、例えば、これより100以上よい解がないのであれば、これを最適解として許容するとした場合です。このとき、その見つかった解より100だけよい値を足切り値に設定できます。

ノードと変数の選択
分枝限定の技術については、ユーザは色々と選択できます。但し、実際にそれをうまく行うことは２つの選択に大いに依存します。
ａ）いかなる段階においても、一般に見切られていない未解決のノードがいくつかあります。
このうち、どれを最初に解くかというノード選択問題ｂ）攻略ノードを選んだ際、どの変数を分割するかという変数分割問題
Optimizerには、両選択について多くの問題でうまく行った戦略をデフォルトとして組み込まれ

MSI 用ています。特定の問題に合った探索戦略ができるよう、いくつかの制御があります。Optimizer
はノードの選択時ではなく、LP緩和問題を解いたときに変数を選択することから、変数選択問題について先に議論することにします。
Xpress-Optimizer Reference Manual Integer Programming — The Global Search 25

Performance Issues

4

分枝のための変数選択
各離散要素には、デフォルトの 500 かディレクティブファイルにユーザが設定した分枝の優
先順位がつけられています。順位値が小さいと分枝に選ばれやすくなります。各離散要素が LP解の値から離される際の単位劣化量として推定される押し上げ，押し下げに基づく擬コストを指定できます。
Optimizer は制約を満足していなくて、最も優先度の高いものの中から分枝要素を選びます。
これらについては、制約を満たす(劣化)コストが最も高いと推定されるものを選びます。
離散要素の推定コストの和により、そのノードから得られる整数最良解のかなり粗い推定ができます。この推定値が、ある問題クラスにおいていつも偏っているようであれば、擬コストを
デフォルトの0.1から変えてみることは有効です。この操作はXPRSreaddirs (READDIRS)コマ
ンドにより実施できます。

ノード選択
各アクティブノードには、LP 緩和解の値と整数解への推定劣化量が付いています。制御NODESELECTION，BACKTRACK，VARSELECTION，BREADTHFIRST が次のノードの選択方法を決めます。
NODESELECTION の値は、ノード選択候補集合、つまり、選ばれるノードの集合を定義し、BACKTRACK の 値 が 、 そ の 候 補 集 合 か ら の ノ ー ド の 選 択 に 使 わ れ る 基 準 を 定 義 し ます 。
NODESELECTION が１（通常のデフォルト値）なら、２つの子ノードが候補集合を形作りますが 、 両 方 が 見 切 ら れ た 場 合 に は、 全 て の ア ク テ ィ ブ ノ ー ド が 候 補 集 合を 形 作 り ま す 。
NODESELECTION が２のときには、常に全てのノードが候補集合となり、最良、もしくは幅優
先探索を実行します。 NODESELECTION が ３ の と き に は 、 深 さ 優 先 探 索 を 実 行 し ま す 。
NODESELECTION が４のときには、優先順位の高い最初の BREADTHFIRST ノードは全てが候補となり、その後は、通常のデフォルト戦略に従います。
候補集合におけるノード決定には、BACKTRACK の値が選択基準を決めます。BACKTRACK が１
で MIPTARGET が設定されていない場合（直接ユーザにより、あるいは整数解を前もって探索して）、最もよい推定値のノードが選ばれます。BACKTRACK が１で MIPTARGET が設定されていると、Forrest-Hirst-Tomlin 基準が使われます。最小化問題の場合、次の値が最大のノードを選びます。
Xpress-Optimizer Reference Manual Integer Programming — The Global Search 26

Performance Issues

4（MIPTARGET -目的関数値-推定劣化量）／推定劣化量
VARSELECTION の値は推定劣化量に影響します。VARSELECTION が１（デフォルト）のとき、
推定劣化量は制約を満足していない要素ごとに分枝する２つの分枝のよい方から推定されます。
推定劣化量の他の計算方法は VARSELECTION を設定することで実施できます。
下の表はupj とdownj が離散要素jにおいて分枝する際の増減劣化量としてあり得る値を示しています。BACKTRACKが２のとき、推定値が最小のノードがいつも選ばれます。BACKTRACKが３のとき、最小下界値のノードがいつも選ばれます。

カットオフ値の調整

MSI 用パラメータ MIPRELCUTOFF と MIPADDCUTOFF はデフォルト値が零でないため、MIPADDCUTOFFの設定が Optimizer のコマンドの集合内の別のところで起きる影響をよく注意して考慮しな
くてはなりません。MIPADDCUTOFF を XPRSminim (MINIM)や XPRSmaxim (MAXIM)に先だって設定すると、その値は最適化処理において変えられるかもしれません。LP 最適化の最後に、
MIPADDCUTOFF は次のように設定されます。
max (MIPADDCUTOFF,0.01*MIPRELCUTOFF*LP_value)
ここでLP_valueとはLP Optimizerによって発見されたLP最適解の最適値です。この式が必要な
く、MIPADDCUTOFFを指定した値にしたい場合には、MIPADDCUTOFFはLP Optimizerの動作後に設定されなくてはなりません。MIPRELCUTOFFに値を指定するのであれば、LP Optimizerの実行前に指定されなくてはなりません。
VARSELECTION Estimated Degradation (deg)
1
2
3
4
5
6
min upj down j , ( )j_upj down j + ( )j_

2.0 min upj down j , ( ) ⋅ max up j down j , ( ) + { }j_max up j down j , ( )j_down j
j

_
upj
j

_
Xpress-Optimizer Reference Manual Integer Programming — The Global Search 27

Performance Issues

4

整数事前処理MIP 問題を解く前に MIPPRESOLVE が零でない値に設定されていると、整数事前処理が分枝限定木探索（トップノードを含む）の各ノードで実行されます。これは、縮小コストの固定，バイナリ変数の固定やトップノードでの分析を含みます。変数は、あるノードにおいて固定されると、その全ての子ノードにおいても固定されたままですが、行列からは消去されません（事前分析による変数固定とは違います）。この整数事前処理は XPRSminim (MINIM)や XPRSmaxim(MAXIM)の線形(l)フラグには影響されません。
MIPPRESOLVE は値が次のようなビットマップです。
MIPPRESOLVEの値が1+2=3のときには、縮小費用と変数が固定されます。

MSI 用

ビット
0
1
2

値
1
2
4

アクション
縮小費用固定変数固定
ルートノードにおける分析

Xpress-Optimizer Reference Manual Integer Programming — The Global Search 28

Performance Issues

4

Xpress-Optimizer Reference Manual Viewing and Modifying the Matrix 29

Implementing

5
5 アルゴリズムの実行
Algorithms

5.1 行列を見る，修正する
以上に示したような簡単な操作は Xpress-Optimizerの多くのユーザに満足していただけるものと思いますが、モデルをロードした後、変更した問題を再度最適化するのに先だって問題の行列を見たり変更する必要があることが、時々あります。このことは、特に原問題が実行不能なことが分かり、実行可能領域を作成するために制約条件（行列）を除去する必要がある場合に重要です。このため、ライブラリユーザのために、 Xpress-MPにはいくつかの関数がありますので、そのいくつかについて以下に示します。

行列を見る
Optimizer には、最適化の前後に目的関数、制約式右辺、上下界値、行列要素にアクセスすることのできる関数があります。前であれば、解のないことがはっきりしていても、その問題に関する全ての情報が得られます。後であれば、行列が事前分析されているかいないかに依存して構造が得られます。これについては以下の章で詳しく述べますので、ここでは詳しく述べませんが、完全な行列情報は、その行列が事前分析されていない場合にのみ得られることは重要です。事前分析されると、部分的な情報しか得られません。行列がどちらの状態か分からなけ
れば、問題特性 PRESOLVESTATE で、その状態を確認できます。
ここでは、事前分析されていない状態の行列を対象とします。このような行列では、行は問題の制約を表し、 XPRSgetrows により得られます。そのタイプや レ ン ジに つ い て は 関 数
XPRSgetrowtype，XPRSgetrowrange で得られ、また各制約条件の名前は XPRSgetnames
コマンドで返されます。右辺の値やそのレンジは XPRSgetrhs，XPRSgetrhsrange ルーチンにより得られます。行列の行に関係して、目的関数の係数は XPRSgetobj ルーチンで同じように得られ、また関数 XPRSgetqobj は２次の目的関数の係数を返します。
Xpress-Optimizer Reference Manual Viewing and Modifying the Matrix 30

Viewing andModifying the Matrix

5行列の列は問題の決定変数を表し、これについての情報も興味のあるところです。列には一般に名前があり、XPRSgetnames 関数を再び使うことでアクセスできます。列の上下界値はコ
マ ン ド XPRSgetub ， XPRSgetlb に よ り ア ク セ ス で き 、 そ の タ イ プ や レ ン ジ は 関 数
XPRSgetcoltype，XPRSgetcolrange で行列列と同じように得られます。XPRSgetcols 関数を用いると、行列の列、そのものが得られます。
６章「コンソールとライブラリ関数」にこれら関数の詳細な形式や各々の使い方を詳しく示しますので、ユーザが自分のプログラムで使用する前に詳細や例のページを参照ください 。

行列の修正

MSI 用時として、前に解かれたモデルについて、修正した行列が最適化のために再度表される前に、変更しなくてはならない場合があり、このためのルーチンがあります。行と列を（XPRSaddrows，
XPRSaddcols を使って）追加したり、（XPRSdelrows，XPRSdelcols を使って）モデルから取り除くことが可能です。行や列が追加されると、最大効果をあげるために、行列がEXTRAROWS, EXTRACOLS, EXTRAELEMS, EXTRAMIPENTS 制御の設定により読まれる前に、それらのためのスペースを確保されなくてはなりません。そうしないと、自動的にリサイズされま
すが、実際に必要な量以上のスペースが割り当てられ、計算速度が遅くなるかもしれません。
同様にして、行や列のタイプも（XPRSchgrowtype, XPRSchgcoltype を使って）変更でき、行列の係数は（XPRSchgcoef, 複数の変更は XPRSchgmcoef を使って）変更できます。右辺
や レ ン ジ に つ い て は XPRSchgrhs ， XPRSchgrhsrange に よ っ て 、 目 的 関 数 の 係 数 は
XPRSchgobj によって変えられます。２次の目的関数についても必要に応じて XPRSchgqobj，
XPRSchgmqobj で同様に変えられます。
上述のように、行列は事前分析後で事後分析前の場合、修正できませんが、変数の上下界値は（XPRSchgboundsを使って）変えられます。次の節では、事前分析機能について、事前分析した行列を用いた作業の困難を克服するためのいくつかの提案と共に議論します。上述の全関数の例とそれらの具体的な構文については、６章「コンソールとライブラリ関数」のリファレ
ンスのページを参照ください。Optimizerライブラリプログラムでの使い方を詳しく示しています。
Xpress-Optimizer Reference Manual Working with Presolve 31

Implementing
Algorithms

5

5.2 事前分析のはたらき
Optimizerには最適化処理に先だって問題を簡素化するための、いくつかのアルゴリズムがあります。この精巧な手法の集まりが事前分析で、問題の行列を修正して解きやすくし、Optimizerの性能を、しばしば大きく向上します。事前分析アルゴリズムは冗長な行や列を分析して取り除き、行列サイズを小さくし、多くのユーザにとって計算時間を減らすのに有効な頼りになる
ツールです。しかしながら、事前分析はオプションであり、PRESOLVE制御を０に設定すると動作しません。通常、これは１に設定されており、デフォルトで事前分析は動作します。事前分析の結果、問題が原モデルと全く異なるような形に見えることがあり、ユーザによっては混乱することがあるかも知れません。通常のOptimizerの使用では、このことは問題ではありません、但し、稀にエラーが起きたり、ある問題タイプの行列の追加部分にアクセスしようとした
とき、事前分析された値が返されることがあります。ここでは、このような混乱を避ける方法について示します。

線形計画問題
線形問題のために、事前分析はデフォルトで XPRSmaxim (MAXIM)，XPRSminim (MINIM)ルー
チンにより呼ばれ、最適化アルゴリズムが呼びだされる前に行列を整理します。最適化に続いて、原問題の解と保存されている原行列を戻すため、行列全体が自動的に事後分析されます。
その結果、最適化前か解いてすぐに、行列全体を原形のままで見たり、上で説明したように変更することができます。
事前分析の間に新しい行列の係数と上下界値の要素は、行列内の追加フリースペースの必要とされるところに作成されます。制御EXTRAPRESOLVEを用いることで、準備されるこの要素数を手動で設定できます。設定されなければ、XPRSreadprob (READPROB)が呼ばれるときに、推定値が設定されます。要素数が十分でないと、警告が表示されて、最適化が続行されます。
何らかの事由で最適化が終了する前に中断される場合は、CTRL-Cキーが用いられたか、

MSI 用LPITERLIMITやMAXTIMEの設定が不十分なためであり、その場合、問題は事前分析された形のままとなります。この場合、LPITERLIMITやMAXTIMEの値を増やし、問題を再度ロードして最適化をもう１度実施したいと思うことでしょう。しかしながら、問題のある部分が不適切
な計算時間をもたらすような場合、事前分析済みの行列を修正するのではなく、最適化の前に行列をリロードして必要な修正を実施することを強くお勧めします。
Xpress-Optimizer Reference Manual Working with Presolve 32

Working with Presolve

5(混合) 整数計画問題
モデルに離散要素が含まれると、上下界値強化や係数強化のような整数事前分析手法もまた、
LP 緩和の強化のために使われます。簡単な例として、行列にバイナリ変数ｘがあり、行列の制約の１つがｘ＜=0.２である場合です。ここでｘは決して１にはなれないため、ｘは０に固定されます。事前分析がこのように行列を変えるために離散要素を使う場合、ＬＰ緩和が強化されたといいます。コンソールユーザの場合、このことは画面に表示され、ライブラリユーザの場合、設定によってコールバック関数かログファイルに送られます。このとき、事前分析された行列のＬＰ緩和問題の目的関数の最適値は、事前分析されていない行列のものと異なることがあります。
恐らく、整数問題に対しての大きな違いは、XPRSmaxim (MAXIM), XPRSminim (MINIM)による最適化の後、XPRSglobal (GLOBAL) が続いて実施されるため、デフォルトでは事後分析が実行されないことです。但し、整数探索の前に LP 緩和問題の解を見ることができます。事前分
析が終わっていれば、解は事前分析が LP 緩和を強めたため、純粋な緩和問題の最適値でない
数値かもしれません。先の場合、ｘは０に固定されているので変数ｘは最適値でないかもしれません。事前分析が使われると、LP 緩和は異なるかもしれませんが、整数最適解は同じで、探索時間はかなり短くなるかもしれません。
離散要素のあるモデルの LP 厳密解は、XPRSminim (MINIM), XPRSmaxim (MAXIM) コマンドにフラグ l を付ければ得られます。これは変数の離散制約を取り除き、ＬＰ緩和を厳しくせずに、行列を解きます。上記の場合、ｘは０に固定されず、０から 0.2 までの範囲にあるものとします。LP 緩和に興味がなければ、LP 緩和問題を解いてすぐに整数探索を行うのがいくらか効果的で、これは XPRSminim (MINIM), XPRSmaxim (MAXIM) コマンドに g フラグを付けることで実施できます。
XPRSglobal (GLOBAL)が整数解を見つけると、事後分析が行われ、解ファイルに書き込まれ、
原 問 題 の 解 が 使 え る よ う に な り ま す 。 SOLUTIONFILE 制 御 が ０ に 設 定 さ れ て いる と 、
XPRSgetsol はメモリから事前分析済みの解を読むか、解ファイルから事後分析された解を読みこみます。同じようにして、事後分析された解は解ファイルでなくメモリからも読みこまれます。
Xpress-Optimizer Reference Manual Using the Callbacks 33

Implementing
Algorithms

5

しかし、XPRSglobal (GLOBAL) を呼んだ後には、行列全体の事後分析は実行されず、原行列を復帰できません。行列へ更にアクセスする必要があれば、解ルーチンの呼びだしの前に再度ロードするか（XPRScopyprobを使って）コピーする必要があります。あるいは、例えばXPRSwriteprob(WRITEPROB)を呼んで事前分析された行列を書き出します。

混乱の原因
上記と６章「コンソールとライブラリ関数」にある行列を修正するライブラリルーチンのほとんどは、事前

MSI 用分析された行列には作用しません。但し、カットプールマネージャによりカットを追加したり（XPRSchgboundsを使って）変数上下界値を変えることだけは例外的に可能です。これらの関数は事前分析された問題を参照します。もし、行，列，上下界値やこれらの数を調べたい場合、これらの情報は原行列ではなく事前分析された行列から得られます。これらを使う際に注意していても、事前分析やスケーリングされた行列と動作するように、特に設計された関数が少し存在します。例として次のようなコマンドに含まれます（XPRSgetpresolvebasis, XPRSgetscaledinfeas,
XPRSloadpresolvebasis, XPRSloadpresolvedirs）。

5.3 コールバックを使う
Optimizerの出力
コンソールユーザは Optimizer が探索する現在の問題の解についての情報が、常に標準出力デバイスに提供されます。ライブラリユーザも同じ出力を XPRSsetlogfile によってログファイルが設定されていれば、得ることができます。しかし、コンソールユーザはこの作成された情報に対して結果を返すことができ、セッションと関係できますが、ライブラリユーザについてはそうではありません。というのは、セッションが始まる前にプログラムは書かれてコンパイルされるからです。ライブラリユーザには上記の出力形式をよりインタラクティブに行うもう１つの方法としてコールバック機能が提供されます。
ライブラリコールバックはOptimizerに指示をできるユーザ定義のルーチンの関数の集合です。このようにして、ユーザは最適化処理における種々の場面で呼ばれるルーチンを定義でき、求解アルゴリズムを継続する前にユーザプログラムに戻るようにOptimizerに促せます。恐らく３つの最も一般的なコールバック機能は、ＬＰ解の探索に関連づけられています。しかし、このルーチンが呼ばれる状況の大半は整数探索に関連しており、以下の通りです。
Xpress-Optimizer Reference Manual Working with the Cut Manager 34

Working with the Cut
Manager

5

LP探索コールバック
標 準 出 力 を Optimizer から受け取ったり、ログファイルに保存する代わりに、コールバック
XPRSsetcbmessage により、Optimizer がテキスト列を出力する度に呼ばれるルーチンを定義できます。これは各メッセージ出力の状態を返すため、ユーザルーチンはエラーや警告メッセージをテストでき、それによって適切な行動をとることができます。
また、関数XPRSsetcblplogとXPRSsetcbbarlogの組により、シンプレックス法やバリア法の各反復後に、ユーザは応答できます。制御LPLOG，BAROUTPUTを制御することで、このルーチンが呼ばれる
頻度を減らすように設定できます。
整数探索コールバック
離散要素を含む問題が最適化されると、一般に多くのＬＰ問題（ノード）が整数木探索の一部として解かれます。この処理における個々の点では、 Optimizer にルーチンを指定するのに使われるコールバ
ックによってユーザ定義ルーチンを呼ぶことができます。このルーチンについては、
XPRSsetcbprenode を使って新しいノードが選ばれたときはいつでも呼ぶことができ、ノードの選択を変更するのに使われます。ルーチンは、特定のノードで最適解か整数解が見つかったとき、あるいはXPRSsetcbinfnode を用いて実行不能なノードが見つかったときに XPRSsetcboptnode か
XPRSsetcbintsol コールバックを用いて呼ばれるように指定できます。よりよい整数解が見つかって、ノードが切り離されると、XPRSsetcbnodecutoff により指定されていればルーチンが呼ばれます。
XPRSsetcbchgbranch か XPRSsetcbchgnode を用いることで、新しい分枝変数が設定されたときや新しいコードを選択するためにコードを遡るときには、ルーチンが呼ばれるように指定できます。恐らく、もっと技術的には、XPRSsetcbsepnode と XPRSsetcbestimate は、ノードの分割方法の決定

MSI 用方法を決めたり、各ノードでの推定劣化量をユーザ離散要素での分枝から得るルーチンを指定できます。
最終整数コールバック XPRSsetcbgloballogは、LP探索コールバックに似ており、グローバルログ
文を出力されると、いつでもユーザルーチンが呼ばれるようにできます。この頻度は制御MIPLOGにより設定できます。

5.4 カットマネージャのはたらき
カットとカットプール（混合型）整数計画問題の解の整数探索は、たくさんのＬＰ問題（ノード）の最適化を呼びだします。この処理は、どのような整数最適解を含んだ状態で実行可能領域を狭くする追加行（制約）を行列に供給することができるかによって、効果的になることがよくあります。このような追加行はカット面やカットと呼ばれます。
Xpress-Optimizer Reference Manual Working with the Cut Manager 35

Implementing
Algorithms

5

デフォルトでは、整数探索中に計算処理を高速化するため、 Optimizer により自動的にカットが行列に追加されます。しかし、上級ユーザ向けに、Optimizer ライブラリは大きな自由度を提供し、特定のノードで追加されるカットを選択したり完全なカットを除去できます。カット面そのものはカットプールに展開され、ライブラリ関数により巧みに操作されます。
カットは特定のノードで行列に直接追加されるか、引き続き行列にロードされる前に最初に、カットプー
ルに保存されます。一般に、カットを容易に作成できれば、各部分問題（ノード）が最適化された後に行列にカットを直接追加し、余分なカットを取り除くことが好ましいのですが、これらの２つのどちらのアプローチが採用されたかによって、時にちょっとした違いを生じます。ノードで行列に追加され、またそのノードで消去されないカットは、自動的にカットプールに追加されます。もし、生成された全カットを保存したいなら、最初にカットをカットプールに追加してください。そうすると、カットは、カットプールから行列にロードできます。このアプローチには、カットプールルーチンが重複カットを見つけたり、強力なカットだけを保存するのに使うことのできるという利点があります。別のノードで行列に追加されたカットに関する経緯を保存するために、カットをユーザ定義のカットタイプに従って分類できます。カットタイプ
はノード番号のような数かビットマップで表せます。後者の場合、カットタイプの各ビットがカットの特性を示すのに使われます。例えば、現在のノードとその子ノードで適用可能なローカルカットとして、または全ノードで適用可能なグローバルカットとしてカットを分類できます。カットタイプの最初のビットが設定されるとローカルカットが指定され、２番目のビットが設定されるとグローバルカットが指定されます。
カットタイプの他のビットは、カットの他の特性を示すのに使われます。ビットマップを使う利点は、例えば全てのローカルカットのような全カットの特性を簡単に選べることにあります。

カットマネジメントルーチン
XPRSaddcutsを用いて、現在のノードでカットは行列に直接追加されます。ノードで行列に追加されたカットは、自動的にカットプールに追加され、そのノードでXPRSdelcutsにより特に消去されない限
り、子ノードで復帰できます。カットはXPRSaddcutsを用いて現在のノードに追加されたり
XPRSloadcutsを使ってカットプールからロードされるのと同様、自動的に復元された親ノードから消去されます。
Xpress-Optimizer Reference Manual Working with the Cut Manager 36

Working with the Cut
Manager5

普通は、基底スラックのカットだけを消去することが一番ですが、そうしないと、基底が有効でなくなり、

MSI 用最適基底を回復するのに多くの反復が必要となります。XPRSdelcuts の第２引数が１に設定されると、他の制御に関係なく、非基底スラックのカットは決して消去されません。よって、これをいつも１にしておくことを強くお勧めします。
関数 XPRSstorecuts により、カットは直接カットプールに保存できます。カットプールに追加されたカットは、現在のノードで行列に自動的に追加されないので、このようなカットは、アクティブになる前に
XPRSloadcuts を使って行列に明示的にロードされなくてはなりません。XPRSstorecuts の第３引数が１に設定されると、カットプールは、追加されたカットと同一なカットタイプの重複カットをチェックします。重複カットが見つかると、右辺値がカットを強くする場合に新しいカットが追加されます。カットプール内のカットが、追加されたカットより弱ければ、木のアクティブノードに、既に適用されていない場
合に限り取り除かれます。一方、この係数が２に設定されていれば、カットタイプは無視され、同じテスト
が全てのカットに実施されます。分枝限定木のアクティブノードに既に適用されていない限り、
XPRSdelcpcuts ルーチンにより、カットをカットプールから取り除くことが、可能です。
カットプールのカットのリストは、XPRSgetcpcutlistが、その添字リストを返す限り、コマンド
XPRSgetcpcutsによって得られます。現在のノードでアクティブなカットのリストはXPRSgetcutlist
によって得られます。

ユーザカットマネージャルーチン
ユーザはまた、分枝限定探索において個々のノードで呼ばれるユーザ自身のカットマネージャルーチ
ンを作成できます。このルーチンは、前もってライブラリ関数の呼びだしで定義され、コールバック同様、呼ばれる頻度に従って定義されます。この処理の最初に、カットマネージャ初期化ルーチンが呼ばれ、
XPRSsetcbinitcutmgrにより指定されます。同じように、最後には、XPRSsetcbfreecutmgrにより終了ルーチンが指定できます。コマンド XPRSsetcbcutmgrにより、木の各ノードで呼ばれるルーチンを定義できます。これらの関数の更に詳しいことについては、６章の関数リファレンスを参照ください。
Xpress-Optimizer Reference Manual Goal Programming 37

Implementing
Algorithms

5

5.5 目標計画法
概要
目標計画法はＬＰの拡張で、目標を制約の集合として与えます。目標計画法では２つの基本的なモデルとして優先（辞書式）モデルとアルキメデスモデルがあります。優先モデルでは、目標に優先順位がつけられます。あるレベルの目標は次のレベルの目標よりも絶対的に重要です。アルキメデスモデル
では、目標を達成できない場合の重みやペナルティが設定され、これらの最小化問題となります 。
Optimizerでは、目標は制約か目的関数（Ｎ行）により構築されます。制約が目標の構築に使われる場
合、目標は制約違反の最小化となります。制約が満たされれば目標達成となります。優先モデルでは、優先順位にしたがって、できるだけたくさんの目標を達成しようとします。アルキメデスモデルでは、各目標を満たせない際に発生するペナルティの重み付き総和を最小化します。目標がＮ行で構築されている場合、優先モデルでは各Ｎ行に対して、そのＮ行の最適値から目標が計算されます。これは、Ｎ行の最適値との許容格差を相対値か絶対値で指定して実施されます。アルキメデスモデルでは、問題は複数の目的関数を有するＬＰとなり、目的関数の重み付き総和を最小化します。ここでは、４つの異なる形の目標計画の例を示します。目標計画法はXPRSgoal (GOAL)コマンドを用いることで実施されます。構文は本マニュアルのリファレンスのページに詳しく説明してあります。.

優先モデル
優先モデルでは、目標は最も重要なものから軽いものまでランク付けられます。最初に、最も重要な目
標を満たすようにします。そして、最初の目標を満たしながら２つ目の目標を満たすようにします。このMSI 用ようなことを高い順位の目標の離れを増加しなくてはならなくなるまで続けて目標を満たすようにします。
例は以下の通りですgoal 1 (G1): 7*x + 3*y >= 40
goal 2 (G2): 10*x + 5*y = 60
goal 3 (G3): 5*x + 4*y <= 35
Xpress-Optimizer Reference Manual Goal Programming 38

Goal Programming

5

LIMIT : 100*x + 60*y <= 600

最初に、第１目標（Ｇ１）を満たそうとします。そして、ｘ＝5.0，ｙ＝1.6が得られますが、第２（Ｇ２）、第３（Ｇ３）目標を満たしません。第１目標を満たしながら、第２目標を満たそうとすると、ｘ＝6.0，ｙ＝0.0は満た
しますが、第３目標を満たせません。そこで、この過程を繰り返します。この場合、３つ全ての目標を満たす解は存在しません。

アルキメデスモデル
アルキメデスモデルでは、制約違反の重み付き総和を最小化します。次のような問題を考えます。ここでは、ペナルティが与えられています。
問題の答はこのようになります。
7*ｘ＋3*ｙが 40 より小さい場合には１単位につきペナルティ８単位を与えます。他の式も同様です。そして、解はこのペナルティの総和を最小化します。ペナルティは重みと言い換えてもよいでしょう。ここでの解はｘ＝６，ｙ＝０，ｄ１＝ｄ２＝ｄ３＝０，ｄ４＝５となり、これは１番目と２番目に重要な制約を満たしていますが、３番目の制約を満たすには右辺を５単位だけ減らさなくてはなりません。
問題が実行不能の場合には、全ての目標制約が緩和され、解は得られません。
Penalties
goal 1 (G1): 7*x + 3*y >= 40 8
goal 2 (G2): 10*x + 5*y = 60 3
goal 3 (G3): 5*x + 4*y >= 35 1
LIMIT : 100*x + 60*y <= 600
Minimize 8*d1 + 3*d2 + 3*d3 + 1*d4
Subject to: 7*x + 3*y + d1 >= 40
10*x + 5*y + d2 - d3 = 60
5*x + 4*y + d4 >= 35
100*x + 60*y <= 600
d1 >= 0, d2 >= 0, d3 >= 0, d4 >= 0
Xpress-Optimizer Reference Manual Goal Programming 39

Implementing
Algorithms

5

目的関数を使った優先モデル
重要度が分かっている目的関数の集合があるとします。制約条件のある優先モデルの場合、目標は最も重要なものから軽いものまでランク付られています。まず、第１の目標の最適値を探します。最適値が見つかったら、この目的関数をある程度よりは悪くならしない範囲で変えてもよいという制約式に変更します。これは最適解を得る前に固定値（絶対偏差）あるいは相対値（相対偏差）で与えます。そして、次の目標（２番目に重要な目的関数）を最適化します・・・以下同様です。
例えば、次のような問題を考えます。
各Ｎ行には最適化（最大，最小）の方向と相対（Ｐ）または絶対（Ｄ）偏差が設定されています。ＯＢＪ１とＯＢＪ３には各々10％，20％の相対偏差が、またＯＢＪ２には絶対偏差４単位が与えられています。
第１の目的関数を最大化すると最適値は-4.615385となります。10％の偏差をつけて目的関数を制約

MSI 用に変更します。
5*x + 2*y - 20 >= -4.615385 - 0.1*4.615385

さて、先の目的関数の値は最良値から10％の範囲を出ないこととして、次に重要な目的関数（ＯＢＪ２）を最小化すると、最適値は51.133603となります。その結果、第２の目的（ＯＢＪ２）は次のような制約に
書き換えられます。
-3*x + 15*y - 48 <= 51.133603 + 4

この目的関数の値が最小値から４単位以上大きくならないとします。
Sense D/P Deviation
goal 1 (OBJ1): 5*x + 2*y - 20 max P 10
goal 2 (OBJ2): -3*x + 15*y - 48 min D 4
goal 3 (OBJ3): 1.5*x + 21*y - 3.8 max P 20
LIMIT : 42*x + 13*y <= 100
Xpress-Optimizer Reference Manual Goal Programming 40

Goal Programming

5

最後に、ＯＢＪ３を最大化します。最適値141.943668が得られます。20％の偏差が許されているので、この目的関数は次のような制約式に書き換えられます。
1.5*x + 21*y - 3.8 >= 141.943995 - 0.2*141.943995

この問題の解はｘ＝0.238062，ｙ＝6.923186です。

目的関数を使ったアルキメデスモデル
最後に、重み付けられた目的関数値の総和を最適化します。言い換えると、複数の目的関数がある問
題を解きます。次のような問題を考えます。
ここでは３つの異なる目的関数があり、それらを重み欄の値で重み付けして１つの目的関数にまとめます。このモデルの解は次の式を最小化したものとなります。
1*(-3*x + 15*y - 48) - 100*(5*x + 2*y - 20) - 0.01*(1.5*x +21*y - 3.8)解における目的関数の各値は次の通りです。
OBJ1: 5*x + 2*y - 20 = -4.615389
OBJ2: -3*x + 15*y - 48 = 67.384613
OBJ3: 1.5*x + 21*y - 3.8 = 157.738464

解はｘ＝0.0，ｙ＝7.692308です。
Weights Sense
goal 1 (OBJ1): 5*x + 2*y - 20 100 max
goal 2 (OBJ2): -3*x + 15*y - 48 1 mingoal 3 (OBJ3): 1.5*x + 21*y - 3.8 0.01 max
LIMIT : 42*x + 13*y <= 100
Xpress-Optimizer Reference Manual Console and Library Functions 41

Console and Library

6
6 コンソールとライブラリ関数
Functions

Xpress-Optimizerのコンソールユーザ、ライブラリユーザとも行列ファイルからの問題の入力や解のための単純なルーチンから、複雑なコールバック関数や求解過程の大規模制御まで、多くのルーチンを使うことができます。これらのうち「コンソールモード」を含む中核となる機能については、両ユーザとも利用可能です。ライブラリユーザは更に高度な機能が使えます。
この機能は、コンソールモードにより提供される機能を拡張し、またOptimizerとユーザプログ
ラムとの間を更に制御したり、より複雑な問題の発展を提供します。

MSI 用6.1 コンソールモード関数
本章には、コンソール及びアドバンストモードの関数を並べて説明してあるため、ライブラリ
ユーザはOptimizerライブラリの全能力を使うためのクイックリファレンスとして使用できます。
コンソール Xpressユーザについては、以下の関数しよう可能です。
コマンド
ALTER
FIXGLOBAL
GLOBAL
GOAL
HELP
IIS
MAXIM / MINIM
QUIT
RANGE
READBASISREADDIRS
READPROB
RECURSERESTORESAVESCALESETPROBNAME

説明

行列要素や制約条件を変更する
離散要素を解ファイルの値に固定する
整数解の探索を始める
目標計画を実行するコマンドの簡単な説明を表示する
既約実行不可能集合の探索を始める
解探索ルーチンコンソールOptimizerを終了する
問題のレンジ情報を計算する
前もって保存された基底をファイルから読みこむ
整数解探索の方向を示すディレクティブファイルを読みこむ
ファイルから問題行列を読みこむ
非線形問題を解くための反復を実行する
ファイルからOptimizerのデータ構造を戻す
現在のデータ構造をファイルに保存する
現在の行列を再スケーリングする
現在のデフォルト問題名を設定する

ページ数

53
83
141
144
146
147
175
179
180
182
184
186
189
191
193
194
232

Xpress-Optimizer Reference Manual Console and Library Functions 42

Console and Library
Functions6関数についてのリストは、2.7章「クイックリファレンス」を参照してください。

6.2 関数の記述要領
本章に示した関数は、以下のように整理して示します。

関数名
各ルーチンの記述は分かりやすくするために新しいページから始まっています。関数のライブ
ラリ名はページの左上に、コンソール Xpress名は右上にあります。

目的
ルーチンの簡単な説明とその目的がインフォメーションセクションを始めます。

概要
ルーチンを使うための構文の概要を示します。オプションである引数及びフラグは必要なけれ
ばNULLと指定されます。このような可能性のある場合については、引数のところかルーチンの説明の最後に補足として示してあります。関数がコンソールモードで使えるものの場合、ライブラリの構文を最初に示し、続いてコンソール Xpressの構文を示します。

引数ルーチンの引数の一覧とそれに設定可能な値が示されます。
STOP

コンソールOptimizerを終了させる

235

MSI 用WRITEBASISWRITEOMNIWRITEPROBWRITEPRTRANGEWRITEPRTSOLWRITERANGEWRITESOL
コマンド

ファイルに現在の基底を書きこむ
バイナリOMNI形式ファイルに現在の解を書きこむ
行列ファイルに現在の問題を書きこむ
ファイルにレンジ解を出力する
ファイルに現在の解を出力する
ファイルにレンジ情報を書きこむ
ファイルに現在の解を書きこむ
説明

240
242
244
246
248
250
252
ページ数

Xpress-Optimizer Reference Manual Console and Library Functions 43

Console and Library
Functions6

エラー値
Optimizer リターンコードは９章「エラーメッセージ＆リターンコード」に説明します。なお、ライブラリユーザの場合、リターンコード３２は、追加のエラー情報が得られるかもしれない
ことを示し、エラーを起こした関数を特定します。これは
XPRSgetintattrib(prob,XPRS_ERRORCODE,&errorcode);を呼びだすことで得られます。
各関数についてこうして得られるエラー値はエラー値セクションに示されます。
XPRSgetlasterror関数を使うことで、エラーの説明が得られます。エラー値に関心がなけ
れば、本セクションを省略してください。

関係する制御そのルーチンに関係する制御については、タイプ別に示されます。ライブラリユーザは、上記のエラー値セクションのXPRSgetintattribと同様、ここで与えられる制御名に接続語XPRS_
を付けてください。コンソール Xpressユーザは Xpress-MP Essentialsにあるように、この接続語なしで制御を使います。これらの制御を使うにはルーチンを呼ぶ前に設定してください。

例
１〜２の例を用いてルーチンの使い方を説明します。

補足
ルーチンの説明に含まれない追加情報を終わりに示します。

関連事項
関連するルーチンやトピックのリストを比較やリファレンスとして最後に示します。
Xpress-Optimizer Reference Manual Console and Library Functions 44

XPRSaddcols
XPRSaddcols

6

XPRSaddcols

目的
入力ルーチンにより行列をOptimizerに引き渡した後、行列に列を加えます。

概要
int XPRSaddcols(XPRSprob prob, int newcol, int newnz,
double *objx, int *mstart, int *mrwind, double *dmatval,
double *bdl, double *bdu);

引数関係する制御Integer
DoubleMSI 用

現在の問題

prob
newcolnewnz
objx
mstart

新しい列の数mrwinddmatvalbdl
bdu
EXTRACOLS
EXTRAELEMSEXTRAMIPENTS
MATRIXTOL

追加列における新たな非零要素数
新しい列の目的関数の係数を含む長さnewcolの倍精度型配列
各列の要素の開始のmrwind，dmatval配列のオフセットを含む長さ
newcol+1の整数型配列
各列の要素の行添字を含む長さnewnzの整数型配列.
要素値を含む長さnewnzの倍精度型配列
追加列の下限を含む長さnewcolの倍精度型配列
追加列の上限を含む長さnewcolの倍精度型配列追加できる列の数追加できる行列要素数
追加できる離散要素数
行列要素の零許容範囲

Xpress-Optimizer Reference Manual Console and Library Functions 45

XPRSaddcols

6

例
ここでは二つの問題を考えます。
XPRSaddcolsを使用して、(a)を(b)に変換し、次にXPRSaddnamesを使用して、新しい変数に名前をつけます。
obj[0] = 3;
mstart[] = {0, 3};mrwind[] = {0, 1, 3};matval[] = {2.0, 1.0, 3.0};
bdl[0] = 0.0; bdu[0] = 12.0;...
XPRSaddcols(prob,1,3,obj,mstart,mrwind,matval,bdl,bdu);
XPRSaddnames(prob,2,"z",2,2);

補足
効果を最大化するため、問題をロードする前にEXTRACOLS，EXTRAELEMS，EXTRAMIPENTS
制御を設定して、追加する行や要素のためのスペースを確保してください。
2. ライブラリヘッダファイル内に定義される倍精度型定数XPRS_PLUSINFINITY，
XPRS_MINUSINFINITYは、上下界値配列において各々プラス・マイナス無限大を表すのに使われます。
1.

関連事項
XPRSaddnames, XPRSaddrows, XPRSalter, XPRSdelcols.
(a) Maximize (b) Maximize
Subject to: Subject to:
2x y + 2x y 3z + +x 4y + 24 .
y5.
3x y + 20 .
xy +9.
x 4y 2z + + 24 .
y z +5 .
3x y + 20 .

MSI 用x y 3z + + 9 .
z 12 .
Xpress-Optimizer Reference Manual Console and Library Functions 46

XPRSaddcuts
XPRSaddcuts

6

XPRSaddcuts

目的
現在のノードで行列に直接カットを追加します。現在のノードで行列に加えられたカットと現在のノードで削除されなかったカットは自動的にカットプールに追加されます。カットプールに追加されたカットは子ノードでは、自動的に戻されます。

概要
int XPRSaddcuts(XPRSprob prob, int ncuts, int *mtype,char *qrtype, double *drhs, int *mstart, int *mcols,
double *dmatval);

引数
現在の問題

prob
ncuts
mtype

追加されるカットの数.

カットタイプを含む長さncutsの整数型配列。ユーザはカットタイプ
として任意の正の整数を選択でき、カットタイプはユーザ提供のパラメーターを使う他のカットマネージャルーチン内のカットを区別するのに使われます。カットタイプは整数やビットマップで設定できます。XPRSdelcutsを参照してください
以下の行タイプを含む長さncutsの文字型配列
L 行を示すG 行を示すE 行を示すカットの右辺要素を含む長さncutsの倍精度型配列
各カットの開始を示すmcols，dmatval配列へのオフセットを含む整数型配列。これは、カットncuts+1が開始点として、最終要素であるmstart[ncuts]を含む長さ ncuts+1の配列です
カット内の列添字を含む長さmstart[ncuts]-1の整数型配列
カットの行列値を含む長さmstart[ncuts]-1の倍精度型配列

qrtypedrhs
mstartmcols
dmatval.
.
=Xpress-Optimizer Reference Manual Console and Library Functions 47

XPRSaddcuts

6

関係する制御Double補足
1.

カットの列と要素はXPRSaddcutsに渡されるmcols，dmatval配列に隣接して保存されます。各カットの開始点は mstart配列に保存されます。最後のカットの長さを決定する
ために、mstart配列はmcolsとdmatvalの中でカットがncuts+1を開始点としてその位置を含む配列の最後の要素を持つ長さncuts+1の配列です。mstart[ncuts]は追加される
カットにおける非零要素数を示します。

MSI 用2.

行列に追加されるカットは、常に行列の最後に置かれ、行の数は元のカットの数に追加されて設定されます。ncutsが追加された場合、行0,･･････, ROWS-ncuts-1はもとの行であり、行ROWS-ncuts,･･･････, ROWS-1は追加カットの分です。カットの数はCUTS問題特性
により調べられます。

関連事項
XPRSaddrows, XPRSdelcpcuts, XPRSdelcuts, XPRSgetcpcutlist,
XPRSgetcutlist, XPRSloadcuts, XPRSstorecuts, 4章「カットマネジャのはたらき」
MATRIXTOL 行列要素の零許容範囲
Xpress-Optimizer Reference Manual Console and Library Functions 48

XPRSaddnames
XPRSaddnames

6

XPRSaddnames

目的
モデルをロードするとき、モデルの行や列は、それらと関係する名前を持たないかもしれません。これは行や列がそれらの通し番号により表されるためで、重要ではないかもしれません。
しかし、ASCII形式解ファイルに列や行の名前が現れるようにしたい場合、XPRSaddnamesで行や列の範囲に名前をつけることができます。

概要
int XPRSaddnames(XPRSprob prob, int type, char *cnames,
int first, int last);

引数関係する制御Integer例
変数名（aとb），目的関数（profit），制約条件名（firstとsecond）を問題に追加する。
char rnames[] = "profit\0first\0second"char cnames[] = "a\0b";...
XPRSaddnames(prob,1,rnames,0,nrow-1);
XPRSaddnames(prob,2,cnames,0,ncol-1);
prob
現在の問題
type
1
行の名前
2
列の名前
cnames
最後はNULLで終わり、それぞれの名前が最大でMPSNAMELENGTH+1

first
last
MPSNAMELENGTH

文字数のNULL文字を含む文字バッファ。この制御を変更する場合は、問題をロードする前に実施しなくてはなりません
行，列のレンジの開始
行，列のレンジの終了
最大名前文字長さ

Xpress-Optimizer Reference Manual Console and Library Functions 49

XPRSaddnames

6

関連事項
XPRSaddcols, XPRSaddrows, XPRSgetnames.
Xpress-Optimizer Reference Manual Console and Library Functions 50

XPRSaddrows

6

MSI 用XPRSaddrows

XPRSaddrows

目的
入力ルーチンを用いてOptimizerに行列を引き渡した後、行列に行を追加します。

概要
int XPRSaddrows(XPRSprob prob, int newrow, int newnz,
char *qrtype, double *rhs, double *range, int *mstart,
int *mclind, double *dmatval);

引数
現在の問題
新しい行の数
追加行における非零要素数
行タイプを含む長さnewrowの文字配列
L
制約条件の不等号関係＜を示す
E
制約条件の等号関係＝を示す
G
制約条件の不等号関係＞を示す
R
範囲の制約条件を示す
N
非束縛制約を示す
右辺要素を含む長さnewrowの倍精度型配列
各行の要素の開始のmclind，dmatval配列のオフセットを含む長さ
newrowの整数型配列。範囲制約がない場合は、NULLになります。
range配列内の値はRタイプ行のみ読まれます。他のタイプ行の要素は無視されます
各行の要素の開始の配列mclindとdmatvalのオフセットを含む長さ
newrow+1の整数型配列
各行の要素の（隣接した）列添字を含む長さnewnzの整数型配列(隣接した)要素値を含む長さnewnzの倍精度型配列

prob
newrownewnz
qrtyperhs
range

mstartmclinddmatval.
=.

Xpress-Optimizer Reference Manual Console and Library Functions 51

XPRSaddrows

6

関係する制御Integer
Double例
問題に行を追加し、それにNewRow:という名前をつけます。
qrtype[0] = ’L’;
rhs[0] = 25.0;
mstart[] = {0, 3};mclind[] = {0, 1, 2};
dmatval[] = {8.0, 9.0, 10.0};...
XPRSaddrows(prob,1,3,qrtype,rhs,NULL,mstart,mclind,
dmatval);XPRSaddnames(prob,1,"NewRow",4,4);

MSI 用補足
最大の効果をあげるために、問題をロードする前にEXTRAROWS，EXTRAELEMS制御を設定して追加行や要素のためのスペースを確保してください。

関連事項
XPRSaddcols, XPRSaddcuts, XPRSaddnames, XPRSdelrows.
EXTRAELEMS
追加できる行列要素の数
EXTRAROWS
追加できる行の数
MATRIXTOL
行列要素の零許容範囲
Maximize:
Subject to:
2x y 3z + +x 4y 2z + + 24 .
y z +5 .
3x y 20 . +x y 3z + + 9 .
8x 9y 10z + + 25 .
Xpress-Optimizer Reference Manual Console and Library Functions 52

XPRSaddsetnames
XPRSaddsetnames

6

XPRSaddsetnames

目的
離散要素をもつモデルをロードしたとき、特殊順序集合は、それに関係した名前を持たないかもしれません。ASCII形式解ファイルに名前が現れるようにしたい場合、この関数により集合の範囲に名前をつけることができます。

概要
int XPRSaddsetnames(XPRSprob prob, char *names, int first,
int last);

引数関係する制御Integer

例
問題に set1，set2という集合名をつけます。
char snames[] = "set1\0set2"...
XPRSaddsetnames(prob,snames,0,1);

関連事項
XPRSaddnames, XPRSloadglobal, XPRSloadqglobal.
prob
names

first
last
MPSNAMELENGTH

現在の問題
名前の最後がNULLで終わる最大でMPSNAMELENGTH+1文字数のNULL
文字を含むバッファ。この制御を変更する場合は、問題をロードする前に実施しなくてはなりません
集合範囲の開始
集合範囲の終了
最大名前文字長さ

Xpress-Optimizer Reference Manual Console and Library Functions 53

XPRSalter

MSI 用ALTER
XPRSalter ALTER6

XPRSalter ALTER

目的
現在の問題における行列要素や右辺，制約を変更します。

概要
int XPRSalter(XPRSprob prob, const char *filename);
ALTER [filename]

引数
関係する制御Integer
Double例 1 (ライブラリ)

以下の呼び出しはファイル名を指定していないので、ファイルproblem_name.altが読みこまれ、そこから、現在の行列を変更するためのコマンドが取り込まれます。
XPRSalter(prob,"");例 2 (コンソール)
次の例は、ファイルfred.altが読み込まれ、そこから現在の行列を変更するための指示が取り込まれます。
ALTER fred補足
ファイルfilename.altが読まれます。それは付録A.6「行列変更ファイル(.alt)」に説明されている形式で、行列の修正についての記述が含まれるASCIIファイルです。MPS REVISE
データのMODIFY形式もサポートされています。
prob
現在の問題
filename
読みこむファイルを指定する200文字以内の文字列。省略した場合は、デフォルトproblem_nameに拡張子.altを付けたものになります
EXTRAELEMS
追加できる行列要素の数
MATRIXTOL
行列要素の零許容範囲
1.

Xpress-Optimizer Reference Manual Console and Library Functions 54

XPRSalter
ALTER

6

コマンドXPRSalter (ALTER)と制御EXTRAELEMSを使うとメモリ内の問題の値や制約の意
味を変えられます。効果を最大化するため、追加する行列要素のスペースを確保してください。追加できる要素数の最大値の定義はXPRSreadprob(READPROB)の前に実施してください。
3. 事前分析済みの整数モデルを変更することはできません。最適化後に変更したい場合は、最適化前に PRESOLVEを0に設定して事前分析をしないかXPRSreadprob (READPROB)でモデルを読みなおしてください。
2.

関連事項
付録A.6「行列変更ファイル(.alt)」
Xpress-Optimizer Reference Manual Console and Library Functions 55

XPRSbranchcut
XPRSbranchcut

6

XPRSbranchcut

MSI 用目的
ユーザ離散要素上で分岐するために適用されるカットプールにおいてカットと（または）上下
界値の添字を指定します。このルーチンは、ユーザ分割コールバック関数XPRSsetcbsepnodeからのみ呼びだすことができます。

概要
int XPRSbranchcut(XPRSprob prob, int ncuts, int *mindex);

引数関係する制御なし

例
この例は、整数解探索のためのユーザ分割コールバック関数を定義します。
XPRSsetcbsepnode(prob,sepNode,NULL);
ここで、関数sepNodeは次のように定義されます。
int sepNode(XPRSprob prob, void *my_object, int ibr,
int iglsel, int ifup, double curval){
int index;
double dbd;
if(ifup){dbd = floor(xval);
XPRSstorebounds(prob,1,&iglsel,"U",&dbd,&index);}else{
dbd = ceil(xval);
prob
現在の問題
ncuts
適用されるカットと（あるいは）上下界値の数
mindex（XPRSstoreboundsで返された）上下界値、または適用されるカットプール内のカットの添字を含む配列
Xpress-Optimizer Reference Manual Console and Library Functions 56

XPRSbranchcut

6

XPRSstorebounds(prob,1,&iglsel,"L",&dbd,&index);}
XPRSbranchcut(prob,1,&index);
return 0;}

関連事項
XPRSgetcpcutlist, XPRSloadcuts, XPRSsetcbestimate,
XPRSsetcbsepnode, XPRSstorecuts, 5.4章「カットマネージャーのはたらき」
Xpress-Optimizer Reference Manual Console and Library Functions 57

XPRSbtran
XPRSbtran

6

XPRSbtran

目的
現在の基底の逆数によってユーザに与えられる(行)ベクトルの事後掛け算。

MSI 用

概要
int XPRSbtran(XPRSprob prob, double *vec);

引数
関係する制御Double例
全ての配列が次元化されているとして、制約番号irowの（スケーリングされていない）タブ
ロー行zを求めます。
/* Minimum size of arrays:
y: nrow + ncol;
mstart: 2;
mrowind, dmatval: nrow. *//* set up the unit vector y to pick out row irow */for(i = 0; i < nrow; i++)y[i] = 0.0;y[irow] = 1.0;
rc = XPRSbtran(prob,y); /* y = e*B^{-1} *//* Form z = y * A */for(j = 0; J < ncol, j++){rc = XPRSgetcols(prob,mstart,mrowind,dmatval,nrow,&nelt,j,j);for(d = 0.0, ielt = 0, ielt < nelt; ielt++)
prob
現在の問題
vec
逆基底が掛けられる値を含む長さROWSの倍精度型配列。変換された

値は配列内に現れます
イータ要素の零許容範囲

ETATOL

Xpress-Optimizer Reference Manual Console and Library Functions 58

XPRSbtran

6

d += y[mrowind[ielt]] * dmatval[ielt];y[nrow + j] = d;}

補足
行列が事前分析済みの場合、XPRSbtranはその事前分析済み問題の基底と動作します。

関連事項
XPRSftran.
Xpress-Optimizer Reference Manual Console and Library Functions 59

XPRSchgbounds
XPRSchgbounds

6

XPRSchgbounds

目的行列の列の上下界値を変更します。

概要
int XPRSchgbounds(XPRSprob prob, int nbnds, int *mindex,
char *qbtype, double *bnd);

引数関係する制御なし

MSI 用例
現在の問題の列0について上限0.5となるように変更します。
mindex[0] = 0;
qbtype[0] = ’U’;
bnd[0] = 0.5;
XPRSchgbounds(prob,1,mindex,qbtype,bnd);

補足1.

mindex配列に列添字が２回現れると、一度で変数の上限と下限の両方を変更することができます。
2. XPRSchgboundsは事前分析後の問題に適用され、事前分析された問題を参照します。
prob
現在の問題
nbnds
変更する上下界値の数
mindex上下界値が変更される列添字を含む大きさnbndsの整数型配列
qbtype
変更される上下界値タイプを示す長さnbndsの文字配列
U
上限を変更
L
下限を変更
B
両方の上下界値を変更。列は固定
bnd
新しい上下界値値を与える長さnbndsの倍精度型配列
Xpress-Optimizer Reference Manual Console and Library Functions 60

XPRSchgbounds

6

3. ライブラリヘッダファイルに定義された倍精度型定数XPRS_PLUSINFINITY，
XPRS_MINUSINFINITYは、上下界値(bnd)配列内で各々プラス・マイナス無限を表すのに使うことができます。

関連事項
XPRSgetlb, XPRSgetub, XPRSstorebounds.
Xpress-Optimizer Reference Manual Console and Library Functions 61

XPRSchgcoef
XPRSchgcoef

6

XPRSchgcoef

目的行列内の１つの係数を変更します。その係数が存在しなければ、新しい係数を行列に追加します。多くの係数が行列の行に追加される場合は、既存の行を削除し、新しい行を追加することが効果的です。

概要
int XPRSchgcoef(XPRSprob prob, int irow, int icol,
double dval);

引数
関係する制御Double例
行列の２行目，１列目の要素を0.33に変更します。
XPRSchgcoef(prob,2,1,0.33);

補足
XPRSchgcoefを何度も呼びだすよりもXPRSchgmcoefを使う方が効率的で、そのような場合にはそうするべきです。

MSI 用関連事項
XPRSaddcols, XPRSaddrows, XPRSchgmcoef, XPRSchgmqobj,
XPRSchgobj, XPRSchgqobj, XPRSchgrhs, XPRSgetcols, XPRSgetrows.

現在の問題
係数の行添字係数の列添字
係数の新しい値。dvalが零の場合、係数は削除されます
行列要素の零許容範囲

prob
irow
icol
dval
MATRIXTOL

Xpress-Optimizer Reference Manual Console and Library Functions 62

XPRSchgcoltype
XPRSchgcoltype

6

XPRSchgcoltype

目的
行列内の列のタイプを変更します。

概要
int XPRSchgcoltype(XPRSprob prob, int nels, int *mindex,
char *qctype);

引数関係する制御なし

例
行列の３列目と５列目を整数，バイナリに各々変更します。
mindex[0] = 3; mindex[1] = 5;
qctype[0] = ’I’; qctype[1] = ’B’;
XPRSchgcoltype(prob,2,mindex,qctype);

補足
列のタイプは、MIP探索の開始前でのみ変更できます。問題が事前分析済みのときに
XPRSchgcoltypeを呼びだすと、事前分析された列番号が示されます。列を部分整数，半連続，半連続整数変数に変更することはできません。

関連事項
XPRSaddcols, XPRSchgrowtype, XPRSdelcols, XPRSgetcoltype.
prob
現在の問題
nels
変更する列の数
mindex列の添字を含む長さnelsの整数型配列
qctype
新しい列タイプを与える長さnelsの文字配列
C 連続列
B バイナリ列
I 整数列
Xpress-Optimizer Reference Manual Console and Library Functions 63

XPRSchgmcoef
XPRSchgmcoef

6

XPRSchgmcoef

目的
行列内の複数の係数を変更します。係数が存在しない場合は、行列に追加します。行列の１つの行に多くの係数を追加する場合は、行列の古い行を削除して新しい行を追加する方が効果的です。

MSI 用

概要
int XPRSchgmcoef(XPRSprob prob, int nels, int *mrow,int *mcol, double *dval);

引数
関係する制御Double例
mrow[0] = 0; mrow[1] = 3;
mcol[0] = 1; mcol[1] = 5;
dval[0] = 2.0; dval[1] = 0.0;
XPRSchgmcoef(prob,2,mrow,mcol,dval);

これにより２つの要素が2.0，0.0に変わります。

補足
多くの係数を変更する場合、XPRSchgmcoefを使う方がXPRSchgcoefを繰り返し呼びだすより効果的です。
prob
現在の問題
nels
新しい係数の数
mrow
変更する係数の行添字を含む長さnelsの整数型配列
mcol
変更する係数の列添字を含む長さnelsの整数型配列
dval
新しい係数値を含む長さnelsの倍精度型配列。dvalの要素が零のときは、係数は削除されます
MATRIXTOL
行列要素の零許容範囲
Xpress-Optimizer Reference Manual Console and Library Functions 64

XPRSchgmcoef

6

関連事項
XPRSchgcoef, XPRSchgmqobj, XPRSchgobj, XPRSchgqobj, XPRSchgrhs,
XPRSgetcols, XPRSgetrhs.
Xpress-Optimizer Reference Manual Console and Library Functions 65

XPRSchgmqobj
XPRSchgmqobj

6

XPRSchgmqobj

目的目的関数の複数の二次係数を変更します。係数が存在しない場合は、新しい係数を目的関数に追加します。

概要
int XPRSchgmqobj(XPRSprob prob, int nels, int *mqcol1,
int *mqcol2, double *dval);

引数
関係する制御なし

例
次のコードは、目的関数の項を決定します。
mqcol1[0] = 0; mqcol2[0] = 0; dval[0] = 6.0;
mqcol1[1] = 1; mqcol2[1] = 0; dval[1] = 3.0;
XPRSchgmqobj(prob,2,mqcol1,mqcol2,dval);

MSI 用補足
配列mqcol1，mqcol2内の列は行列に存在しなくてはなりません。存在しない場合は
XPRSaddcolsで列を追加してください。
2. いくつかの係数を変更する場合には、XPRSchgqobjを繰り返し呼びだすよりも
XPRSchgmqobjを使う方が効果的です。
prob
現在の問題
nels
変更する係数の数
mqcol1
各二次の項の最初の変数の列添字を含む大きさncolの整数型配列
mqcol2
各二次の項の２番目の変数の列添字を含む大きさncolの整数型配列
dval
係数の新しい値。dval内の要素が0の場合、相当する要素は削除されます。これらは二次のヘシアン行列の係数です1.

6x 1 ( )2 3x 1 ( ) x 2 ( ) ⋅ 3x 2 ( ) x 1 ( ) ⋅ + + ( )2 .
Xpress-Optimizer Reference Manual Console and Library Functions 66

XPRSchgmqobj

6

関連事項
XPRSchgcoef, XPRSchgmcoef, XPRSchgobj, XPRSchgqobj, XPRSgetqobj.
Xpress-Optimizer Reference Manual Console and Library Functions 67

XPRSchgobj
XPRSchgobj

6

XPRSchgobj

目的目的関数の係数を変更します。

概要
int XPRSchgobj(XPRSprob prob, int nels, int *mindex,
double *obj);

引数関係する制御なし

例
XPRSchgobjを使って目的関数の３つの係数を変更します。
mindex[0] = 0; mindex[1] = 2; mindex[2] = 5;
obj[0] = 25.0; obj[1] = 5.3; obj[2] = 0.0;
XPRSchgobj(prob,3,mindex,obj);

補足
目的関数の定数部分の値は、問題特性OBJFIXEDによって得られます。

関連事項
XPRSchgcoef, XPRSchgmcoef, XPRSchgmqobj, XPRSchgqobj,
XPRSgetobj.

現在の問題
変更する目的関数の係数要素の数
レンジ要素が変わる列の添字を含む長さnelsの整数型配列。-1の添
字は、右辺の目的関数の定数部分が変わることを示します
新しい目的関数の係数を与える長さnelsの倍精度型配列

prob
nels
mindexobj

Xpress-Optimizer Reference Manual Console and Library Functions 68

XPRSchgqobj

6

MSI 用XPRSchgqobj

XPRSchgqobj

目的
Hessian行列の変数の組(icol,jcol)に相当する目的関数の二次係数の１つを変更します。

概要
int XPRSchgqobj(XPRSprob prob, int icol, int jcol,
double dval);

引数
関係する制御なし

例
次のコードは目的関数に項を追加します。
icol = jcol = 0; dval = 6.0;
XPRSchgqobj(prob,icol,jcol,dval);
icol = 0; jcol = 1; dval = 3.0;
XPRSchgqobj(prob,icol,jcol,dval);

補足
列icol，jcolは行列に存在しなくてはなりません。存在しない場合は、ルーチンXPRSaddcols
を使って追加しなくてはなりません。
2. icolがjcolと等しくない場合、行列要素（icol, jcol）と（jcol, icol）はHessian対称でないように変更されます。
1.

関連事項
XPRSchgcoef, XPRSchgmcoef, XPRSchgmqobj, XPRSchgobj,
XPRSgetqobj.

現在の問題
二次項の第１変数の列添字
二次項の第２変数の列添字
二次のHessian行列における係数の新しい値。dval内の要素が0のとき、相当する要素は削除されます

prob
icol
jcol
dval

6x 1 ( )2 3x 1 ( ) x 2 ( ) ⋅ 3x 2 ( ) x 1 ( ) ⋅ + + ( )2 .
Xpress-Optimizer Reference Manual Console and Library Functions 69

XPRSchgrhs
XPRSchgrhs

6

XPRSchgrhs

目的
行列の右辺要素を変更します。

概要
int XPRSchgrhs(XPRSprob prob, int nels, int *mindex,
double *rhs);

引数
関係する制御なし

例
行2，6，8の３つの右辺を新しい値に変更する。
mindex[0] = 2; mindex[1] = 8; mindex[2] = 6;
rhs[0] = 5.0; rhs[1] = 3.8; rhs[2] = 5.7;
XPRSchgrhs(prob,3,mindex,rhs);

MSI 用関連事項
XPRSchgcoef, XPRSchgmcoef, XPRSchgrhsrange, XPRSgetrhs,
XPRSgetrhsrange.

現在の問題
変更する右辺の要素の数
右辺要素が変わる行の添字を含む長さnelsの整数型配列
右辺の値を与える長さnelの倍精度型配列

prob
nels
mindexrhs

Xpress-Optimizer Reference Manual Console and Library Functions 70

XPRSchgrhsrange
XPRSchgrhsrange

6

XPRSchgrhsrange

目的問題の行列の行の範囲を変更します。

概要
int XPRSchgrhsrange(XPRSprob prob, int nels, int *mindex,
double *rng);

引数関係する制御なし

例
問題の制約条件を変更します。
mindex[0] = 5; rng[0] = 2.0;
XPRSchgrhsrange(prob,1,mindex,rng);

補足
行の指定範囲がrの場合、rの行のタイプと値に依存して実施されます。このルーチンを使用す
れば、範囲のない行に変更できます。

関連事項
XPRSchgcoef, XPRSchgmcoef, XPRSchgrhs, XPRSgetrhsrange.
prob
現在の問題
nels
変更する範囲要素の数
mindex
範囲要素が変更される行の添字を含む長さnelsの整数型配列
rng
範囲値を与える長さnelsの倍精度型配列
r の値 行 タ イ プ 効 果,,
x y + 10 . 8 x y + 10 . .
r 0 . b = b . b r – aj xj_ b ..

_ b r +..
r 0 < b = b . b aj xj _ b r – . .
r 0 < b . b r + aj xj _ b . .
r 0 . b . b aj xj

Xpress-Optimizer Reference Manual Console and Library Functions 71

XPRSchgrowtype
XPRSchgrowtype

6

XPRSchgrowtype

MSI 用目的
行列の行のタイプを変更します。

概要
int XPRSchgrowtype(XPRSprob prob, int nels, int *mindex,
char *qrtype);

引数関係する制御なし

例
行４が等式行に変更されます。
mindex[0] = 4; qrtype[0] = ’E’;
XPRSchgrowtype(prob,1,mindex,qrtype);

補足
ある行において初めに行のタイプをRまたはLタイプに変更し、XPRSchgrhsrangeを使用して範囲を変更することで、レンジタイプの行に変更できます。

関連事項
XPRSaddrows, XPRSchgcoltype, XPRSchgrhs, XPRSchgrhsrange,
XPRSdelrows, XPRSgetrowrange, XPRSgetrowtype.
prob
現在の問題
nels
変更する行の数
mindex行の添字を含む長さnelsの整数型配列
qrtype
新しい行のタイプを与える長さnelsの文字配列
L
行を示す
E
行を示す
G
行を示す
R
レンジ行を示す
N
自由行を示す.
=.
Xpress-Optimizer Reference Manual Console and Library Functions 72

XPRScopycallbacks
XPRScopycallbacks

6

XPRScopycallbacks

目的ある問題のコールバック関数を別の問題にコピーする。

概要
int XPRScopycallbacks(XPRSprob dest, XPRSprob src);

引数関係する制御なし

例問題prob1のメッセージコールバック関数callbackを設定し、それを問題prob2にコピーします。
XPRScreateprob(&prob1);
XPRSsetcbmessage(prob1,callback,NULL);MSI 用XPRScreateprob(&prob2);
XPRScopycallbacks(prob2,prob1);

関連事項
XPRScopycontrols, XPRScopyprob.
dest
コールバックがコピーされる先の問題
src
コールバックがコピーされる元の問題
Xpress-Optimizer Reference Manual Console and Library Functions 73

XPRScopycontrols
XPRScopycontrols

6

XPRScopycontrols

目的ある問題の制御を別の問題にコピーします。

概要
int XPRScopycontrols(XPRSprob dest, XPRSprob src);

引数関係する制御なし

例問題prob1の事前分析をオフにして、これと他の制御値を問題prob2にコピーします。
XPRScreateprob(&prob1);
XPRSsetintcontrol(prob1,XPRS_PRESOLVE,0);
XPRScreateprob(&prob2);
XPRScopycontrols(prob2,prob1);

関連事項
XPRScopycallbacks, XPRScopyprob.
dest
制御をコピーする先の問題名
src
制御をコピーする元の問題名
Xpress-Optimizer Reference Manual Console and Library Functions 74

XPRScopyprob
XPRScopyprob

6

XPRScopyprob

目的ある問題に定義された情報を別の問題にコピーします。

概要
int XPRScopyprob(XPRSprob dest, XPRSprob src,
char *probname);

引数
関係する制御なし

例問題prob1から問題prob2に問題，制御，コールバックをコピーします。
XPRSprob prob1, prob2;...
XPRScreateprob(&prob2);
XPRScopyprob(prob2,prob1,"MyProb");
XPRScopycontrols(prob2,prob1);
XPRScopycallbacks(prob2,prob1);

MSI 用補足
XPRScopyprobは問題だけをコピーし、問題に関係するコールバックや制御についてはコピーしません。これらについては、XPRScopycallbacks, XPRScopycontrolsを使って各々コピーしてください。

関連事項
XPRScopycallbacks, XPRScopycontrols, XPRScreateprob.
dest
情報のコピー先となる新しい問題のポインタ
src
情報のコピー元となる古い問題のポインタ
probname
コピーされた問題の名前を含む200文字以下の文字列。ファイルへの出力が見込まれる場合、特に整数問題の場合、これはユニークでな
くてはなりません
Xpress-Optimizer Reference Manual Console and Library Functions 75

XPRScreateprob
XPRScreateprob

6

XPRScreateprob

目的
Optimizer内に新しい問題を設定します。

概要
int XPRScreateprob(XPRSprob *prob);

引数
関係する制御なし

例
myprobを含む問題を作成します。
XPRSprob prob;
XPRSinit(NULL);
XPRScreateprob(&prob);
XPRSreadprob(prob,"myprob","");補足
1.

XPRScreateprobは XPRSinitの後、他のOptimizerルーチンを使用する前に呼びだしてく

2.

ださい。
ライセンスによっては、この方法で問題をいくらでも作成できます。作業が終了したら、
XPRSdestroyprobにより全ての問題を削除してください。

関連事項
XPRSdestroyprob, XPRScopyprob, XPRSinit.
prob
新しい問題が保持する変数のポインタ
Xpress-Optimizer Reference Manual Console and Library Functions 76

XPRSdelcols
XPRSdelcols

6

XPRSdelcols

目的
行列から列を削除します。

概要
int XPRSdelcols(XPRSprob prob, int ncols, int *mindex);

MSI 用引数
関係する制御なし

例
行列から列３を削除します。
mindex[0] = 3;
XPRSdelcols(prob,1,mindex);

補足問題から列が削除されると、残る列の数は減少し、番号0〜COLS-1になります。ここで、COLS
は行列内で削除されなかった列の数を含む問題特性です。

関連事項
XPRSaddcols, XPRSchgcoltype, XPRSdelrows.
prob
現在の問題
ncols
削除する列数mindex
削除する列を含む長さncolsの整数型配列
Xpress-Optimizer Reference Manual Console and Library Functions 77

XPRSdelcpcuts
XPRSdelcpcuts

6

XPRSdelcpcuts

目的
分枝限定探索では、カットは子ノードで適用されるためにカットプールに保存されます。これらのカットは、与えられたノードからXPRSdelcutsにより取り除かれますが、多くの場合、適用の際、カットプールから完全に取り除くことが望ましいです。これにはXPRSdelcpcutsを使います。

概要
int XPRSdelcpcuts(XPRSprob prob, int itype, int interp,
int ncuts, int *mcutind);

引数
関係する制御なし

関連事項
XPRSaddcuts, XPRSdelcuts, XPRSloadcuts, 5.4章「カットマネージャのはたらき」
prob
現在の問題
itype
カットタイプinterp
カットタイプの解釈-1
カットを全て除きます
1
カットタイプを数で扱います2
カットタイプをビットマップで扱います。 ビットのいず
れかがitypeに設定されたビットと一致する場合、削除します
カットタイプをビットマップで扱います。全てのビットがitypeに設定されたビットと一致する場合、削除します
削除するカット数。値‑1は全てのカットを削除することを示します
削除するカットの添字番号を含む整数型配列。ncutsが‑1の場合、こ3ncuts
mcutindMSI 用の配列はNULLになります。そうでなければ長さncutsになります
Xpress-Optimizer Reference Manual Console and Library Functions 78

XPRSdelcuts
XPRSdelcuts

6

XPRSdelcuts

目的
現在のノードで行列からカットを削除します。自動的に戻された親ノードからのカットも、現在のノードにXPRSaddcuts，XPRSloadcutsを用いて追加されたカットが削除されます。削除されるカットは様々な方法で指定できます。基準により対象外とされるカットは削除されません。

概要
int XPRSdelcuts(XPRSprob prob, int ibasis, int itype,int interp, double delta, int num, int *mcutind);

引数
関係する制御なし
現在の問題
１が設定されると、その基底を有効とします。０が設定されると、
非基底スラックのカットは削除されます
削除されるカットのタイプ
カットitypeの解釈-1
全カットタイプを削除します1
カットタイプを数で扱います2
カットタイプをビットマップで扱います。ビットのいず
れかがitypeに設定されたビットと一致する場合、削除されます
3
カットタイプをビットマップで扱います。全てのビットがitypeに設定されたビットと一致する場合、削除されます
相対スラック値がdeltaより大きいカットのみ削除されます。全カットを削除するとき、この引数をXPRS_MINUSINFINITYに設定します
カットリストによって削除されるカットの数。‑1が設定されると、全てのカットが対象となります
削除するカットの添字番号を含む整数型配列。numが‑1に設定されると、この配列はNULLになりますが、そうでなければ長さnumです

probibasisitype
interpdelta
nummcutind

Xpress-Optimizer Reference Manual Console and Library Functions 79

XPRSdelcuts

6

補足
基底スラックのカットのみを取り除くことは、通常最もよいですが、そうしない場合、基底は有効でなくなり、最適基底を回復するために何度か繰返しが必要です。ibasisパラ
メータが1に設定されると、 非基底スラックのカットは他のパラメータがそれらを削除するように設定してあっても、削除されません。ibasisパラメータをいつも１にしておくことを強くお勧めします。
2. 削除されるカットは、カットのスラック値のサイズによっても指定されます。deltaパラ
1.

MSI 用メータより大きいスラック値のカットのみ削除されます。
3. 削除されるカットの添字のリストも示すことができます。自動的に戻されたカットは
0,…,ncuts-1の添字を持ちます (ここでncutsは親ノードでのカットの数で、追加された
カットはncuts,…,ncuts+nadded-1の添字を持ち、naddedは現在のノードに追加された
カットの数です)。行列内のカットの数は問題特性CUTSにより決められます。

関連事項
XPRSaddcuts, XPRSdelcpcuts, XPRSloadcuts, 5.4章「カットマネージャのはたらき」.
Xpress-Optimizer Reference Manual Console and Library Functions 80

XPRSdelnode
XPRSdelnode

6

XPRSdelnode

目的
分枝限定木探索において未探索ノードのリストから特定のノードを削除します。

概要
int XPRSdelnode(XPRSprob prob, int inode, int ifboth);

引数
関係する制御なし

例
XPRSdelnode(prob,10,0);

木探索におけるノード番号10とその次の子ノードを削除します。

補足
このルーチンは分枝限定探索のコールバックから最も効果的に呼びだされます。

関連事項
なし
現在の問題
削除するノードの数
以下のどちらか１つのフラグ
0
次の子ノードを削除します
1
両方の子ノードを削除します

prob
inode
ifbothXpress-Optimizer Reference Manual Console and Library Functions 81

XPRSdelrows
XPRSdelrows

6

XPRSdelrows

目的
入力ルーチンを使ってOptimizerに渡された行列から行を削除します。

概要
int XPRSdelrows(XPRSprob prob, int nrows, int *mindex);

引数関係する制御なし

例
行0と10を行列から削除します。
mindex[0] = 0; mindex[1] = 10;
XPRSdelrows(prob,2,mindex);

MSI 用補足
問題から行が削除されると、残された行の数は減少し、行は番号0〜ROWS-1になります。ここ
でROWSは行列で削除されなかった行の数を含む問題特性です。

関連事項
XPRSaddrows, XPRSchgrowtype, XPRSdelcols.

現在の問題
削除する行の数
削除する行を含む長さnrowsの整数型配列

prob
nrows
mindexXpress-Optimizer Reference Manual Console and Library Functions 82

XPRSdestroyprob
XPRSdestroyprob

6

XPRSdestroyprob

目的指定された問題を削除し、操作，最適化後、その問題に関連するメモリを開放します。

概要
int XPRSdestroyprob(XPRSprob prob);

引数
関係する制御なし

例
myprobと呼ばれる問題を作成、ロードし、解いた後、割り当てられたリソースを開放します。
XPRScreateprob(&prob);
XPRSreadprob(prob,"myprob","");XPRSmaxim(prob,"");XPRSdestroyprob(prob);

補足
作業終了後は全ての問題を削除しなくてはなりません。XPRSdestroyprobにNULL問題ポイン
タが渡されると、エラーは起きません。

関連事項
XPRScreateprob, XPRSfree, XPRSinit.
prob
削除される問題
Xpress-Optimizer Reference Manual Console and Library Functions 83

XPRSfixglobal
FIXGLOBALXPRSfixglobal FIXGLOBAL

6

XPRSfixglobal FIXGLOBAL

目的
すべての離散要素を解ファイルの値に固定します。これは離散変数が最適値に固定された後、連続変数の被約費用を求めるのに有用です。

概要
int XPRSfixglobal(XPRSprob prob);
FIXGLOBAL

引数
関係する制御なし

MSI 用例 1 (ライブラリ)
線形問題を解くのに先だって問題myprobを読みなおしたりXPRSfixglobalを使用する前に、
問題myprobの整数解を探索します。
XPRSreadprob(prob,"myprob","");XPRSminim(prob,"g");XPRSreadprob(prob,"myprob","");XPRSfixglobal(prob);
XPRSminim(prob,"");XPRSwriteprtsol(prob);

例 2 (コンソール)
コンソールで同様のことを実施するのは以下の通りです。
READPROBMINIM -g
READPROBFIXGLOBALMINIM
PRINTSOL
prob

現在の問題

Xpress-Optimizer Reference Manual Console and Library Functions 84

XPRSfixglobal
FIXGLOBAL

6

補足
XPRSfixglobal (FIXGLOBAL)は事前分析された問題には使用できません。

1.
2.

このコマンドを呼びだすことにより、離散要素は解ファイルの値に固定されます。（デフォルト）事前分析オプションを使ってXPRSglobal (GLOBAL)を呼ぶ場合には、
XPRSfixglobal (FIXGLOBAL)によって呼ぶ前に問題を入力し直す必要があります。
3. このコマンドは離散要素が固定された後、行列内の連続変数のリデュースコストを調べるのに有用です。XPRSfixglobal (FIXGLOBAL)を呼んだ後、XPRSrange (RANGE)を使ってMIP問題中の連続変数に関する感度分析が実行可能です。

関連事項
XPRSglobal (GLOBAL), XPRSrange (RANGE).
Xpress-Optimizer Reference Manual Console and Library Functions 85

XPRSfree
XPRSfree

6

XPRSfree

目的
割り当てられたメモリを開放し、全ての開いているファイルを閉じます。

概要
int XPRSfree(void);

引数なし

関係する制御なし

例問題probに割り当てられたリソースを開放し、整理してから終了します。
XPRSdestroyprob(prob);
XPRSfree();MSI 用return 0;

補足
XPRSfreeを呼んだ後、最初にXPRSinitを再度呼びださずにライブラリ関数を使うことはで

きません。

関連事項
XPRSdestroyprob, XPRSinit.
Xpress-Optimizer Reference Manual Console and Library Functions 86

XPRSftran
XPRSf tran

6

XPRSftran

目的
現在の行列の逆行列によりユーザに与えられる（列）ベクトルの事前掛け算。

概要
int XPRSftran(XPRSprob prob, double *vec);

引数
関係する制御Double例1

全ての配列が次元化されているとして、構造変数番号jcolの（スケーリングされていない）
タブロー列を求めます。
/* Min size of arrays: mstart: 2; mrowind, dmatval & y:nrow. *//* Get column as loaded originally, in sparse format */rc = XPRSgetcols(prob, mstart, mrowind, dmatval, nrow,&nelt, jcol, jcol);/* Unpack into the zeroed array */for(i = 0; i < nrow; i++)y[i] = 0.0;
for(ielt = 0; ielt < nelt; ielt++)y[mrowind[ielt]] = dmatval[ielt];
rc = XPRSftran(prob,y);例2全ての配列の次元が定められているとして、行番号irowのスラック値の（スケーリングされていない）タブロー列を求めます。
prob
現在の問題
vec
逆基底が乗じられる値を含む長さROWSの倍精度型配列。変換された
値は配列内に現れます。
ETATOL
イータ要素の零許容範囲
Xpress-Optimizer Reference Manual Console and Library Functions 87

XPRSftran

6/* Min size of arrays: y: nrow *//* Set up the original slack column in full format */for(i = 0; i < nrow; i++)y[i] = 0.0;y[irow] = 1.0;
rc = XPRSftran(prob,y);MSI 用

補足
行列が事前分析済みの場合、この関数は事前分析済みの問題の基底として動作します。

関連事項
XPRSbtran.
Xpress-Optimizer Reference Manual Console and Library Functions 88

XPRSgetbanner
XPRSgetbanner

6

XPRSgetbanner目的
バナーと著作権メッセージを返します。

概要
int XPRSgetbanner(char *banner);

引数
関係する制御なし

例プログラムの始めにバナー情報を返すためにXPRSgetbannerを呼びだします。
char banner[256];...
if(XPRSinit(NULL)){XPRSgetbanner(banner);
printf("%s\n",banner);
return 1;}
XPRSgetbanner(banner);
printf("%s\n",banner);

補足
この関数は、XPRSinitについて問題が起こる場合、更なる情報を返すのに有効です。

関連事項
XPRSinit.
banner

バナーを保持するのに十分な長さのバッファ (NULL終了部分を追加)。
最大256文字Xpress-Optimizer Reference Manual Console and Library Functions 89

XPRSgetbasis
XPRSgetbasis

6

XPRSgetbasis

目的
ユーザーのデータエリア内に現在の基底を返します。

概要
int XPRSgetbasis(XPRSprob prob, int *rstatus,
int *cstatus);

引数関係する制御Integer

例
後のために基底を保存する前に問題を最小化します。

MSI 用

int rows, cols, *rstatus, *cstatus;...
XPRSminim(prob,"");XPRSgetintattrib(prob,XPRS_ROWS,&rows);
XPRSgetintattrib(prob,XPRS_COLS,&cols);
rstatus = (int *) malloc(sizeof(int)*rows);
cstatus = (int *) malloc(sizeof(int)*cols);
prob
現在の問題
rstatus
各行に関係するスラック，サープラス，人為変数の基底状態を表す
長さROWSの整数型配列。状態は次のいずれかです0
スラック,サープラス,人為変数が下限において非基底
1
スラック,サープラス,人為変数が基底
2
スラック,サープラス,人為変数が上限において非基底
必要なければNULLとなります
cstatus
制約行列における列の基底状態を保持する長さCOLSの整数型配列。

状態はいずれかです0
変数は下限において非基底。または変数に下限がない場合に零
で基底
1
変数は基底
2
変数は上限で基底必要なければNULLとなります
解が読み書きされる制御

SOLUTIONFILE

Xpress-Optimizer Reference Manual Console and Library Functions 90

XPRSgetbasis

6

XPRSgetbasis(prob,rstatus,cstatus);

関連事項
XPRSgetpresolvebasis, XPRSloadbasis, XPRSloadpresolvebasis.
Xpress-Optimizer Reference Manual Console and Library Functions 91

XPRSgetcolrange
XPRSgetcolrange

6

XPRSgetcolrange

目的
XPRSrangeによって計算された列範囲を返します。

概要
int XPRSgetcolrange(XPRSprob prob, double *upact,
double *loact, double *uup, double *udn, double *ucost,double *lcost);

引数関係する制御なし

例
概要に示すように、列範囲が配列内に戻されます。
int cols, *upact, *loact, *uup, *udn, *ucost, *lcost;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
upact = malloc(cols*(sizeof(int)));loact = malloc(cols*(sizeof(int)));MSI 用

uup = malloc(cols*(sizeof(int)));udn = malloc(cols*(sizeof(int)));ucost = malloc(cols*(sizeof(int)));lcost = malloc(cols*(sizeof(int)));
XPRSrange(prob);
XPRSgetcolrange(prob,upact,loact,uup,udn,ucost,lcost);
prob
現在の問題
upact
上側列アクティビティの長さCOLSの倍精度型配列
loact
下側列アクティビティの長さCOLSの倍精度型配列
uup
上側列ユニットコストの長さCOLSの倍精度型配列
udn
下側列ユニットコストの長さCOLSの倍精度型配列
ucost
上側コストの長さCOLSの倍精度型配列
lcost
下側コストの長さCOLSの倍精度型配列
Xpress-Optimizer Reference Manual Console and Library Functions 92

XPRSgetcolrange

6補足
アクティビティとユニットコストはレンジファイル(problem_name.rng)から得られます。レンジファイルにおける上下側列アクティビティと上下側ユニットコストは付録Ａ「ログとファ
イル形式」に説明があります。

関連事項
XPRSgetrowrange, XPRSrange.
Xpress-Optimizer Reference Manual Console and Library Functions 93

XPRSgetcols
XPRSgetcols

6

XPRSgetcols

目的与えられた範囲で列の制約行列中の非零要素数を返します。

概要
int XPRSgetcols(XPRSprob prob, int *mstart, int *mrwind,double *dmatval, int size, int *nels, int first,
int last);

引数関係する制御なし

例
int nels, cols, first = 0, last;
prob
現在の問題
mstart
各要求列についてのmrwindとdmatval配列の開始オフセットを示す添
字が入れられる整数型配列。長さは少なくともlast-first+2です。
列iは、mrwindとdmatval配列において位置mstart[i]で始まり、
mstart[i+1]-mstart[i]要素含まれます。必要なければNULLとなり
mrwinddmatvalます
各列の非零要素の行添字が入れられる長さsizeの整数型配列。必要なければNULLとなります
非零要素値が入れられる長さsizeの倍精度型配列。必要なければNULLとなります

MSI 用戻される要素の最大数
mrwind,dmatval 配列内の非零要素の数が返される整数のポインタ。
非零要素の数がsizeより大きい場合は、size要素だけ返されます。
nelsがsizeより小さい場合はnelsだけ返されます
その範囲での最初の列その範囲での最後の列

size
nels

first
last

Xpress-Optimizer Reference Manual Console and Library Functions 94

XPRSgetcols

6...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
last = cols-1;
XPRSgetcols(prob,NULL,NULL,NULL,0,&nels,first,last);
行列のすべての列における非零行列要素の数をnelsに返します。

補足
例に示すように、mstart,mrwind,dmatvalをNULLに置換することで、その列範囲での要素の数を得られます。この場合、渡された配列の長さが零であることを示すためにsizeには0が設定されなくてはなりません。これは上記の例に示されている通りです。

関連事項
XPRSgetrows.
Xpress-Optimizer Reference Manual Console and Library Functions 95

XPRSgetcoltype
XPRSgetcoltype

6

XPRSgetcoltype

目的与えられた範囲での列の列タイプを返します。

概要
int XPRSgetcoltype(XPRSprob prob, char *coltype, int first,
int last);

引数関係する制御なし

例
行列内の全ての列についてタイプを調べ、コンソールに出力します。
int cols, i;char *types;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
types = (char *)malloc(sizeof(char)*cols);
XPRSgetcoltype(prob,types,0,cols-1);
for(i=0;i<cols;i++) printf("%c\n",types[i]);関連事項
XPRSchgcoltype, XPRSgetrowtype.
prob
現在の問題
coltype列タイプが返される長さlast-first+1の文字配列
C
連続変数
I
整数変数

MSI 用バイナリ変数
半連続変数
半連続整数変数
部分整数変数
その範囲での最初の列その範囲での最後の列
B
S
R
P

first
last

Xpress-Optimizer Reference Manual Console and Library Functions 96

XPRSgetcpcutlist
XPRSgetcpcutlist

6

XPRSgetcpcutlist

目的
カットプールからカット添字のリストを返します。

概要
int XPRSgetcpcutlist(XPRSprob prob, int itype, int interp,
double delta, int *ncuts, int size, int *mcutind,double *dviol);

引数
関係する制御なし

補足
1.

deltaパラメータに必要な違反サイズを設定することによって違反カットが得られます。

同様に、違反していないカットが必要であれば、ライブラリヘッダファイルに定義された
XPRS_MINUSINFINITYをdeltaに設定します。
prob
現在の問題
itype
返されるカットのカットタイプ
interp
カットタイプの解釈-1
全てのカットを得ます1
カットタイプを数で扱います2
カットタイプをビットマップで扱います。ビットのいずれかがitypeに設定されたビットと一致する場合、カットを得ます3
カットタイプをビットマップで扱います。全てのビットがitypeに設定されたビットと一致する場合、カットを得ます
delta
deltaよりも大きい絶対スラック値のカットだけが返されますncuts
カットプール内のタイプitypeのカットの数が返される整数のポイン
タsize
返されるカットの最大数
mcutind
カットの添字番号が返される長さsizeの整数型配列
dviol
カットのスラック変数値が返される長さsizeの倍精度型配列
Xpress-Optimizer Reference Manual Console and Library Functions 97

XPRSgetcpcutlist

2.

6

アクティブカットの数がsizeより多い場合、sizeカットだけが返され、ncutsはアクティブカットの数に設定されます。ncutsがsizeよりも小さい場合は、ncutsの位置に
mcutindが入るだけです。

MSI 用関連事項
XPRSgetcpcuts, XPRSgetcutlist, 5.4章「カットマネージャのはたらき」
Xpress-Optimizer Reference Manual Console and Library Functions 98

XPRSgetcpcuts
XPRSgetcpcuts

6

XPRSgetcpcuts

目的
カットプールからカットのリストが返されます。配列mindex内のカットのリストはルーチンに渡されなくてはなりません。カットの列と要素は、mcols, dmatvalパラメータにより示された領域に返されます。列と要素は続けて保存され、各カットの開始点はmstartパラメータで示された領域に返されます。

概要
int XPRSgetcpcuts(XPRSprob prob, int *mindex, int ncuts,
int size, int *mtype, char *qrtype, int *mstart,
int *mcols, double *dmatval, double *drhs);

引数
関係する制御なし
現在の問題
カットの添字番号を含む長さncutsの整数型配列
返されるカットの数
返されるカットの列添字の最大数
カットタイプが返される長さが少なくともncutsの整数型配列
カットの意味(L,G, E)が返される長さが少なくともncutsの文字配列
mcols，dmatval配列へのオフセットを含む長さが少なくともncuts+1の整数型配列。最後の要素は、カットncuts+1の開始位置を示します
カットの列添字が返される長さsizeの整数型配列
行列値が返される長さsizeの倍精度型配列
カットの右辺要素が返される長さが少なくともncutsの倍精度型配列

prob
mindex
ncuts
size
mtype
qrtypemstartmcols
dmatvaldrhs

Xpress-Optimizer Reference Manual Console and Library Functions 99

XPRSgetcpcuts

6

関連事項
XPRSgetcpcutlist, XPRSgetcutlist, 5.4章「カットマネージャのはたらき」
Xpress-Optimizer Reference Manual Console and Library Functions 100

XPRSgetcutlist
XPRSgetcutlist

6

XPRSgetcutlist

目的
現在のノードでのアクティブカットの添字のリストを戻します。

概要
int XPRSgetcutlist(XPRSprob prob, int itype, int interp,
int *ncuts, int size, int *mcutind);

MSI 用引数
関係する制御なし

補足
アクティブカット数がsizeよりも大きい場合は、sizeカットが返され、ncutsはアクティブ
カット数に設定されます。ncutsがsizeよりも小さい場合は、ncutsの位置にはmcutindが入ります。XPRSaddcutsを使って行列にカットが加えられ、カットプールに保存されていなけ
れば、‑1の添字が返されます。

関連事項
XPRSgetcpcutlist, XPRSgetcpcuts, 5.4章「カットマネージャのはたらき」
prob
現在の問題
itype
返されるカットのカットタイプ。‑1は全てのアクティブカットを返すことを示します
カットタイプの解釈-1
全てのカットを得ます1
カットタイプを数字で扱います2
カットタイプをビットマップで扱います。ビットのいずれかがitypeに設定されるビットと一致する場合にカットを得ます3
カットタイプをビットマップで扱います。全てのビットがitypeに設定されるビットと一致する場合にカットを得ます
タイプitypeのアクティブカットの数が返される整数のポインタ戻されるカットの最大数
カットの添字番号が返される長さsizeの整数型配列

interpncuts
size
mcutind

Xpress-Optimizer Reference Manual Console and Library Functions 101

XPRSgetdblattrib
XPRSgetdblattrib

6

XPRSgetdblattrib

目的
様々な倍精度型の問題の特性値を戻します。問題特性は、問題のロード中や最適化中に設定されます。

概要
int XPRSgetdblattrib(XPRSprob prob, int ipar,
double *dval);

引数
関係する制御なし

例
目的関数の最適値を得てコンソールに出力します。
double lpobjval;...
XPRSmaxim(prob,"");XPRSgetdblattrib(prob,XPRS_LPOBJVAL,&lpobjval);printf("The maximum profit is %f\n",lpobjval);

関連事項
XPRSgetintattrib, XPRSgetstrattrib.

MSI 用

現在の問題
値が返される問題特性。全ての問題特性のリストは８章「問題特性」
あるいは、xprs.hヘッダファイル中のリストを参照ください
返される問題特性の値の倍精度型のポインタ

prob
ipar
dval

Xpress-Optimizer Reference Manual Console and Library Functions 102

XPRSgetdblcontrol
XPRSgetdblcontrol

6

XPRSgetdblcontrol

目的与えられた倍精度型の制御パラメータの値を戻します。

概要
int XPRSgetdblcontrol(XPRSprob prob, int ipar,
double *dgval);

引数
関係する制御７章「制御パラメータ」参照

例
整数の実行可能許容範囲を返します。
XPRSgetdblcontrol(prob,XPRS_MIPTOL,&miptol);

関連事項
XPRSsetdblcontrol, XPRSgetintcontrol, XPRSgetstrcontrol.

現在の問題
値が返される制御パラメータ。全制御パラメータのリストは７章「制御パラメータ」かxprs.hヘッダファイル中のリストを参照してくだ
さい返される制御値の位値を示すポインタ

prob
ipar

dgval

Xpress-Optimizer Reference Manual Console and Library Functions 103

XPRSgetdirs
XPRSgetdirs

6

XPRSgetdirs

目的行列にロードされた指示を返します。優先度や分枝方向,擬コストが返されます。事前分析後に呼びだされた場合、XPRSgetdirsは事前分析済みの問題のための指示を得ます。

概要
int XPRSgetdirs(XPRSprob prob, int *ndir, int *mcols,
int *mpri, char *qbr, double *dupc, double *ddpc);

引数関係する制御なし

補足
1.

値ndirは最大でMIPENTSの指示の数を示し、XPRSgetintattrib(prob,XPRS_MIPENTS,&mipents)で得られます。
2. probとndir以外のいかなる引数については、必要なければNULLとなります。
prob
現在の問題
ndir
指示の数が返される整数のポインタ

MSI 用列番号（0,1, 2,…）か(１つ目が-1,２つ目が-2,…の)特殊順序集合に一致する負の値を含む長さndirの整数型配列
列，集合の優先順位を含む長さndirの整数型配列
各列や集合の分枝方向を指定する長さndirの文字配列
U
押し上げ要素D
押し下げ要素N
指定なし
列や集合の上側擬コストを含む長さndirの倍精度型配列
列や集合の下側擬コストを含む長さndirの倍精度型配列

mcols
mpri
qbr

dupc
ddpc

Xpress-Optimizer Reference Manual Console and Library Functions 104

XPRSgetdirs

6

関連事項
XPRSloaddirs, XPRSloadpresolvedirs.
Xpress-Optimizer Reference Manual Console and Library Functions 105

XPRSgetglobal
XPRSgetglobal

6

XPRSgetglobal

目的
問題についてのグローバル情報を戻します。事前分析オプションが使用される場合は、
XPRSminim，XPRSmaximの前に呼びだしてください。

概要
int XPRSgetglobal(XPRSprob prob, int *nglents, int *sets,char *qgtype, int *mgcols, double *dlim, char *qstype,
int *msstart, int *mscols, double *dref);引数
prob
nglentssets
qgtypemgcolsdlim

qstype

現在の問題
バイナリ，整数，半連続，半連続整数，部分整数の要素の数が返される整数のポインタ。これは問題特性MIPENTSと同じです
SOS1，SOS2集合の数が返される整数のポインタ。問題特性SETSから得ることが可能です
要素タイプが返される長さnglentsの文字配列。タイプは次のどれかですB
バイナリ変数I
整数変数
P
部分整数変数
S
半連続変数
R
半連続整数変数
離散要素の列添字が返される長さnglentsの整数型配列
部分整数変数の限度や半連続変数，半連続整数変数の下限が返される長さnglentsの倍精度型配列（バイナリ変数や整数変数に相当す
る位値の要素は意味をなしません）
集合タイプが返される長さsetsの文字配列。集合タイプは次のどれかです1
SOS1 タイプ集合2
SOS2 タイプ集合

MSI 用Xpress-Optimizer Reference Manual Console and Library Functions 106

XPRSgetglobal

6

関係する制御なし

例
配列mgcols と qrtype内の離散変数とそのタイプを得ます。
int nglents, nsets, *mgcols;
char *qrtype;...
XPRSgetglobal(prob,&nglents,&nsets,NULL,NULL,NULL,NULL,
NULL,NULL,NULL);
mgcols = malloc(nglents*sizeof(int));qrtype = malloc(nglents*sizeof(char));
XPRSgetglobal(prob,&nglents,&nsets,qtype,gcols,NULL,
NULL,NULL,NULL,NULL);

補足
必要なければ、prob,nglents,setsを除き、引数はNULLとなります。

関連事項
XPRSloadglobal, XPRSloadqglobal.
msstart
集合の開始を示すmscols，dref配列へのオフセットが返される整数型配列。これは最後の要素が集合 sets+1で始まり、mscols，dref
配列、SETMEMBERSの長さと等しいオフセットを含む長さsets+1の配列でなくてはなりません
各集合の列が返される長さSETMEMBERSの整数型配列
集合の各要素の参照行要素が返される長さSETMEMBERSの倍精度型配列

mscolsdref

Xpress-Optimizer Reference Manual Console and Library Functions 107

XPRSgetiis
XPRSgetiis

6

XPRSgetiis

目的
IIS探索において見つかった既約実行不可能集合( IIS )の1つを検索します。

概要
int XPRSgetiis(XPRSprob prob, int *colnumber,
int *rownumber, int *miiscol, int *miisrow);

引数
関係する制御Integer例
問題probにおいてIISを発見し、検索します。
int ncols, nrows, *miiscol, *miisrow;...
XPRSiis(prob,"");XPRSgetiis(prob,&ncols,&nrows,NULL,NULL);
miiscol = malloc(ncols*sizeof(int));
miisrow = malloc(nrows*sizeof(int));
XPRSgetiis(prob,&ncols,&nrows,miiscol,miisrow);

MSI 用補足
関数XPRiisの後でのみXPRSgetiisを呼ぶことができ、問題中のIIS を計算します。

関連事項
XPRSiis.
prob
colnumberrownumbermiiscol

現在の問題
IISの列の数
IISの行の数
IIS集合の列添字を含む長さcolnumberの整数型配列。必要なければ
NULLとなります
IIS集合の行添字を含む長さrownumberの整数型配列。必要なければ
NULLとなります
発見される既約実行不可能集合の数

miisrow
MAXIIS

Xpress-Optimizer Reference Manual Console and Library Functions 108

XPRSgetindex
XPRSgetindex

6

XPRSgetindex

目的
指定した行，列名の添字を返します。

概要
int XPRSgetindex(XPRSprob prob, int type, char *name,int *seq);

引数関係する制御Integer例
problemをロードし、「n 0203」が行もしくは列の名前かを調べます。
int seqr, seqc;...
XPRSreadprob(prob,"problem","");XPRSgetindex(prob,1,"n 0203", &seqr);
XPRSgetindex(prob,2,"n 0203", &seqc);
if(seqr==-1 && seqc ==-1) printf("n 0203 not there\n");if(seqr!= -1) printf("n 0203 is row %d\n",seqr);
if(seqc!= -1) printf("n 0203 is column %d\n",seqc);

関連事項
XPRSaddnames.
prob
type
name
seq
MPSNAMELENGTH

現在の問題
1
行の添字が要求されるとき
2
列の添字が要求されるとき行名もしくは列名を持つ長さMPSNAMELENGTH (NULL終了分を加える)の文字列
行または列の添字番号が返される整数のポインタ。その行，列が存在しない場合は、‑1が返されます
最大名前文字長さ

Xpress-Optimizer Reference Manual Console and Library Functions 109

XPRSgetinfeas

6

MSI 用XPRSgetinfeas

XPRSgetinfeas

目的
実行不可能な主、双対変数のリストを返します。

概要
int XPRSgetinfeas(XPRSprob prob, int *npv, int *nps,
int *nds, int *ndv, int *mx, int *mslack, int *mdual,
int *mdj);

引数
エラー値
関係する制御Integer
Double
prob
npv
nps
nds
ndv
mx
mslack
mdual
mdj
91
422
SOLUTIONFILE
FEASTOL
OPTIMALITYTOL

現在の問題
主実行不能変数の数
主実行不能行の数
双対実行不能行の数
双対実行不能変数の数
主実行不能変数が返される長さnpvの整数型配列。必要なければNULLとなります
主実行不能行が返される長さnpsの整数型配列。必要なければNULLとなります
双対実行不能行が返される長さndsの整数型配列。必要なければNULLとなります
双対実行不能変数が返される長さndvの整数型配列。必要なければ
NULLとなります
現在の問題は有効でありません
解は有効ではありません
解が読み書きされる制御
RHS の零許容範囲
被約費用許容範囲

Xpress-Optimizer Reference Manual Console and Library Functions 110

XPRSgetinfeas

6

例
実行不能要素の数を得るために、最初にNULLの整数型配列を伴ってXPRSgetinfeasが呼びだされます。そして、その配列のためにスペースが割り当てられ、その関数が再度それらを入れるために呼びだされます。
int npv, nps, nds, ndv, *mx, *mslack, *mdual, *mdj;...
XPRSgetinfeas(prob, &npv, &nps, &nds, &ndv, NULL, NULL,
NULL, NULL);
mx = malloc(npv * sizeof(*mx));
mslack = malloc(nps * sizeof(*mslack));
mdual = malloc(nds * sizeof(*mdual));mdj = malloc(ndv * sizeof(*mdj));
XPRSgetinfeas(prob, &npv, &nps, &nds, &ndv, mx, mslack,
mdual, mdj);

MSI 用補足
SOLUTIONFILEに0が設定されると、メモリに解の実行不能性が返されます。SOLUTIONFILEに1が設定されると、.solファイルに解の実行不能性が返されます。
最後の４つの引数のいずれかにNULLが設定されると、実行不能の番号に相当する値が返さ

1.
2.

れます。

関連事項
XPRSgetiis, XPRSgetscaledinfeas, XPRSiis.
Xpress-Optimizer Reference Manual Console and Library Functions 111

XPRSgetintattrib
XPRSgetintat trib

6

XPRSgetintattrib

目的
様々な整数問題特性の値を戻します。問題のロード中、最適化中に問題特性が設定されます。

概要
int XPRSgetintattrib(XPRSprob prob, int ipar, int *ival);

引数
関係する制御なし

例
行列内の列の数を得て、各列の下限を得るためのスペースを割り当てます。
int cols;
double *lb;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
lb = (double *) malloc(sizeof(double)*cols);
XPRSgetlb(prob,lb,0,cols-1);

関連事項
XPRSgetdblattrib, XPRSgetstrattrib.

現在の問題値が戻される問題特性。全問題特性のリストは８章「問題特性」か
xprs.hヘッダファイルを参照ください
問題特性の値が返される整数のポインタ

prob
ipar
ival

Xpress-Optimizer Reference Manual Console and Library Functions 112

XPRSgetintcontrol
XPRSgetintcontrol

6

XPRSgetintcontrol

目的
様々な整数制御パラメータの値を戻します。

概要
int XPRSgetintcontrol(XPRSprob prob, int ipar, int *igval);

引数
関係する制御７章「制御パラメータ」参照

例
defaultalgの値を得て画面に表示します。
...

MSI 用XPRSmaxim(prob,"");XPRSgetintcontrol(prob,XPRS_DEFAULTALG,&defaultalg);
printf("DEFAULTALG is %d\n",defaultalg);

補足
SCALINGのような制御パラメータはビットマップです。各ビットのはたらきは異なります。例

えばビット0は値１，ビット1は値２，ビット２は値４などです。

関連事項
XPRSsetintcontrol, XPRSgetdblcontrol, XPRSgetstrcontrol.
prob
現在の問題
ipar
値が返される制御パラメータ。全制御のリストは７章「制御パラメータ」かxprs.hヘッダファイルを参照ください
igval
制御の値が返される整数のポインタ
Xpress-Optimizer Reference Manual Console and Library Functions 113

XPRSgetlasterror
XPRSgetlasterror

6

XPRSgetlasterror

目的
最適化計算中、最後に発生したエラーを返します。

概要
int XPRSgetlasterror(XPRSprob prob, char *errmsg);

引数関係する制御なし

例
エラーチェックにおけるこの関数の使われ方を示します。
void error(XPRSprob myprob, char *function){
char errmsg[256];
XPRSgetlasterror(myprob,errmsg);
printf("Function %s did not execute correctly: %s\n",function, errmsg);
XPRSdestroyprob(myprob);
XPRSfree();exit(1);}

ここで、主関数は以下のような行を含みます。
XPRSprob prob;...
if(XPRScreateprob(&prob)) error(prob,"XPRScreateprob");

関連事項
９章「エラーメッセージ＆リターンコード」, ERRORCODE,
XPRSsetcbmessage, XPRSsetlogfile.
prob
現在の問題
errmsg
最後のエラーメッセージが返される256 文字分のバッファ
Xpress-Optimizer Reference Manual Console and Library Functions 114

XPRSgetlb
XPRSgetlb

6

XPRSgetlb

MSI 用目的与えられた範囲における列の下限を返します。

概要
int XPRSgetlb(XPRSprob prob, double *lb, int first,
int last);

引数関係する制御なし

例
現在の問題の列の下限を戻します。
int cols;
double *lb;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
lb = (double *) malloc(sizeof(double)*cols);
XPRSgetlb(prob,lb,0,cols-1);

補足
XPRS_PLUSINFINITY以上の値の場合は、無限大となります。XPRS_MINUSINFINITY以下の値の場合はマイナスに無限小となります。

関連事項
XPRSchgbounds, XPRSgetub.
prob
現在の問題
lb
下限が置かれる長さlast-first+1の倍精度型配列
first
その範囲での最初の列
last
その範囲での最後の列
Xpress-Optimizer Reference Manual Console and Library Functions 115

XPRSgetnames
XPRSgetnames

6

XPRSgetnames

目的与えられた範囲における行や列の名前を返します。その名前は文字バッファーに返され、各名前はNULL文字で区切られます。

概要
int XPRSgetnames(XPRSprob prob, int type, char *names,
int first, int last);

引数関係する制御Integer
例1

現在の問題の行と列の名前を戻します。
int cols, rows, nl;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
XPRSgetintcontrol(prob,XPRS_MPSNAMELENGTH,&nl);
cnames = (char *) malloc(sizeof(char)*(nl+1)*cols);
prob
現在の問題

MSI 用

type

行の名前が要求された場合
列の名前が要求された場合名前を保存するのに十分な長さのバッファ。それぞれの名前は
MPSNAMELENGTHの文字長さ（NULL文字終了分を加える）なので、配列namesは少なくとも(first-last+1)*(MPSNAMELENGTH+1)文字
分必要となります。行/列first+iの名前は、位値
i*MPSNAMELENGTH+iで始まるバッファnamesに書きこまれます
その範囲での最初の行や列その範囲での最後の行や列
最大名前文字長さ
1
2

names

first
last
MPSNAMELENGTH

Xpress-Optimizer Reference Manual Console and Library Functions 116

XPRSgetnames

6

rnames = (char *) malloc(sizeof(char)*(nl+1)*rows);
XPRSgetnames(prob,1,rnames,0,rows-1);
XPRSgetnames(prob,2,cnames,0,cols-1);
例2
Cでnames[i]を表示するには以下のようにします。
int namelength;…
XPRSgetintcontrol(prob,XPRS_MPSNAMELENGTH,&namelength);printf("%s",names + i*(namelength+1));

関連事項
XPRSaddnames.
Xpress-Optimizer Reference Manual Console and Library Functions 117

XPRSgetobj
XPRSgetobj

6

XPRSgetobj

目的与えられた範囲において、列の目的関数係数を返します。

概要
int XPRSgetobj(XPRSprob prob, double *obj, int first,
int last);

引数関係する制御なし

例
現在の問題の目的関数係数を返します。
int cols;
double *obj;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
obj = (double *) malloc(sizeof(double)*cols);
XPRSgetobj(prob, obj, 0, cols-1);

関連事項
XPRSchgobj.
prob

現在の問題

MSI 用目的関数係数が置かれる長さlast-first+1の倍精度型配列
その範囲での最初の列その範囲での最後の列

obj
first
last

Xpress-Optimizer Reference Manual Console and Library Functions 118

XPRSgetpivotorder
XPRSgetpivotorder

6

XPRSgetpivotorder

目的基底変数のピボット順序を返します。

概要
int XPRSgetpivotorder(XPRSprob prob, int *mpiv);

引数関係する制御なし

例
変数のピボット順序を配列pPivotに返します。
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
pPivot = malloc(rows*(sizeof(int)));
XPRSgetpivotorder(prob,pPivot);補足
行添字は範囲0〜ROWS-1です。列の範囲はROWS+SPAREROWS〜 ROWS+SPAREROWS+COLS-1です。

関連事項
XPRSgetpivots, XPRSpivot.
prob
現在の問題
mpiv
ピボット順序が返される長さROWSの整数型配列
Xpress-Optimizer Reference Manual Console and Library Functions 119

XPRSgetpivots
XPRSgetpivots

6

XPRSgetpivots

目的
変数inが基底に入る場合、基底を出る可能性のある変数のリストを返します。

概要
int XPRSgetpivots(XPRSprob prob, int in, int *outlist,
double *x, double *dobj, int *npiv, int maxpiv);

引数
エラー値
関係する制御なし

例
７番目の変数が基底に入る場合に基底を出る可能性のある変数のリストを探索します。
int npiv, outlist[5];double dobj;...
XPRSgetpivots(prob,6,outlist,NULL,&dobj,&npiv,5);
prob
現在の問題
in
基底に入る行や列の添字

MSI 用出る可能性のある変数のリストを保持する長さmaxpiv以上の整数型配列。必要なければNULLとなります
inが基底に入れられる場合、全変数の値を保持する長さ
ROWS+SPAREROWS+COLSの倍精度型配列。必要なければNULLとなります
inが基底に入れられる場合、目的関数値が返される倍精度型のポイ
ンタ出る可能性のある変数の実際の数が返される整数ポインタ
出る可能性のある変数が返される数の最大数
inが無効であることを示します（範囲外かすでに基底のとき）

outlist
x

dobj
npiv
maxpiv
425

Xpress-Optimizer Reference Manual Console and Library Functions 120

XPRSgetpivots

6

補足
変数inが基底に入り問題が退化する場合、いくつかの基底変数は基底を離れる候補となり、その可能性のある候補の数はnpivに返されます。これらの候補は多くても maxpivで、少なくとも長さmaxpivはあるoutlistにリストが返されます。変数inがピボット化された
場合は、問題が退化するため、目的関数値や全ての変数は、outlistからの候補で基底を去るために選ばれたものには依存しません。目的関数の値はdobjに返され、変数の値はxに返されます。
2. 行添字は範囲0〜 ROWS-1、列添字は範囲ROWS+SPAREROWS〜ROWS+SPAREROWS+COLS-1で
す。
1.

関連事項
XPRSgetpivotorder, XPRSpivot.
Xpress-Optimizer Reference Manual Console and Library Functions 121

XPRSgetpresolvebasis
XPRSgetpresolvebas is

6

XPRSgetpresolvebasis

目的
メモリからユーザーのデータエリアに現在の基底を返します。問題が事前分析されていると、事前分析された基底が返されます。そうでなければ、原基底が返されます。

概要
int XPRSgetpresolvebasis(XPRSprob prob, int *rstatus,
int *cstatus);

引数関係する制御なし

例
整数解探索に先だって事前分析された問題の基底情報を得て出力します。
XPRSprob prob;
int i, cols, *cstatus;...
XPRSreadprob(prob,"myglobalprob","");XPRSminim(prob,"");
prob
現在の問題
rstatus
各行に関係するスラック，サープラス，人為変数の基底状態を示す

MSI 用長さROWSの整数型配列。状態は次のうちのどれか一つです0
スラック，サープラス，または人為変数が下限で非基底状態
1
スラック，サープラス，または人為変数が基底状態
2
スラック，サープラスが上限で非基底状態
必要なければNULLとなります
制約行列における列の基底状態を保持するための長さCOLSの整数型配列。状態は次のいずれかです0
変数が下限で非基底状態か、下限がなければ零で基底状態
1
変数が基底状態2
変数が上限にある
必要なければNULLとなります

cstatus

Xpress-Optimizer Reference Manual Console and Library Functions 122

XPRSgetpresolvebasis

6

XPRSgetintattrib(prob,XPRS_COLS,&cols);
cstatus = malloc(cols*sizeof(int));
XPRSgetpresolvebasis(prob,NULL,cstatus);for(i=0;i<cols;i++)printf("Column %d: %d\n", i, cstatus[i]);XPRSglobal(prob);

関連事項
XPRSgetbasis, XPRSloadbasis, XPRSloadpresolvebasis.
Xpress-Optimizer Reference Manual Console and Library Functions 123

XPRSgetpresolvesol
XPRSgetpresolvesol

6

XPRSgetpresolvesol

目的メモリから事前分析された問題の解を返します。

概要
int XPRSgetpresolvesol(XPRSprob prob, double *x,
double *slack, double *dual, double *dj);

引数関係する制御なし

例(混合)整数計画問題を読みこみ、線形緩和問題の最適化に続いて事前分析された問題の解を表示します。
XPRSreadprob(prob,"MyProb","");XPRSmaxim(prob,"");XPRSgetintattrib(prob,XPRS_COLS,&cols);
x = malloc(cols*sizeof(double));XPRSgetpresolvesol(prob,x,NULL,NULL,NULL);
for(i=0;i<cols;i++)printf("Presolved x(%d) = %g\n",i,x[i]);XPRSglobal(prob);
prob
現在の問題
x
主変数の値が返される長さCOLSの倍精度型配列。必要なければNULLとなります

MSI 用

スラック値が返される長さROWSの倍精度型配列。必要なければNULLとなります
双対変数の値が返される長さROWSの倍精度型配列。必要なければ
NULLとなります
各変数の被約費用が返される長さCOLSの倍精度型配列。必要なけれ
ばNULLとなります

slack
dual
dj

Xpress-Optimizer Reference Manual Console and Library Functions 124

XPRSgetpresolvesol

6

補足問題が事前分析されていなければ、メモリにある解が返されます。
原問題の解は関連する関数XPRSgetsolにより返されます。

1.
2.

関連事項
XPRSgetsol, 章5.2 「事前分析のはたらき」
Xpress-Optimizer Reference Manual Console and Library Functions 125

XPRSgetprobname
XPRSgetprobname

6

XPRSgetprobname

目的
現在の問題名を返します。

概要
int XPRSgetprobname(XPRSprob prob, char *probname);

引数
関係する制御なし

例The following returns the problem name into probname:char probname[200];...
XPRSgetprobname(prob,probname);

関連事項
XPRSsetprobname.
prob
probname

現在の問題
現在の問題名を含むための200文字以内の文字列.

Xpress-Optimizer Reference Manual Console and Library Functions 126

XPRSgetqobj
XPRSgetqobj

6

XPRSgetqobj

目的
Hessian 行列の変数の組(icol, jcol)に相当する二次目的関数係数の１つを返します。

概要
int XPRSgetqobj(XPRSprob prob, int icol, int jcol,
double *dval);

引数
関係する制御なし

MSI 用例
目的関数の項の係数を返し、変数valueに置きます。
double value;...
XPRSgetqobj(prob,0,0,&value);補足dval は二次Hessian 行列の係数です。例えば、目的関数が項を持つ場合、XPRSgetqobj
によって戻された値は3.0で、また目的関数が項を持つ場合、XPRSgetqobjによって戻された値はの6.0です。

関連事項
XPRSchgqobj, XPRSchgmqobj.
prob
現在の問題
icol
二次の項における第１変数の列添字
jcol
二次の項における第２の変数の列添字
dval
目的関数の係数がおかれる倍精度型ポインタ
x 0 ( )2
3x 1 ( ) x 2 ( ) ⋅ 3x 2 ( ) x 1 ( ) ⋅ + ( )2 .
6x 1 ( )2 ( )2 .
Xpress-Optimizer Reference Manual Console and Library Functions 127

XPRSgetrhs
XPRSgetrhs

6

XPRSgetrhs

目的与えられた範囲にある行の右辺要素を返します。

概要
int XPRSgetrhs(XPRSprob prob, double *rhs, int first,
int last);

引数関係する制御なし

例
問題の右辺値を戻します。
int rows;
double *rhs;...
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
rhs = (double *) malloc(sizeof(double)*rows);
XPRSgetrhs(prob,rhs,0,rows-1);

関連事項
XPRSchgrhs, XPRSchgrhsrange, XPRSgetrhsrange.
prob
現在の問題
rhs
右辺要素が置かれる長さlast-first+1 の倍精度型配列
first
その範囲での最初の行
last
その範囲での最後の行
Xpress-Optimizer Reference Manual Console and Library Functions 128

XPRSgetrhsrange

6

MSI 用XPRSgetrhsrange

XPRSgetrhsrange

目的与えられた範囲にある行の右辺範囲値を返します。

概要
int XPRSgetrhsrange(XPRSprob prob, double *range,
int first, int last);

引数関係する制御なし

例
行列内の全ての行の右辺範囲値を返します。
int rows;
double *range;...
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
range = malloc(rows*sizeof(double));XPRSgetrhsrange(prob,range,0,rows);

関連事項
XPRSchgrhs, XPRSchgrhsrange, XPRSgetrhs, XPRSrange.
prob
現在の問題
range
右辺範囲値がおかれる長さlast-first+1 の倍精度型配列
first
その範囲での最初の行
last
その範囲での最後の行
Xpress-Optimizer Reference Manual Console and Library Functions 129

XPRSgetrowrange
XPRSgetrowrange

6

XPRSgetrowrange

目的
XPRSrange によって計算された行範囲を返します。

概要
int XPRSgetrowrange(XPRSprob prob, double *upact,
double *loact, double *uup, double *udn);

引数関係する制御なし

例
行範囲を計算して返します。
int rows;
double *upact, *loact, *uup, *udn;...
XPRSrange(prob);
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
upact = malloc(rows*sizeof(double));...
XPRSgetrowrange(prob,upact,loact,uup,udn);

補足
アクティビティとユニットコストはレンジファイル(problem_name.rng)から得られます。レMSI 用ンジファイルにおける上下側列アクティビティと上下側ユニットコストの意味については、付録Ａ「ログとファイル形式」を参照ください。

関連事項
XPRSchgrhsrange, XPRSgetcolrange.

現在の問題
上側行アクティビティのための長さROWSの倍精度型配列
下側行アクティビティのための長さROWSの倍精度型配列
上側行ユニットコストのための長さROWSの倍精度型配列
下側行ユニットコストのための長さROWSの倍精度型配列

prob
upact
loact
uup
udn

Xpress-Optimizer Reference Manual Console and Library Functions 130

XPRSgetrows
XPRSgetrows

6

XPRSgetrows

目的与えられた範囲での制約行列行の中の非零要素を返します。

概要
int XPRSgetrows(XPRSprob prob, int *mstart, int *mclind,double *dmatval, int size, int *nels, int first,
int last);

引数関係する制御なし

例
最初の２つの行に、最大６つまでの非零行列要素を返し、表示します。:
prob
現在の問題
mstart要求された各行についてのmclind、dmatval配列のオフセットの開始を示す添字が入った整数型配列。長さは少なくともlast-first+2です。列iはmrwind，dmatval 配列のmstart[i]の位置で始まり、
mstart[i+1]-mstart[i] 要素が含まれます。必要なければNULLとなります
mclind
各行の非零要素の列添字が入る長さsizeの整数型配列。必要なけれ
ばNULLとなります
dmatval
非零要素の値が入る長さsizeの倍精度型配列。必要なければNULLと
なります
size
戻される要素の最大数
nels
mclind ，dmatval配列における非零要素の数を返す整数のポイン
タ。非零要素の数がsizeよりも大きい場合は、size要素だけ返されます。nelsがsizeよりも小さい場合、nelsだけ返されます
first
その範囲での最初の行
last
その範囲での最後の行
Xpress-Optimizer Reference Manual Console and Library Functions 131

XPRSgetrows

6

int size=6, nels, mstart[3], mclind[6];double dmatval[6];...

MSI 用XPRSgetrows(prob,mstart,mclind,dmatval,size,&nels,0,1);for(i=0;i<nels;i++) printf("\t%2.1f\n",dmtval[i]);補足mstart, mclind, dmatval をNULLにおきかえることで、列のその範囲内の要素の数が得られます。この場合、sizeには、渡される配列の長さは0であることを示す0が設定されます。

関連事項
XPRSgetcols, XPRSgetrowrange, XPRSgetrowtype.
Xpress-Optimizer Reference Manual Console and Library Functions 132

XPRSgetrowtype
XPRSgetrowtype

6

XPRSgetrowtype

目的与えられた範囲における行のタイプを返します。

概要
int XPRSgetrowtype(XPRSprob prob, char *qrtype, int first,
int last);

引数関係する制御なし

例
配列qrtype に行タイプを戻します。
int rows;
char *qrtype;...
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
qrtype = (char *) malloc(sizeof(char)*rows);
XPRSgetrowtype(prob,qrtype,0,rows-1);

関連事項
XPRSchgrowtype, XPRSgetrowrange, XPRSgetrows.
prob
現在の問題
qrtype行タイプが返される長さlast-first+1文字の文字配列
N制約がないことを示します
L
制約＜を示しますE
制約＝を示しますG
制約＞を示しますR
レンジ制約を示します
first
その範囲での最初の行
last
その範囲での最後の行.
=.

Xpress-Optimizer Reference Manual Console and Library Functions 133

XPRSgetscaledinfeas
XPRSgetscaledinfeas

6

XPRSgetscaledinfeas

目的
原問題についてスケーリングされた実行不能な主，双対変数のリストを返します。問題が事前

MSI 用分析済みであれば、この関数がリストを返す前に事後分析がなされます。

概要
int XPRSgetscaledinfeas(XPRSprob prob, int *npv, int *nps,
int *nds, int *ndv, int *mx, int *mslack, int *mdual,
int *mdj);

引数
エラー値
関係する制御Double
prob
npv
nps
nds
ndv
mx

現在の問題
主実行不能変数の数
主実行不能行の数
双対実行不能行の数
双対実行不能変数の数
主実行不能変数が返される長さnpvの整数型配列。必要なければNULLとなります
主実行不能行が返される長さnpsの整数型配列。必要なければNULLとなります
双対実行不能行が返される長さndsの整数型配列。必要なければNULLとなります
双対実行不能変数が返される長さndvの整数型配列。必要なければ
NULLとなります
解は使えません
RHSの零許容範囲
被約費用許容範囲

mslack
mdual
mdj
422
FEASTOL
OPTIMALITYTOL

Xpress-Optimizer Reference Manual Console and Library Functions 134

XPRSgetscaledinfeas

6

例
初めに実行不能要素数を得るためにNULLの整数型配列と共に XPRSgetscaledinfeas が呼びだされます。そして配列用にスペースを割り当て、それらを入れるために関数が再び呼びだされます。
int *mx, *mslack, *mdual, *mdj, npv, nps, nds, ndv;...
XPRSgetscaledinfeas(prob, &npv, &nps, &nds, &ndv, NULL,
NULL, NULL, NULL);
mx = malloc(npv * sizeof(int));
mslack = malloc(nps * sizeof(int));
mdual = malloc(nds * sizeof(int));
mdj = malloc(ndv * sizeof(int));
XPRSgetscaledinfeas(prob, &npv, &nps, &nds, &ndv, mx,
mslack, mdual, mdj);

補足
最後の４つの引数のいずれかにNULLが設定されると、実行不能に相当する数が返されます。

関連事項
XPRSgetiis, XPRSgetinfeas, XPRSiis.
Xpress-Optimizer Reference Manual Console and Library Functions 135

MSI 用XPRSgetsol
XPRSgetsol

6

XPRSgetsol

目的
最適化に続いて解の値を得ます。

概要
int XPRSgetsol(XPRSprob prob, double *x, double *slack,double *dual, double *dj);

引数関係する制御Integer

例
次のコマンド列は、トップノードでの解(x)と最適MIP解(y)を得ます。
int cols;
double *x, *y;...
XPRSmaxim(prob,"");XPRSgetintattrib(prob,XPRS_COLS,&cols);
x = malloc(cols*sizeof(double));XPRSgetsol(prob,x,NULL,NULL,NULL);XPRSglobal(prob);y = malloc(cols*sizeof(double));XPRSgetsol(prob,y,NULL,NULL,NULL);
prob
現在の問題
x
主変数の値が返される長さCOLSの倍精度型配列。必要なければNULL
slack
dual
dj
REL10STYLE
SOLUTIONFILEとなります
スラック変数が返される返す長さROWSの倍精度型配列。必要なけれ
ばNULLとなります
双対変数の値が返される長さROWSの倍精度型配列。必要なければ
NULLとなります
各変数の被約費用が返される長さCOLSの倍精度型配列。必要なけれ
ばNULLとなります
双対変数に旧型形式を使うかを表します
解が読み書きされる場所の制御

Xpress-Optimizer Reference Manual Console and Library Functions 136

XPRSgetsol

6

補足
1.

Optimizerはデフォルトでは、XPRSminim や XPRSmaximから出るとき、また、XPRSglobal

によって整数解が得られるとき、解ファイルに解を書き込みます。XPRSgetsolがXPRSminim，XPRSmaxim，XPRSglobalの後に呼びだされる場合は、デフォルトでは、
解ファイルに解が返されます。
2. XPRSglobalの後に呼びだされる場合、XPRSgetsolは最後の整数解かトップノードでのLP 緩和問題の値を返します。しかし、コールバックルーチンの１つからXPRSglobalの実行中に呼びだされた場合は、現在のノードの解が返されます。これについては、
SOLUTIONFILE制御を設定することで変えられます。
3. 行列がXPRSminimやXPRSmaximを呼びだした後に更新されると、解は使えません。

MSI 用問題が事前分析済みの場合、XPRSgetsolは原問題の解を返します。事前分析された解を得るためにはXPRSgetpresolvesolを呼ぶしかありません。
5. 線形問題があり、XPRSminimかXPRSmaximを何度も呼びだす場合、解ファイルに読み書きできないようにすることが有効です。XPRSminimあるいはXPRSmaximが終了し、行列が離散要素を含まないなら、メモリ内の解は解ファイルにある解と同じです。
6. 行列が離散要素を持つ場合は、解ファイルに書きこめないようにしてください。というのは、XPRSglobalが終了すると、メモリにある解は最後のノードの解で、MIP最適解ではないためです。また、事前分析を実施する場合、XPRSminim, XPRSmaximあるいはXPRSglobalが終了した後、メモリにある解は事前分析済みの問題の解です。解ファイルに書きこめないようにするのが基本であれば、MIP最適解は、MIP解が見つかる度に呼ばれる整数解コールバック(XPRSsetcbintsolによって設定されます) により得られます。
デフォルトでは、XPRSgetsolがコールバックルーチンにより呼びだされるた場合、解はメモリから読みこまれます。
4.

関連事項
XPRSgetpresolvesol, XPRSwriteprtsol, XPRSwritesol.
Xpress-Optimizer Reference Manual Console and Library Functions 137

XPRSgetstrattrib
XPRSgetstrattrib

6

XPRSgetstrattrib

目的
種々の文字列問題特性の値を戻します。問題特性は問題のロード中，最適化中に設定されます。

概要
int XPRSgetstrattrib(XPRSprob prob, int ipar, char *cval);

引数
関係する制御なし

例
ロードされた行列の名前を戻します。
char matrixname[256];...
XPRSreadprob(prob,"myprob","");XPRSgetstrattrib(prob,XPRS_MATRIXNAME, matrixname);

関連事項
XPRSgetdblattrib, XPRSgetintattrib.
prob
現在の問題
ipar
値が返される問題特性。全問題特性のリストは８章「問題特性」か

ヘッダファイルxprs.h内を参照ください
特性の値(NULL終了分を加える) が返される文字列のポインタ

cval

Xpress-Optimizer Reference Manual Console and Library Functions 138

XPRSgetstrcontrol
XPRSgets trcontrol

6

XPRSgetstrcontrol

目的与えられた文字列制御パラメータの値を返します。

概要
int XPRSgetstrcontrol(XPRSprob prob, int ipar,

MSI 用char *cgval);

引数
関係する制御７章「制御パラメータ」参照

例
MPSBOUNDNAME の値を戻されて表示されます。
char mpsboundname[256];...
XPRSgetstrcontrol(prob,XPRS_MPSBOUNDNAME,mpsboundname);printf("Name = %s\n", mpsboundname);

関連事項
XPRSgetdblcontrol, XPRSgetintcontrol, XPRSsetstrcontrol.
prob
現在の問題
ipar
値が返される制御パラメータ。全制御のリストは７章「制御パラメータ」かxprs.h ヘッダファイル内のリストを参照ください
制御の値(NULL終了分を加える) が返される文字列のポインタ

cgval

Xpress-Optimizer Reference Manual Console and Library Functions 139

XPRSgetub
XPRSgetub

6

XPRSgetub

目的与えられた範囲での列の上限を返します。

概要
int XPRSgetub(XPRSprob prob, double *ub, int first,
int last);

引数関係する制御なし

例
現在の問題の列の上限を戻します。
int cols;
double *ub;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
ub = (double *) malloc(sizeof(double)*ncol);XPRSgetub(prob,ub,0,ncol-1);

補足
値がXPRS_PLUSINFINITY以上のときは無限大となり、XPRS_MINUSINFINITY以下のときは無限小となります。

関連事項
XPRSchgbounds, XPRSgetlb.
prob
ub
first
last

現在の問題
上限が置かれてある長さ last-first+1 の倍精度型配列
その範囲での最初の列その範囲での最後の列

Xpress-Optimizer Reference Manual Console and Library Functions 140

MSI 用XPRSgetunbvec
XPRSgetunbvec

6

XPRSgetunbvec

目的
シンプレックス法や双対アルゴリズムによって行列が非有界である場合の基底に入るベクトルの添字を返します。

概要
int XPRSgetunbvec(XPRSprob prob, int *junb);

引数
エラー値
関係する制御なし

補足
双対シンプレックス法を用いて解くとき、問題が主実行不可能な場合は、XPRSgetunbvecは双対非有界を検出したピボット行を返します。

関連事項
XPRSgetinfeas, XPRSmaxim / XPRSminim.
prob
現在の問題
junb
非有界の行列の原因となる基底に入るベクトルが返される整数のポイント。シンプレックス法では、ベクトルは制約(行)junb(junbが0〜row-1の場合)か、変数(列) junb-ROWS-SPAREROWS（junbがROWS+SPAREROWS〜ROWS+SPAREROWS+COLS-1の場合）のスラック
変数です
現在の問題は使えません

91

Xpress-Optimizer Reference Manual Console and Library Functions 141

XPRSglobal
GLOBALXPRSglobal GLOBAL

6

XPRSglobal GLOBAL

目的
XPRSmaxim (MAXIM) ， XPRSminim (MINIM)を用いてLP緩和問題を解いた後、整数解探索を開始するか、中断された整数解探索を継続します。

概要
int XPRSglobal(XPRSprob prob);
GLOBAL

引数
関係する制御Integerprob
BACKTRACKBREADTHFIRSTCOVERCUTS
CPUTIME
CUTDEPTHCUTFREQ

現在の問題
ノード選択基準
ノード選択基準の限度
トップノードにおいて導入された不等式の使用回数
1 CPUタイム 0 経過時間
カットが生成される木における最大の深さ木探索でカットが生成される頻度

MSI 用CUTSTRATEGYDEFAULTALG
GOMCUTSKEEPMIPSOLMAXMIPSOLMAXNODEMAXSLAVE
MAXTIMEMIPLOGMIPPRESOLVENODESELECTIONREFACTORSBBEST
SBITERLIMIT

カット戦略の指定
木探索で使うアルゴリズム
トップノードでのGomory カット使用回数保持する整数解の数探索するMIP解の最大数
分枝限定法探索でのノードの最大数
並列MIP探索に使われるスレーブプロセッサーの数
最大許容時間整数解印刷用フラグ
整数事前分析のタイプ
ノード選択制御
最適基底の再因子分解の実施
強い分枝を実行する実行不能離散要素の数
強い分枝を実行する双対反復の数

Xpress-Optimizer Reference Manual Console and Library Functions 142

XPRSglobal
GLOBAL6

Double例 1 (ライブラリ)問題fred.mat,を入力し、解ファイルを出力する前にLPと整数問題を解きます。
XPRSreadprob(prob,"fred","");XPRSmaxim(prob,"");XPRSglobal(prob);
XPRSwriteprtsol(prob);
例 2 (コンソール)
コンソールOptimizerのコマンドの集合に同じです。
READPROB fred
MAXIM
GLOBAL
WRITEPRTSOL

補足
XPRSmaxim (MAXIM) かXPRSminim (MINIM)によりLP最適解が見つかっていると、整数解探索をXPRSglobal (GLOBAL)により開始します。
2. 整数解探索を中断して、引き続きXPRSglobal (GLOBAL)が再度呼びだされる場合、終了点から探索が再開されます。トップノードで探索を再開するには、関数XPRSinitglobal
を使います。
TREECOVERCUTS
木の中で導入された不等号の使用回数
TREEGOMCUTS木におけるGomoryカットの使用回数
VARSELECTION
劣化推定制御ノード選択
MIPADDCUTOFF
新しいカットオフを与えるために目的関数に加える量
DEGRADEFACTOR
推定劣化量を乗する要素
MIPABSCUTOFF
LP最適化コマンドの後に設定するカットオフ
MIPABSSTOP
最適化停止絶対値基準
MIPRELCUTOFF
カットオフ％
MIPRELSTOP
最適化停止相対値基準
1.

MSI 用MIPTARGETMIPTOLPSEUDOCOST

整数目的関数目標
整数解の実行可能許容範囲
ノードの劣化量推定でのデフォルト擬コスト

Xpress-Optimizer Reference Manual Console and Library Functions 143

XPRSglobal
GLOBAL

3.
4.

5.
6.
7.

8.
9.

6

MIPLOGノード値nごとに６列の情報の概要ログが出力されます。（付録A.7「グローバル・

ログ」参照）
多くの場合は、XPRSmaxim (MAXIM) / XPRSminim (MINIM) の後にXPRSglobal (GLOBAL)
は直接呼ばれます。このような場合、gフラグをXPRSmaxim (MAXIM) / XPRSminim (MINIM)に付けて使うことで、より効果的に実行できます。
(コンソール) 整数解探索はCTRL-Cを入力すれば、次の入力を始めていない限り中断します。
Optimizerライブラリユーザは、MIPSTATUS 問題特性を使うことで、整数解探索の最終状態を確認できます。
Optimizerは、複数ファイルにわたりデータが展開された２GBを超えるグローバル(アクティブノードリスト)ファイルをサポートしています。グローバルファイルは最初、nameprobname.glbと名付けられ、それ以降のファイル名は、probname.glb.1,
probname.glb.2,….と名付けられます。１つのファイルが2GBを超えることはありません。
XPRSminim (MINIM) とXPRSmaxim (MAXIM)について説明された制御はまた、
XPRSglobal (GLOBAL)アルゴリズムを制御することにも使えます。
いくつかのMIP解を保存する場合は、MIP制御KEEPMIPSOLを要求する解の数として１〜10の範囲で設定します。整数解を比較検討したい場合に、この機能が役立ちます。普通、最初に見つかったMIP解は、probname.solに保存されます。KEEPMIPSOLが１よりも大きく設定されていると、2番目によいMIP解が見つかると、最初の解のファイルの名前をprobname.so0と名づけ、2番目の解を probname.solに書きこみます。3番目、４番目があれば同様にします。よって、10個の整数解が保存された場合は、最も良いMIP解は常に
probname.solの中に見られ、次に良い解は、probname.so0、それ以降はprobname.so9
まで次々と解を見ることができます。これらの異なる解は、OptimizerのXPRSwritesol(WRITESOL)コマンドにeフラグを付けることでASCII形式で出力できます。

関連事項
XPRSfixglobal (FIXGLOBAL), XPRSinitglobal, XPRSmaxim (MAXIM) /XPRSminim (MINIM), 付録 A.7「グローバルログ」
Xpress-Optimizer Reference Manual Console and Library Functions 144

XPRSgoal
GOAL
XPRSgoal GOAL

6

XPRSgoal GOAL

目的
目標計画を実行します。

概要
int XPRSgoal(XPRSprob prob, char *filename, char *flags);
GOAL [filename] [-flags]

MSI 用引数
関係する制御Integer
例 1 (ライブラリ)目標計画を実行します。
Goalexはファイル gb1.golから指示を得ます。
XPRSreadprob(prob,"goalex","");XPRSgoal(prob,"gb1","fo");

例 2 (コンソール)
目的関数OBJ1のウェイトが未知の問題があり、行を最大化し、制約を最適値の5%まで緩和してよいとする目標計画を実行する場合は、以下のように問題を解きます。
READPROB
GOAL
P
O
prob
filename
flags

KEEPMIPSOL

現在の問題
指示が読みこまれるファイル名を含む200文字以内の文字列(拡張子.golがつきます)
XPRSgoal (GOAL)に渡すフラグo表示される最適化プロセスのログl
整数変数を線形に扱いますf
ファイルfilename.grpに書き出します
優先モデルにおいて保持する解の数

Xpress-Optimizer Reference Manual Console and Library Functions 145

XPRSgoal
GOAL

6

OBJ1
MAX
P
5
<empty line>

補足
1.

2.

3.

4.
5.

複数の目的関数を持つ問題の解をXPRSgoal (GOAL)コマンドを用いることで探すことができます。XPRSgoal (GOAL)を制約と用いることで、実行不可能な問題の解を見つけられます。目標は最初に問題を実行可能にするために緩和した制約をになります。この緩和した制約をどれだけ満たすかを調べ、問題を実行可能にするために必要なペナルティが分かる（アルキメデスモデル）か、どの緩和制約を満たせないかが分かります（優先モデル）(コンソール) GOALの使用時にオプションfilenameを指定すると、プロンプトへの応答は
filename.golから読みこまれます。プロンプトに正常な応答がない場合、目標計画は終了し、制御がOptimizerに返されます。
KEEPMIPSOLは、優先モデルにおける（制約条件か目的関数）各ステップ解を保持するのに使われます。XPRSwritesol (WRITESOL)コマンドにeフラグを付けて用いることで、全ての解を出力できます。
目標計画問題の１つの出力を、更なる検討の入力として使うことは、常にはできません。
というのは、目的関数の係数、右辺、行タイプは全て変更されることがあるためです。
目的関数を使うアルキメデスモデルでは、結果の目的関数の定数項は、もとの目的関数のMSI 用

右辺の一次結合です。

関連事項「目標計画法」

5.5章

Xpress-Optimizer Reference Manual Console and Library Functions 146

HELP
HELP

6

HELP

目的
Optimizerのコンソールユーザにコマンドを簡単に説明します。

概要
HELP

引数
なし

関係する制御なし

例 (コンソール)
このコマンドはコンソールOptimizerのコマンドラインで呼びだして使います。
HELP

関連事項
なし
Xpress-Optimizer Reference Manual Console and Library Functions 147

XPRSiisIIS
XPRSiis IIS

6
XPRSiis IIS

目的
線形実行不能問題の中で既約実行不可能集合(IIS)の探索を開始します。

概要
int XPRSiis(XPRSprob prob, char *flags);
IIS [-flags]

引数関係する制御Integer
例 1 (ライブラリ)
IISを探索し、問題特性IISを調べてその数を示します。
int iis;...
XPRSiis(prob,"f");XPRSgetintattrib(prob, XPRS_IIS, &iis);
printf("IIS = %d\n", iis);
例 2 (コンソール)

制御パラメータMAXIIS で指定した数のIISを探します。
IIS
prob
flags

現在の問題
XPRSiis (IIS) に渡すフラグ。次のように設定できますo
IIS情報と最適化過程ログを画面に表示します

MSI 用ファイル problem_name.iisにIIS情報を書きこみます
フラグがない場合は、IIS情報だけが画面に表示されます
見つける既約実行不可能集合の数
f

MAXIIS

Xpress-Optimizer Reference Manual Console and Library Functions 148

XPRSiisIIS

6

補足
モデルには実行不能な要素がいくつか存在する場合があります。１つのIISを修正しても、モデルが実行可能にならないかもしれません。よって、Optimizerはモデルが実行不能になる場合のIISを見つけます。制御MAXIISを正の整数に設定すると、XPRSiis (IIS)コマン
ドはIISがMAXIIS個見つかると終了します。デフォルトでは、制御MAXIISは-1に設定されていて、実行不能になるたびに独立なIISを見つけます。
2. 問題特性IISは特定の探索で見つかったIISの個数を戻すことができます。詳細は例１を参照してください。
1.

関連事項
XPRSgetiis, 3.2章「実行不能」
Xpress-Optimizer Reference Manual Console and Library Functions 149

XPRSinit
XPRSinit

6

XPRSinit

目的
Optimizerライブラリを初期化します。これは、他のライブラリルーチンよりも前に呼ばれなければいけません。

概要
int XPRSinit(char *xpress);

引数関係する制御なし

例
XPRSinit を呼ぶ通常の方法です。
if(XPRSinit(NULL)) printf("Problem with XPRSinit\n");補足
エラーチェックは全てのライブラリ関数の呼びだしで常に使用されるべきですが、大多数のエラーは初期化段階で起こるため、初期化関数を使ってエラーチェックを行うのは特に重要です。零でないリターンコードは、ライセンスが見つからなかったことを表します。
このような場合には、アプリケーションは終了します。但し、リターンコード３２の場合
は、学生用ライセンスが見つかったとしてソフトは動きますが、機能や容量に制限があります。
2. 全てのスレッドが同じであるマルチスレッドアプリケーションでは、XPRSinitはライブ
ラリに先だって各スレッドにより呼びだされます。初期化は一度だけ実行される、各スレッドが必要なだけライブラリ関数を使えることを保証します。他のスレッドを作り出すク
リアマスタースレッドをもつアプリケーションの場合、マスタースレッドによって初期化操作を呼びだす必要があります。
1.

MSI 用関連事項
XPRScreateprob, XPRSfree.
XpressXpresss-MP のパスワードファイルのあるディレクトリ。指定がな
ければNULLとし、標準の初期化ディレクトリがチェックされます。
Xpress-Optimizer Reference Manual Console and Library Functions 150

XPRSinitglobal
XPRSinitglobal

6

XPRSinitglobal

目的
整数木探索を再初期化します。デフォルトでは、XPRSglobalが中断されて再度呼びだされた
場合、整数解探索は中断したところから再開されます。最初にXPRSglobal を呼び、その後
XPRSinitglobalが呼ばれた場合は、XPRSglobalが再度呼ばれた時、整数解探索はトップノードからスタートします。

概要
int XPRSinitglobal(XPRSprob prob);

引数
関係する制御なし

例
問題を再度解こうとする前に整数解探索を初期化します。
XPRSinitglobal(prob);
XPRSmaxim(prob,"g");関連事項
XPRSglobal, XPRSmaxim / XPRSminim.
prob
現在の問題
Xpress-Optimizer Reference Manual Console and Library Functions 151

XPRSloadbasis
XPRSloadbasis

6

XPRSloadbasis

目的
ユーザエリアに基底をロードします。

概要
int XPRSloadbasis(XPRSprob prob, int *rstatus,
int *cstatus);

引数関係する制御なし

例問題をロードし、最適化を高速化するために類似問題から(事前に最適化済の)基底を再ロードします。
XPRSreadprob(prob,"problem","");
XPRSloadbasis(prob,rstatus,cstatus);
XPRSminim(prob,"");

補足
新しい基底の保存により問題が変更された場合、それをロードする前に以下のように基底を変更できます。

MSI 用

現在の問題
各行に関係するスラック，サープラス，人為変数の基底状態を含む
長さROWSの整数型配列。状態は以下のいずれかです0
スラック，サープラス，人為変数は下限で基底ではありません1
スラック，サープラス，人為変数は基底です
2
スラック，サープラス変数は上限で基底ではありません
制約行列内の各列の基底状態を含むの長さCOLSの整数型配列。状態は以下のいずれかです
0
変数に下限値がなければ、変数は下限で基底でない、あるいは零で超基底です1
変数は基底です2
変数は上限にありますprobrstatuscstatus

Xpress-Optimizer Reference Manual Console and Library Functions 152

XPRSloadbasis

•
•
•

6

変数が無限の下限か有限の上限を持たなければ、下限(cstatus[icol]=0)で新しい非基底変数を作ります。この場合、上限で非基底変数を作ります(cstatus[icol]=2)
新しい制約基底を作ります (rstatus[jrow]=1)
基底変数、非基底制約を削除しないようにします

関連事項
XPRSgetbasis, XPRSgetpresolvebasis, XPRSloadpresolvebasis.
Xpress-Optimizer Reference Manual Console and Library Functions 153

XPRSloadcuts
XPRSloadcuts

6

XPRSloadcuts

目的
カットプールから行列にカットをロードします。XPRSloadcutsを呼ばないと、カットはカットプールに残りますが、ノードではアクティブでなくなります。XPRSdelcutsで削除しなければ、ノードでロードされたカットは全ての子ノードでアクティブなままです。

概要
int XPRSloadcuts(XPRSprob prob, int itype, int interp,
int ncuts, int *mcutind);

引数
関係する制御なし

関連事項
XPRSaddcuts, XPRSdelcpcuts, XPRSdelcuts, 5.4章「カットマネージャのはたらき」
prob
現在の問題
itype
カットタイプinterp
カットタイプの解釈-1
全てのカットをロードします1
カットタイプを数字で扱います2
カットタイプをビットマップで扱います。いずれかのビットがitypeに設定されたビットと一致する場合、カットをロードしますMSI 用カットタイプをビットマップで扱います。全てのビットがitypeに設定されるビットと一致する場合、カットをロードします
ロードするカットの数。値-1は、タイプitypeの全てのカットをロードすることを示します
ロードするカットの添字番号を含む整数型配列。ncutsが-1の場合、この配列はNULLです。そうでなければ、長さncutsです。-1の添字は無視され、XPRSstorecutsから返される配列mindexは、直接
XPRSloadcutsに引き渡せます3ncuts
mcutind

Xpress-Optimizer Reference Manual Console and Library Functions 154

XPRSloaddirs
XPRSloaddirs

6

XPRSloaddirs

目的指示を行列にロードします。

概要
int XPRSloaddirs(XPRSprob prob, int ndir, int *mcols,
int *mpri, char *qbr, double *dupc, double *ddpc);

引数関係する制御なし

関連事項
XPRSgetdirs, XPRSloadpresolvedirs, XPRSreaddirs.
prob
現在の問題
ndir
指示の数
mcols
列番号を含む長さndirの整数型配列。負の値は集合番号を示します(第１集合は-1、第２集合は-2と続きます)mpri
列，集合の優先度を含む長さndirの整数型配列。必要なければNULLとなります
各列，集合の分枝方向を示す長さndirの文字配列
U
押し上げ要素D
押し下げ要素N
特になし
必要なければNULLとなります
列，集合の上側擬コストを含む長さndirの倍精度型配列。必要なけ
ればNULLとなります
列，集合の下側擬コストを含む長さndirの倍精度型配列。必要なけ
ればNULLとなります

qbr

dupc
ddpc

Xpress-Optimizer Reference Manual Console and Library Functions 155

XPRSloadglobal
XPRSloadglobal

6

XPRSloadglobal

目的
整数問題をOptimizerデータ構造にロードします。整数，バイナリ，部分整数，半連続，半連続整数変数は、タイプ１と２の集合と一緒に定義されます。集合要素の参照行の値は、参照行を指定するのではなく配列として渡されます。

MSI 用

概要
int XPRSloadglobal(XPRSprob prob, char *probname, int ncol,
int nrow, char *qrtype, double *rhs, double *range,
double *obj, int *mstart, int *mnel, int *mrwind,double *dmatval, double *dlb, double *dub, int ngents,
int nsets, char *qgtype, int *mgcols, double *dlim,
char *qstype, int *msstart, int *mscols, double *dref);

引数
現在の問題
問題名を含む200文字以内の文字列
行列の構造列の数
目的関数行を含まない行列の行の数
行タイプを含む長さnrowの文字配列
L制約を示しますE
制約を示しますG
制約を示しますR
範囲制約を示します
N
非束縛制約を示します
右辺の係数を含む長さnrowの倍精度型配列
レンジ行のレンジ値を含む長さnrowの倍精度型配列。必要なければ
NULLとなります
目的関数の係数を含む長さncolの倍精度型配列
各列要素の開始のmrwind，dmatval配列のオフセットを含む整数型配列。この配列の長さは ncolであるか、mnelがNULLの場合は長さncol+1です

prob
probnamencol
nrow
qrtype

rhs
range
obj
mstart.
=.

Xpress-Optimizer Reference Manual Console and Library Functions 156

XPRSloadglobalmnel
mrwinddmatvaldlb
dub
ngentsnsets
qgtype6
各列の非零要素の数を含む長さncolの整数型配列。必要なければ
NULLとなります。
各列の非零要素の行添字を含む整数型配列。添字が昇順に入力されている場合、長さはmstart[ncol-1]+mnel[ncol-1] であるか、mnelがNULLの場合は長さmstart[ncol]です
mrwindの非零要素値長さを含む倍精度型配列列の下限を含む長さncolの倍精度型配列列の上限を含む長さncolの倍精度型配列
バイナリ，整数，半連続，半連続整数，部分整数要素の数
SOS1，SOS2集合の数
要素タイプを含む長さngentsの文字配列
B
バイナリ変数I
整数変数
P
部分整数変数S
半連続変数

MSI 用

半連続整数変数
離散要素の列添字を含む長さngetsの整数型配列
部分整数変数と半連続，半連続整数変数の下限を含む長さngentsの倍精度型配列。(バイナリや整数変数に相当する位置の要素は無視されます)。必要なければNULLとなります
集合タイプを含む長さnsetsの文字配列
1
SOS1 タイプ集合2
SOS2 タイプ集合
必要なければNULLとなります
集合のスタートを示すmscols，dref配列のオフセットを含む整数型配列。この配列は長さnsets+1で、最後の要素は集合nsets+1の開始位置のオフセットを含みます。必要なければNULLとなります。
Rmgcolsdlim

qstypemsstartXpress-Optimizer Reference Manual Console and Library Functions 157

XPRSloadglobal

6

関係する制御Integer
Double例
整数x,yを用いた整数問題globalExです。
char probname[] = "globalEx";
int ncol = 2, nrow = 2;char qrtype[] = {’L’,’L’};
double rhs[] = {400.0, 200.0};
int mstart[] = {0, 2, 4};
int mrwind[] = {0, 1, 0, 1};
double dmatval[] = {3.0, 1.0, 2.0, 3.0};
double objcoefs[] = {1.0, 2.0};
double dlb[] = {0.0, 0.0};
double dub[] = {200.0, 200.0};
mscols
各集合の列を含む長さmsstart[nsets]-1の整数型配列。必要なけ
dref
EXTRAELEMSEXTRACOLS
EXTRAMIPENTSEXTRAPRESOLVEEXTRAROWSKEEPNROWSSCALING
MATRIXTOLSOSREFTOL
Maximize
Subject to:x 2y +
3x 2y + 400 .

ればNULLとなります。
集合の各要素の参照行要素を含む長さmsstart[nsets]-1の倍精度型配列。必要なければNULLとなります
追加できる行列要素数
追加できる列の数追加できる離散要素数
事前分析で追加できる要素数
追加できる行の数
非束縛行の状態
スケーリングのタイプ
行列要素の零許容範囲
参照行要素間の最小ギャップ

MSI 用x 3y + 200 .
Xpress-Optimizer Reference Manual Console and Library Functions 158

XPRSloadglobal

6

int ngents = 2;
int nsets = 0;char qgtype[] = {’I’,’I’};
int mgcols[] = {0,1};...
XPRSloadglobal(prob, probname, ncol, nrow, qrtype, rhs,
NULL, objcoefs, mstart, NULL, mrwind, dmatval, dlb,
dub, ngents, nsets, qgtype, mgcols, NULL, NULL,
NULL, NULL, NULL);

補足
行と列の添字は、通常、0からnrow-1まで、0からncol-1でCの表記に各々従います。
ライブラリヘッダファイルで定義される２つの定数XPRS_PLUSINFINITYとXPRS_MINUSINFINITYは、上下界値配列内で各々プラス・マイナス無限（大・小）を示すのに使われます。
3. レンジ配列の値はRタイプ行についてのみ読みこまれます。他のタイプの行については無視されます。
1.
2.

関連事項
XPRSaddsetnames, XPRSloadlp, XPRSloadqglobal, XPRSloadqp,
XPRSreadprob.
Xpress-Optimizer Reference Manual Console and Library Functions 159

XPRSloadlp
XPRSloadlp

6

XPRSloadlp

目的ファイルから行列を読むのでなく、行列を直接Optimizerに渡せます。

概要
int XPRSloadlp(XPRSprob prob, char *probname, int ncol,
int nrow, char *qrtype, double *rhs, double *range,
double *obj, int *mstart, int *mnel, int *mrwind,double *dmatval, double *dlb, double *dub);

引数
prob
probnamencol
nrow
qrtype

rhs
range

現在の問題
問題名を含む200文字以内の文字列
行列の構造列の数
行列の行の数(目的関数を含みません)
行タイプを含む長さnrowの文字配列
L制約を示しますE
制約を示しますG
制約を示しますR
レンジ制約を示します
N
非束縛制約を示します
行の右辺係数を含む長さnrowの倍精度型配列
レンジ列のレンジ値を含む長さnrowの倍精度型配列。必要なければ

MSI 用NULLとなります

目的関数の係数を含む長さncolの倍精度型配列
各列の要素の開始のmrwind，dmatval配列のオフセットを含む整数型配列。この配列は長さncolであるか、mnelがNULLのときに長さncol+1です
各行における非零要素の数を含む長さncolの整数型配列。必要なけ
ればNULLとなります

obj
mstartmnel.
=.

Xpress-Optimizer Reference Manual Console and Library Functions 160

XPRSloadlp

6

関係する制御Integer
Double例
LP問題をXPRSloadlpを使って Optimizerにロードします。
char probname[] = "small";int ncol = 2, nrow = 4;char qrtype[] = {’N’,’G’,’G’,’G’};
double rhs[] = { 0 , 3 , 3 , 1 };mrwind各列の非零要素の行添字を含む整数型配列。添字が昇順に列に入力

dmatvaldlb
dub
EXTRAELEMSEXTRACOLS
EXTRAPRESOLVEEXTRAROWSKEEPNROWSSCALING
MATRIXTOL
Maximize
Subject to:xy +2x 3 >
x 2y + 3 >xy +1>

されている場合、mrwindの長さは、mstart[ncol1]+mnel[ncol-1]であるか、mnelがNULLの場合は、mstart[ncol]となります
dmatval 非零要素値を含む倍精度型配列で、長さはmrwindにより
ます
列の下限を含む長さncolの倍精度型配列列の上限を含む長さncolの倍精度型配列追加できる行列要素の数追加できる列の数
事前分析において追加できる要素の数追加できる行の数
非束縛行の状態
スケーリングのタイプ
行列要素の零許容範囲

Xpress-Optimizer Reference Manual Console and Library Functions 161

XPRSloadlp

6

double obj[] = { 1 , 1 };int mstart[] = { 0 , 4 , 7 };

MSI 用

int mrwind[] = { 0 , 1 , 2 , 3 , 0 , 2 , 3 };double dmatval[] = { 1 , 2 , 1 , 1 , 1 , 2 , 1 };double dlb[] = { 0 , 0 };double dub[] = {XPRS_PLUSINFINITY,XPRS_PLUSINFINITY};
XPRSloadlp(prob,probname,ncol,nrow,qrtype,rhs,NULL,
obj,mstart,NULL,mrwind,dmatval,dlb,dub)

補足
行列の添字は通常、0からnrow-1，0からncol-1のCの表記に各々従います。
ライブラリヘッダファイルで定義される２つの定数 XPRS_PLUSINFINITYとXPRS_MINUSINFINITYは、限度配列においてプラス・マイナス無限（大・小）を表すのに使われます。
3. range配列の値はRタイプの行についてのみ読まれます。他のタイプの行については無視されます。
4. レンジ制約について、rhs配列の値は上限制約を表し、rng配列の値は制約のレンジを表します。よってレンジ制約は次のようになります。
1.
2.

関連事項
XPRSloadglobal, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.
rhs j rngj – aij xi
i_ rhs j . .
Xpress-Optimizer Reference Manual Console and Library Functions 162

XPRSloadmodelcuts
XPRSloadmodelcuts

6

XPRSloadmodelcuts

目的行列の行の集合をモデルカットとして扱うように指定します。

概要
int XPRSloadmodelcuts(XPRSprob prob, int nmod, int *mrows);

引数
エラー値
関係する制御なし

例
最初の６行を整数問題myprobのモデルカットとして設定します。
int mrows[] = {0,1,2,3,4,5}...
XPRSloadmodelcuts(prob,6,mrows);
XPRSminim(prob,"g");補足
事前分析の間、モデルカットは行列から取り除かれます。最適化に続いて、違反モデルカ
ットは行列の後ろに追加され、行列は再度最適化されます。これは、違反カットが存在す
る限り続きます。
2. モデルカットは「真の」モデルカットでなければまらず、その点で、それらは最適MIP解で冗長です。
1.

関連事項
5.4章「カットマネージャのはたらき」参照

MSI 用

現在の問題
モデルカットの数
カットとして扱われる行添字の配列
事前分析された行列には操作できません

prob
nmod
mrows
268

Xpress-Optimizer Reference Manual Console and Library Functions 163

XPRSloadpresolvebasis
XPRSloadpresolvebasis

6

XPRSloadpresolvebasis

目的
ユーザエリアから事前分析された基底をロードします。

概要
int XPRSloadpresolvebasis(XPRSprob prob, int *rstatus,
int *cstatus);

引数関係する制御なし

例
ある問題の事前分析された基底を保存し、他の問題にロードします。
int rows, cols, *rstatus, *cstatus;...
XPRSreadprob(prob,"myprob","");XPRSminim(prob,"");XPRSgetintattrib(prob,XPRS_ROWS,&rows);
XPRSgetintattrib(prob,XPRS_COLS,&cols);
rstatus = malloc(rows*sizeof(int));
cstatus = malloc(cols*sizeof(int));
XPRSgetpresolvebasis(prob,rstatus,cstatus);
prob
現在の問題
rstatus
各行に関係するスラック，サープラス，人為変数の基底状態を含む

長さROWSの整数型配列。状態は以下のいずれかです0
スラック，サープラス，人為変数は下限で基底ではありません1
スラック，サープラス，人為変数は基底です2
スラックあるいはサープラス変数は上限で基底ではありません
行列の各列の基底状態を含む長さCOLSの整数型配列。状態は次のいずれかです
0
変数は下限で非基底。あるいは変数に下限がない場合は零で基底です
1
変数は基底です2
変数は上限にあります

cstatus

Xpress-Optimizer Reference Manual Console and Library Functions 164

XPRSloadpresolvebasis

6

XPRSreadprob(prob2,"myotherprob","");XPRSminim(prob2,"");
XPRSloadpresolvebasis(prob2,rstatus,cstatus);

関連事項
XPRSgetbasis, XPRSgetpresolvebasis, XPRSloadbasis.
Xpress-Optimizer Reference Manual Console and Library Functions 165

MSI 用XPRSloadpresolvedirs

6

XPRSloadpresolvedirs

XPRSloadpresolvedirs

目的
指示を事前分析された行列にロードします。

概要
int XPRSloadpresolvedirs(XPRSprob prob, int ndir,
int *mcols, int *mpri, char *qbr, double *dupc,
double *ddpc);

引数関係する制御なし

例
行列の列0に優先指示をロードします。
int mcols[] = {0}, mpri[] = {1};...
XPRSminim(prob,"");
XPRSloadpresolvedirs(prob,1,mcols,mpri,NULL,NULL,NULL);
prob
現在の問題
ndir
指示の数
mcols
列番号を含む長さndirの整数型配列。負の値は集合番号を示します。
(-1は最初の集合、-2は2番目の集合．．．と続きます)mpri
各列や集合の優先度を含む長さndirの整数型配列。必要なければ
NULLとなりますqbr
各列あるいは集合の分枝方向を指定する長さndirの文字配列
U
押し上げ要素D
押し下げ要素N
特に指定無し必要なければNULLとなります
dupc
列や集合の押し上げ擬コストを含む長さndirの倍精度型配列。必要なければNULLとなります
ddpc
列や集合の押し下げ擬コストを含む長さndirの倍精度型配列。必要なければNULLとなります列や集合の押し下げ擬コストを含む長さndirの倍精度型配列。必要なければNULLとなります
Xpress-Optimizer Reference Manual Console and Library Functions 166

XPRSloadpresolvedirs

6

XPRSminim(prob,"g");関連事項
XPRSgetdirs, XPRSloaddirs.
Xpress-Optimizer Reference Manual Console and Library Functions 167

XPRSloadqglobal
XPRSloadqglobal

6

XPRSloadqglobal

目的
二次目的係数を持つ整数問題をOptimizerデータ構造にロードします。整数，バイナリ，部分

MSI 用整数，半連続，半連続整数変数はタイプ１と２の集合とともに定義されます。集合要素の参照
行の値は参照行を指定するのではなく、配列として引き渡されます。

概要
int XPRSloadqglobal(XPRSprob prob, char *probname,
int ncol, int nrow, char *qrtype, double *rhs,
double *range, double *obj, int *mstart, int *mnel,
int *mrwind, double *dmatval, double *dlb, double *dub,
int nqtr, int *mqc1, int mqc2, double *dqe, int ngents,
int nsets, char *qgtype, int *mgcols, double *dlim,
char *qstype, int *msstart, int *mscols, double *dref);

引数
現在の問題
問題名を含む200文字以内の文字列
行列の構造列の数
目的行以外の行列の行の数目的行以外の行列の行の数
行タイプを含む長さnrowの文字配列
L制約を示しますE
制約を示しますG
制約を示しますR
レンジ制約を示します
N
非束縛制約を示します
右辺の係数を含む長さnrowの倍精度型配列
レンジ行のレンジ値を含む長さnrowの倍精度型配列。レンジ配列の値はRタイプの行についてのみ読まれます。他のタイプの行については無視されます。必要なければNULLとなります
目的関数係数を含む長さncolの倍精度型配列

prob
probnamencol
nrow
qrtype

rhs
range

obj
.
=
.

Xpress-Optimizer Reference Manual Console and Library Functions 168

XPRSloadqglobal

mstartmnel
mrwinddmatval
dlb
dub
nqtr

6
各列の要素の開始のmrwind，dmatval 配列のオフセットを含む整数型配列。この配列の長さはncolであるか、mnelがNULLの場合、長さncol+1です
各列の非零要素数を含む長さncolの整数型配列。必要なければNULLとなります
各列の非零要素の行添字を含む整数型配列。添字が列について昇順に入力されている場合、mrwindの長さは、mstart[ncol1]+mnel[ncol-1] であるか、mnelがNULLの場合にはmstart[ncol]です
mrwind の非零要素値の長さを含む倍精度型配列mrwind の非零要素値の長さを含む倍精度型配列列の下限を含む長さncolの倍精度型配列列の上限を含む長さncolの倍精度型配列
二次項の数

MSI 用

各二次項の第1変数の列添字を含むサイズnqtrの整数型配列
各二次項の第2の変数の列添字を含むサイズnqtrの整数型配列
二次係数を含むサイズnqtrの倍精度型配列
バイナリ，整数，半連続，半連続整数，部分整数の要素数
SOS1，SOS2集合の数
要素タイプを含む長さngentsの文字配列
B
バイナリ変数I
整数変数
P
部分整数変数
S
半連続整数
R
半連続整数変数
離散要素の列添字を含む長さngentsの整数型配列

mqc1
mqc2
dqe
ngentsnsets
qgtypemgcolsXpress-Optimizer Reference Manual Console and Library Functions 169

XPRSloadqglobal

6

関係する制御Integer
Double例
以下の整数条件での最小化問題です。
int nrow = 1, ncol = 2, nquad = 3;
int mstart[] = {0, 1, 2};dlim
部分整数変数の整数限度や半連続変数、半連続整数変数の下限値がqstypemsstartmscolsdref
EXTRAELEMSEXTRACOLS
EXTRAMIPENTSEXTRAPRESOLVEEXTRAROWSKEEPNROWSSCALING
MATRIXTOLSOSREFTOL

含まれる長さngentsの倍精度型配列（バイナリ変数や整数変数に相当する位値の要素は無視されます）。必要なければNULLとなります
長さnsetsの文字配列で次を含みます
1
SOS1 タイプの集合
2
SOS2 タイプの集合
必要なければNULLとなります
集合の開始を示すmscols，dref配列のオフセットを含む整数型配列。この配列は、長さがnsets+1で、最後の要素は集合nsets+1 の開始位置オフセットを含みます。必要なければNULLとなります
各集合の列を含む長さmsstart[nsets]-1 の整数型配列。必要なければNULLとなります
集合の各要素の参照行要素を含む長さmsstart[nsets]-1 の倍精度型配列。必要なければNULLとなります
追加できる行列要素の数追加できる列の数追加できる離散要素の数
事前分析で追加できる要素の数追加できる行の数
非束縛行の状態
スケーリングのタイプ
行列要素の零許容範囲
参照行要素間の最小ギャップ

MSI 用

6x1 – 2x1 2
2x1 x2 – 2x2 2+ + x1 x2 + 1.9 . x1
Xpress-Optimizer Reference Manual Console and Library Functions 170

XPRSloadqglobal

6

int mrwind[] = {0, 0};
double dmatval[] = {1, 1};
double rhs[] = {1.9};
char qrtype[] = {’L’};
double lbound[] = {0, 0};
double ubound[] = {XPRS_PLUSINFINITY,XPRS_PLUSINFINITY};
double obj[] = {-6, 0};
int mqc1[] = {0, 0, 1};
int mqc2[] = {0, 1, 1};
double dquad[] = {4, -2, 4};
int ngents = 1, nsets = 0;
int mgcols[] = {0};char qgtype[]={'I'};
double *primal, *dual;
primal = malloc(ncol*sizeof(double));dual = malloc(nrow*sizeof(double));...
XPRSloadqglobal(prob, "myprob", ncol, nrow, qrtype, rhs,
NULL, obj, mstart, NULL, mrwind, dmatval, lbound,ubound, nquad, mqc1, mqc2, dquad, ngents, nsets,
qgtype, mgcols, NULL, NULL, NULL, NULL, NULL)

補足
1.
2.

行と列の添字は通常、0からnrow-1、0からncol-1のCの条件に各々従います。
ライブラリヘッダファイルで定義される２つの定数 XPRS_PLUSINFINITYとXPRS_MINUSINFINITYは、プラス・マイナス無限（大・小）を上下界値配列において各々表すのに使われます。

関連事項
XPRSaddsetnames, XPRSloadglobal, XPRSloadlp, XPRSloadqp,
XPRSreadprob.
Xpress-Optimizer Reference Manual Console and Library Functions 171

XPRSloadqp
XPRSloadqp

6

XPRSloadqp

目的
二次問題をOptimizerデータ構造にロードします。この問題では、二次項は制約にはなく、目的関数にあります。

概要
int XPRSloadqp(XPRSprob prob, char *probname, int ncol,
int nrow, char *qrtype, double *rhs, double *range,
double *obj, int *mstart, int *mnel, int *mrwind,double *dmatval, double *dlb, double *dub, int nqtr,
int *mqc1, int *mqc2, double *dqe);

引数
prob

現在の問題

MSI 用問題名を含む200文字以内の文字列
行列の構造列の数
行列の行の数（目的行を含みません）
行タイプを含む長さnrowの文字配列
L制約＜を示しますE
制約＝を示しますG
制約＞を示しますR
レンジ制約を示します
N
非束縛制約を示します
行の右辺係数を含む長さnrowの倍精度型配列
レンジ行のレンジ値を含む長さnrowの倍精度型配列。レンジ制約がなければNULLとなります
目的関数の係数を含む長さncolの倍精度型配列
各列の要素の開始のmrwind，dmatval配列のオフセットを含む整数型配列。この配列は長さncolであるか、mnelがNULLの場合には長さncol+1となります

probnamencol
nrow
qrtype

rhs
range
obj
mstart.
=.

Xpress-Optimizer Reference Manual Console and Library Functions 172

XPRSloadqp

6

関係する制御Integer
Double例
以下の条件での最小化です。
int nrow = 1, ncol = 2, nquad = 3;mnel
各列の非零要素の数を含む長さncolの整数型配列。全ての要素が連

mrwinddmatval
dlb
dub
nqtr
mqc1
mqc2
dqe
EXTRAELEMSEXTRACOLS
EXTRAPRESOLVEEXTRAROWSKEEPNROWS

続で、ncol+1列の要素の開始位置のオフセットをmstart[ncol]が含む場合は、NULLになります。
各列の非零要素の行添字を含む整数型配列。添字が列の昇順に入力される場合、mrwindの長さはmstart[ncol-1]+mnel[ncol-1] であるか、mnelがNULLの場合はmstart[ncol]になります
非零要素値を含む倍精度型の配列。長さはmrwindによります
列の下限を含む長さncolの倍精度型配列列の上限を含む長さncolの倍精度型配列
二次項の数
各二次項における第1変数の列添字を含むサイズnqtrの整数型配列
各二次項における第2変数の列添字を含むサイズnqtrの整数型配列
二次係数を含むサイズnqtrの倍精度型配列追加できる行列要素の数追加できる列の数
事前分析で追加できる要素の数追加できる行の数
非束縛行の状態

MSI 用スケーリングのタイプ
行列要素の零許容範囲

SCALING
MATRIXTOL
6x1 – 2x1 2
2x1 x2 – 2x2 2+ + x1 x2 + 1.9 .

Xpress-Optimizer Reference Manual Console and Library Functions 173

XPRSloadqp

6

int mstart[] = {0, 1, 2};
int mrwind[] = {0, 0};
double dmatval[] = {1, 1};
double rhs[] = {1.9};
char qrtype[] = {’L’};
double lbound[] = {0, 0};
double ubound[] = {XPRS_PLUSINFINITY,XPRS_PLUSINFINITY};
double obj[] = {-6, 0};
int mqc1[] = {0, 0, 1};
int mqc2[] = {0, 1, 1};
double dquad[] = {4, -2, 4};double *primal, *dual;
primal = malloc(ncol*sizeof(double));dual = malloc(nrow*sizeof(double));...
XPRSloadqp(prob, "example", ncol, nrow, qrtype, rhs,
NULL, obj, mstart, NULL, mrwind, dmatval, lbound,ubound, nquad, mqc1, mqc2, dquad)

補足
行と列の添字は通常、0からnrow-1，0からncol-1のCの条件に各々従います。
ライブラリヘッダファイルで定義された２つの定数XPRS_PLUSINFINITYとXPRS_MINUSINFINITYは、上下界値配列で各々プラス・マイナス無限（大・小）を表すために使われます。
3. レンジ配列の値はRタイプの行だけ読み込まれます。他のタイプの行については無視され
ます。
1.
2.

関連事項
XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSreadprob.
Xpress-Optimizer Reference Manual Console and Library Functions 174

XPRSloadsecurevecs
XPRSloadsecurevecs

6

XPRSloadsecurevecs

目的
行列から行や列を事前分析で取り除くのを防ぐために、行や列にマークします。

概要
int XPRSloadsecurevecs(XPRSprob prob, int nr, int nc,
int *mrow, int *mcol);引数
関係する制御なし

例
事前分析において最初の６行と４列を取り除かないようにします。

MSI 用

int mrow[] = {0,1,2,3,4,5};
int mcol[] = {0,1,2,3};...
XPRSreadprob(prob,"myprob","");
XPRSloadsecurevecs(prob,6,4,mrow,mcol);
XPRSminim(prob,"");

関連事項
5.2章 「事前分析のはたらき」
prob
現在の問題
nr
マークされた行の数nc
マークされた列の数
mrow
マークされた行を含む長さnrの整数型配列。必要なければNULLとなりますmcol
マークされた列を含む長さncの整数型配列。必要なければNULLとな
ります
Xpress-Optimizer Reference Manual Console and Library Functions 175

XPRSmaxim / XPRSminim
MAXIM / MINIM
XPRSmaxim / XPRSminim MAXIM / MINIM

6

XPRSmaxim / XPRSminim MAXIM / MINIM

目的
LP最適解の探索を開始します。

概要
int XPRSmaxim(XPRSprob prob, char *flags);
int XPRSminim(XPRSprob prob, char *flags);
MAXIM [-flags]
MINIM [-flags]

引数関係する制御Integerprob
flags

AUTOPERTURB
BARITERLIMITBARMEMORY

現在の問題
XPRSmaxim (MAXIM) か XPRSminim (MINIM)に渡すフラグ。デフォ
ルトは"" あるいは NULLで、その場合、使われるアルゴリズムは制御DEFAULTALGで決められます。引数は以下の通りですbニュートンバリア法を使って解きますp
主シンプレックス法を使ってモデルを解きますd
双対シンプレックス法を使ってモデルを解きますl(Lの小文字)離散要素の不連続性を無視した線形モデルとして解きますg
XPRSglobal(GLOBAL)を呼びだしてグローバルモデルを解きますオプションをいくつか組み合わせて使うことができ、例えば、pgは
主シンプレックス法でLPを解き、続けて整数解探索を実行します
摂動の実行
ニュートンバリア法の最大繰返し数
バリア法で使われるメモリの量

MSI 用コレスキー因子分解で使うアルゴリズム
ニュートンバリア法での 解出力のレベル
実行するスレッドの最大数

BARORDER
BAROUTPUT
BARTHREADS

Xpress-Optimizer Reference Manual Console and Library Functions 176

XPRSmaxim / XPRSminim
MAXIM / MINIM

6

DoubleBIGMMETHODCACHESIZECPUTIME
CRASHCROSSOVER
DEFAULTALG
DENSECOLLIMIT
INVERTFREQ
INVERTMINKEEPBASISLPITERLIMITLPLOGMAXTIMEPRESOLVEPRESOLVEOPSPRICINGALGREFACTORSOLUTIONFILETRACE
BARDUALSTOPBARGAPSTOPBARPRIMALSTOPBARSTEPSTOPBIGMCHOLESKYTOL
ELIMTOL
ETATOL
FEASTOLMARKOWITZTOLMIPABSCUTOFFOPTIMALITYTOLPENALTYPERTURB
PIVOTTOL

Big M法か phaseI/phaseIIかの指定
ニュートンバリア法のキャッシュサイズ（単位はkバイト）
1 CPUタイム
0 経過時間クラッシュのタイプ
ニュートンバリア法のクロスオーバー制御
木探索で使うアルゴリズム
多くの要素が密と考えられる列
反転頻度
反転間の最小反復数
前もってロードされた基底の使用
シンプレックス法の繰返し限度
シンプレックス法の繰返しログの表示頻度
最大許容時間
事前分析程度
事前分析中に実施する操作の指定
プライシングのタイプ
最適基底の再因子分解の指示
解が読み書きされる位置の制御
事前分析中の実行不能性診断の制御
双対実行不能におけるニュートンバリア許容範囲
相対双対ギャップにおけるニュートンバリア許容範囲
主実行不能におけるニュートンバリア許容範囲
ニュートンバリア法の最小ステップサイズ
実行不能ペナルティ
コレスキー分解の零許容範囲
事前分析の消去フェーズのマルコビッツ許容範囲
イータ要素の零許容範囲
RHSの零許容範囲
因子化のマルコビッツ許容範囲
LP 最適化コマンドの後のカットオフ集合(双対のみ)被約費用の許容範囲
最大絶対ペナルティ変数係数
摂動値
ピボット許容範囲

Xpress-Optimizer Reference Manual Console and Library Functions 177

XPRSmaxim / XPRSminim
MAXIM / MINIM

6

MSI 用例 1 (ライブラリ)
XPRSmaxim(prob,"b");ニュートンバリア法を使用して現在の問題を最大化します。

例 2 (コンソール)
MINIM -gニュートンバリア法を使用して現在の問題を最小化し、整数解探索を実施します。

補足
最適化に使用されるアルゴリズムはDEFAULTALG制御で決まります。デフォルトでは、双対シンプレックス法がLPとMIP問題に使用され、ニュートンバリア法がQP問題に使用されます。
2. 双対シンプレックス法は双対実行不能を除去できる二段階アルゴリズムです。
3. 解が見つかった場合、デフォルトでは解ファイルに解が書きこまれます。これにはいくらか時間がかかるので、XPRSmaxim (MAXIM) やXPRSminim (MINIM)を呼ぶ前に
SOLUTIONFILE制御を０に設定し、この機能をはずすよう設定することをお勧めします。
4. (コンソール) 最適化処理をCTRL+L入力で中断したときには、繰返しは最初の「安全な」時点まで実施して終了し、そのときの解が解ファイルに保存されます。
1.

関連事項
XPRSglobal (GLOBAL), XPRSrecurse (RECURSE), XPRSreadbasis(READBASIS), XPRSgoal (GOAL), 4章 「アルゴリズムの性能」
PPFACTOR
部分プライシング候補リストサイズパラメータ
RELPIVOTTOL
相対ピボット許容範囲
Xpress-Optimizer Reference Manual Console and Library Functions 178

XPRSpivot
XPRSpivot

6

XPRSpivot

目的
変数inを基底に入れ、outを取り除くことによって、シンプレックスピボットを実行します。

概要
int XPRSpivot(XPRSprob prob, int in, int out);

引数
エラー値
関係する制御Double例
７番目の変数を基底に入れ、５番目の変数を除去します。
XPRSpivot(prob,6,4)

補足
行の添字は0からROWS-1の範囲で、列の添字はROWS+SPAREROWSからROWS+SPAREROWS+COLS1の範囲です。

関連事項
XPRSgetpivotorder, XPRSgetpivots.
prob
現在の問題
in
基底に入れる行，列の添字out
基底から出す行，列の添字425
inは無効です（範囲外もしくは既に基底）

MSI 用426
PIVOTTOLRELPIVOTTOL

outは無効です（範囲外もしくは不適格。例えば、基底でない、零ピ
ボット等）
ピボット許容範囲
相対ピボット許容範囲

Xpress-Optimizer Reference Manual Console and Library Functions 179

QUIT
QUIT

6

QUIT

目的
OSに零の終了コードを返し、コンソールOptimizerを終了します。

概要
QUIT

引数
なし

関係する制御なし

例 (コンソール)
コマンドは単純で次のように呼ばれます。
QUIT

補足
致命的なエラーのときにはホストOSで使用する非零終了コードを返します。９章「エラーメッセージ＆リターンコード」をお読みください。
2. 最終的な解の状態を表す終了コードを返したい場合は、STOPコマンドを代わりにお使い下
さい。
1.

関連事項
STOP, XPRSsave (SAVE).
Xpress-Optimizer Reference Manual Console and Library Functions 180

XPRSrange
RANGE
XPRSrange RANGE

6

XPRSrange RANGE

目的問題のレンジ情報を計算し、ファイルproblem_name.rngに保存します。

概要
int XPRSrange(XPRSprob prob);
RANGE

引数
関係する制御なし

例 1 (ライブラリ)
最適化に続いてレンジ情報を計算し、解をファイルleonor.rrtに書き出します。
XPRSreadprob(prob,"leonor","");XPRSmaxim(prob,"");
XPRSrange(prob);
XPRSwriteprtrange(prob);

MSI 用例 2 (コンソール)
出力をファイルの代わりに画面に送る以外は、コンソールと同じです。
READPROB leonor
MAXIM
RANGE
PRINTRANGE

補足
問題の最適基底解が使える状態でなくてはなりません。つまり、XPRSmaxim(MAXIM) ，
XPRSminim (MINIM)を呼んだ後でなくてはなりません（またはニュートンバリア法でクロスオーバーを用いた後）
2. XPRSrange (RANGE)により計算して得られた情報によって、問題の細かい事後分析ができます。特に右辺の値を動かしても最適基底の変わらない範囲、シャドウプライスがそのま
まの範囲、変化を制限しているアクティビティを知ることができます。
prob
現在の問題
1.

Xpress-Optimizer Reference Manual Console and Library Functions 181

XPRSrange
RANGE

6

計算された値を得る関数 XPRSgetcolrange，XPRSgetrowrange， XPRSwriteprtrange(WRITEPRTRANGE) そして/または XPRSwriterange (WRITERANGE) をご覧下さい。
3. MIP問題のレンジはできません。離散要素はXPRSfixglobal (FIXGLOBAL)を最初に使って固定され、残されたLPが解かれます。XPRSfixglobal (FIXGLOBAL)をご覧下さい。

関連事項
XPRSgetcolrange, XPRSgetrowrange, XPRSwriteprtrange(WRITEPRTRANGE), XPRSwriterange (WRITERANGE).
Xpress-Optimizer Reference Manual Console and Library Functions 182

XPRSreadbasis
READBASIS
XPRSreadbasis READBASIS

6

XPRSreadbasis READBASIS

目的
ファイルから、前に保存した基底を読みこむようにOptimizerに指示します。

概要
int XPRSreadbasis(XPRSprob prob, char *filename,char *flags);
READBASIS [-flags] [filename]

引数
関係する制御なし

例 1 (ライブラリ)
現在の問題で更によい基底が利用できるのであれば、Optimizerの入力は次のようになります。
XPRSreadprob(prob,"filename","");
XPRSreadbasis(prob,"","");XPRSmaxim(prob,"g");行列ファイルを読み、更によい開始となる基底を入力してMIPを最大化します。

例 2 (コンソール)
コンソールユーザの場合、同じコマンド集合で次のようになります。

MSI 用READPROBREADBASIS
MAXIM -gprob
filename

現在の問題
基底が読まれるファイル名を含む200文字以内の文字列。省略時はproblem_nameに拡張子.bssをつけた形がデフォルトです
XPRSreadbasis (READBASIS) に引き渡すフラグt
基底のコンパクト形式の入力
基底の行と列の数が現在の行と列の数と一致するかだけがチェ
ックされますflags

Xpress-Optimizer Reference Manual Console and Library Functions 183

XPRSreadbasis
READBASIS

6

補足
行列が事前分析済みでも、XPRSreadbasis (READBASIS)は、原問題の基底を読みこみます。
Optimizerは基底を読みこみ、有効であるかチェックをし、矛盾があればエラーメッセージを表示します。

関連事項
XPRSloadbasis, XPRSwritebasis (WRITEBASIS).
Xpress-Optimizer Reference Manual Console and Library Functions 184

XPRSreaddirs
READDIRS
XPRSreaddir s READDIRS

6

XPRSreaddirs READDIRS

目的
整数解探索のためのディレクティブファイルを読みます。

概要
int XPRSreaddirs(XPRSprob prob, char *filename);
READDIRS [filename]

引数
関係する制御Double例 1 (ライブラリ)問題steveで使うためにファイルsue.dirから指示を読みます。
XPRSreadprob(prob,"steve","");
XPRSreaddirs(prob,"sue");
XPRSminim(prob,"g");例 2 (コンソール)
READPROBREADDIRSMINIM -g

これは、コンソールでの最も普通の形です。現在の問題名に拡張子.dirが付いたディレクティブファイルを読みます。

補足
1.

モデルを事前分析した後では指示を読むことはできません。PRESOLVEが0に設定されていて事前分析ができないのでない限り、このコマンドはXPRSminim (MINIM) や

MSI 用XPRSmaxim (MAXIM)の前に実施されなくてはなりません。
prob
現在の問題
filename
指示が読まれるファイル名を含む200文字以内の文字列。省略(またはNULL)時、デフォルトではproblem_nameに拡張子.dirをつけたものになりますPSEUDOCOST
ノード劣化推定量のデフォルト擬コスト
Xpress-Optimizer Reference Manual Console and Library Functions 185

XPRSreaddirs
READDIRS

2.

3.

4.

5.

6.

6

優先順位，分枝方向，擬コスト，モデルカットに関係する指示が得られます。各離散要素には優先順位が付いています。値が小さい方が、要素は分枝に使用される可能性が高く、値が大きければ低くなります。デフォルトでは、全離散要素の優先順位値は500で、この値はディレクティブファイルの優先順位入力で変更できます。一般に、要素の優先度をモ
デルでの重要性に合わせておくことが有効です。1000を超える順位値は無効で無視されます。ディレクティブファイルの詳細については、付録Ａ．５「ディレクティブファイル(.dir)」をご覧下さい。
デフォルトでは、XPRSglobal (GLOBAL)は、各ノードから分枝要素を押し上げたものと押し下げたもののうち、よりよい整数解を出すと推定された方を探索します。ディレクティブファイルにUPまたはDNを指定すると、XPRSglobal (GLOBAL)は指定された要素を先に押し上げ／下げて探索します。
擬コストは要素を押し上げる、あるいは押し下げるときの単位費用の推定値です。デフォ
ルトでは、XPRSglobal (GLOBAL)は双対変数値から推定値を計算し、PSEUDOCOST制御で設定されたデフォルト擬コストに加えます。デフォルト擬コストは、ディレクティブフ
ァイルのPUやPD要素で置きかえられます。
モデルカットが使用される場合、指定された制約条件は行列から除去されOptimizerのカッ
トプールに加えられます。整数解探索のあるノードのLP解により違反されるときにだけ、行列に返されます。
ディレクティブファイルをマニュアルで作成する場合、ワイルドカードが複数のベクトルを同時に指定できます。例えば、PR x1* 2により、優先度が２で名前がx1 から始まる
離散要素が与えられます。

関連事項
XPRSloaddirs, 付録 A.5「ディレクティブファイル(.dir)」
Xpress-Optimizer Reference Manual Console and Library Functions 186

XPRSreadprob
READPROB
XPRSreadprob READPROB

6

XPRSreadprob READPROB

目的
ファイルから(X)MPS形式あるいはLP形式の行列を読みます。

概要
int XPRSreadprob(XPRSprob prob, char *probname,char *flags);
READPROB [-flags] [probname]

MSI 用引数
関係する制御Integer
prob
probname

flags

EXTRAELEMSEXTRACOLS
EXTRAMIPENTSEXTRAPRESOLVEEXTRAROWSKEEPNROWSMPSECHOMPSERRIGNOREMPSFORMATMPSNAMELENGTHSCALING

現在の問題
probname ファイル名で問題が読み込まれる200文字以内の文字列。
省略時は(コンソールユーザのみ)、デフォルトでproblem_name に拡張子がついたものになります。以下を参照ください
引き渡すフラグlprobname.lp だけを探索しますb
mpモデルバイナリインタフェースファイル形式の問題を読みこみます。mpモデルのBIFGENERATEコマンドで生成されたファ
イルprobname.bifとprobname.solが必要です
追加できる行列の要素の数追加できる列の数追加できる離散要素の数
事前分析において追加できる要素の数追加できる行の数
非束縛行の状態
MPSコメントのエコーの設定無視する小さなエラーの数
MPSファイルの形式の指定
最大の名前文字長さ
スケーリングのタイプ

Xpress-Optimizer Reference Manual Console and Library Functions 187

XPRSreadprob
READPROB

6

DoubleString例 1 (ライブラリ)
XPRSreadprob(prob,"myprob","");
myprob.mat， myprob.mps，(LP 形式の) myprob.lpで最初に見つかったファイルからMPS形式の行列をOptimizerに読みこむように指示をします。

例 2 (コンソール)
READPROB -l

OptimizerにLP 形式の行列をファイルproblem_name.lpから読みこむように指示をします。

補足
フラグがない場合、.mat, .mps, .lpの順番でファイルタイプを探索します。拡張子
が.lp(つまりLPファイル)でない場合は、行列ファイルは、 XMPS形式 あるいは MPS形式と推定されます。
2. probnameが指定されたときは、問題名は拡張子を無視してprobnameにされします。
3. 文字パラメータMPSOBJNAMEが設定されていない限り、XPRSreadprob (READPROB)は行列で最初のNタイプの行を目的関数として採用します。この場合、探された目的関数行
はMPSOBJNAMEによって名付けられます。同様に、空白でない場合、文字列パラメータMPSRHSNAME, MPSBOUNDNAME, MPSRANGENAMEは、右辺，上下界値，レンジ集合を指1.

MSI 用定します。例えば次の通りです。
MPSOBJNAME=’Cost ’ ! ８文字全部を書く必要があることにご注意下さい。
MPSRHSNAME=’RHS 1’ !
READPROB

目的関数以外のNタイプの行の扱い方は、KEEPNROWS制御の設定によります。KEEPNROWS
が1の場合、行や要素はメモリに取っておきます。0の場合、行は保持されますが、要素は取り除かれます。-1の場合、行は完全に削除されます。最適化の前にPRESOLVEに0を設定して事前分析を無効にしておかない限り、このようなNタイプの行を保持することの影
響は小さいと思われます。
MATRIXTOLSOSREFTOLMPSBOUNDNAMEMPSOBJNAMEMPSRANGENAME
MPSRHSNAME

行列要素の零許容範囲
参照行要素の最小ギャップ
アクティブ上下界値名
目的関数行の名前
範囲の名前
右辺の名前

Xpress-Optimizer Reference Manual Console and Library Functions 188

XPRSreadprob
READPROB

6

Optimizerは行列ファイルが形式的に問題がないかをチェックし、エラーが見つかればエラ
ーメッセージを出します。Optimizerは問題を読んでチェックが終わると、問題の概略を示します。
5. デフォルトでは、MPSFORMAT制御に-1が設定されると、XPRSreadprob(READPROB)はMPS
ファイルがフリー形式か固定形式であるか自動的に決定します。MPSFORMATに0が設定された場合は、固定形式とされ、1に設定された場合は、フリー形式とされます。フリー形式のMPSファイルのフィールドは。1つ以上のブランクで区切られます。キーワードNAME,
ROWS, COLUMNS,QUADOBJ, SETS, RHS, RANGES,BOUNDS は、列で始まり、ベクトル名はブランクを含みません。特殊順序集合が参照行と指定される場合、その名前は行名と同じでないかもしれません。MPSFORMATが0に設定されない限り、スペースを含む数値が(例えばマイナス符号の後)、正しく読めないことに注意してください。
6. 問題を自動的にスケーリングしない場合は、XPRSreadprob (READPROB)コマンドの前にパラメータSCALINGを0に設定してください。
7. 長いMPSベクトル名は、MPSファイル，LPファイル，ディレクティブファイル，基底フ
ァイルではサポートされています。MPSNAMELENGTH制御は、MPSベクトル名の最大長を指定し、ファイルが読みこみされる前に設定されなくてはなりません。内部では、最小の8の倍数で丸められ、64を超えません。
4.

関連事項
XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp.
Xpress-Optimizer Reference Manual Console and Library Functions 189

XPRSrecurse
RECURSEXPRSrecurse RECURSE

6

XPRSrecurse RECURSE

MSI 用目的
ある種の非線形計画問題（NLP）を解くための、逐次線形計画法や反復を実行します。

概要
int XPRSrecurse(XPRSprob prob);
RECURSE

引数
関係する制御Integer
Double例 1 (ライブラリ)

反復を実行する前に、最大ループ回数を10回に設定し、最後に収束しなかった項の数を返します。
int recconverge;..
XPRSreadprob(prob,"myprob","");XPRSmaxim(prob,"");XPRSsetintcontrol(prob,XPRS_RECMAXPASSES,10);
XPRSrecurse(prob);
XPRSgetintattrib(prob,XPRS_RECCONVERGE,&recconverge);
printf("RECCONVERGE = %d\n", recconverge);
prob
現在の問題
CPUTIME
1 はCPU時間 0は経過時間
RECMAXPASSES
最大反復回数RECEXPAND
BX係数とSB上下界値の増加割合
RECSHRINK
BX係数とSB上下界値の減少割合
RECSTEPLENGTH
反復ステップの長さ
RECSTOP
反復収束パラメータ
Xpress-Optimizer Reference Manual Console and Library Functions 190

XPRSrecurse
RECURSE6

例 2 (コンソール)
KEEPNROWS = 1
READPROBMINIM
RECSHRINK = 0.8
RECEXPAND = 1.6
RECURSE
QUIT

補足
事前分析機能が反復と使われると、行列は各反復の最初に事前分析され、最後に事後分析されます。事前分析が再最適化時間に比べて長ければ、事前分析をしないことをお勧めします。ニュートンバリア法を使う場合は、XPRSrecurse(RECURSE)を使う前にクロスオーバーされな
くてはなりません。

関連事項
XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Console and Library Functions 191

XPRSrestore

MSI 用RESTOREXPRSrestore RESTORE

6

XPRSrestore RESTORE

目的
Optimizerのデータ構造をXPRSsave(SAVE)で作成したファイルから保存します。最適化は、そのファイルが作成された時点から再開します。

概要
int XPRSrestore(XPRSprob prob, char *probname);
RESTORE

引数
関係する制御なし

例 1 (ライブラリ)
XPRSrestore(prob,"")例 2 (コンソール)
RESTORE

補足
このルーチンは、以前にXPRSsave (SAVE)で作成したファイル problem_name.svfから
データ構造を戻すのに使います。ファイルproblem_name.solも必要ですが、整数解探索の最適化を再開する場合、ファイルproblem_name.glbとand problem_name.ctpも必要となります。.svfファイルは、それらを作成するのに使われるOptimizerのリリース版用に特化されています。それらを作る際に使われたのと同じリリース版Optimizerでのみ読みこみ可能です。
2. (コンソール) XPRSsave (SAVE) と XPRSrestore (RESTORE) の主な使い道は、長い最適化の実行をCTRL+Cで中断した際、Optimizerの状態を保存しておいて、後でその時点から再開できるようにすることです。問題の最適状態を保存しておき、問題にXPRSalter(ALTER)を実行し、保存された状態から最適化を再開するという方法もあります。
prob
現在の問題
probname
問題名を含む200文字以内の文字列
1.

Xpress-Optimizer Reference Manual Console and Library Functions 192

XPRSrestore
RESTORE

6

関連事項
XPRSalter (ALTER), XPRSsave (SAVE).
Xpress-Optimizer Reference Manual Console and Library Functions 193

XPRSsave
SAVE
XPRSsave SAVE

6

XPRSsave SAVE

目的
現在のデータ構造、つまり行列や、ファイルに設定されている制御や問題特性を保存して、実行を終了します。最適化は後で再開できます。

概要
int XPRSsave(XPRSprob prob);
SAVE

MSI 用引数
関係する制御なし

例 1 (ライブラリ)
XPRSsave(prob);
例 2 (コンソール)
SAVE

補足
データ構造はファイルproblem_name.svf. に書かれます。最適化は、XPRSrestore(RESTORE)によりデータ構造か戻されたときと同じポイントから再開できます。このような状況では、ファイルproblem_name.solと、分枝限定法が進行中であれば、整数ファイル
problem_name.glbと problem_name.ctpも必要とされます。これらのファイルは、
XPRSsave (SAVE)の実行後には存在しますが、その後の最適化で変更されます。したがって、
XPRSsave (SAVE)を呼びだした後は、最適化を呼びださない法がよいかもしれません。作成
される.svfファイルは、作成するのに使われたリリース版のOptimizerにより作成されます。
それらを作る際に使われたのと同じリリース版のOptimizerを使ってのみ読み込めます。

関連事項
XPRSrestore (RESTORE).
prob
現在の問題
Xpress-Optimizer Reference Manual Console and Library Functions 194

XPRSscaleSCALE
XPRSs cale SCALE

6

XPRSscale SCALE

目的
現在の行列を再スケールします。

概要
int XPRSscale(XPRSprob prob, int *mrscal, int *mcscal);
SCALE

引数
関係する制御Integer
例 1 (ライブラリ)
XPRSreadprob(prob,"jovial","");XPRSalter(prob,"serious");
XPRSscale(prob,NULL,NULL);
XPRSminim(prob,"");MPSファイルjovial.matを読みこみ、ファイルserious.altの指示によって変更し、行列を再スケールして最小目的関数値を求めます。

例 2 (コンソール)
コンソールで同様のことを実行するコマンドは次の通りです。
READPROB jovial
ALTER serious
SCALE
MINIM
prob

現在の問題

MSI 用行をスケーリングする2の幅を含む長さROWSの整数型配列。必要なければNULLとなります
列をスケーリングする2の幅を含む長さCOLSの整数型配列。必要なければNULLとなります
スケーリングのタイプ

mrscalmcscalSCALING

Xpress-Optimizer Reference Manual Console and Library Functions 195

XPRSscale
SCALE

6

補足
1.

mrscalとmcscalが共にNULLでない場合、行列をスケールするのに使用されます。そうでなければ、行列はSCALING制御にしたがってスケールされます。現在の行列が
XPRSalter (ALTER)，XPRSchgmcoef, XPRSaddrowsの様なルーチンを呼びだして変更済みの場合、このルーチンは有用です。
2. 現在の行列が事前分析済みの場合、XPRSscale (SCALE)を呼びだせません。

関連事項
XPRSalter (ALTER), XPRSreadprob (READPROB).
Xpress-Optimizer Reference Manual Console and Library Functions 196

XPRSsetcbbarlog
XPRSsetcbbarlog

6

XPRSsetcbbarlog

目的
内点法における各反復において呼ばれるバリアーログコールバック関数を宣言します。

概要
int XPRSsetcbbarlog(XPRSprob prob,
int (XPRS_CC *fubl)(XPRSprob my_prob, void *my_object),void *object);

引数
関係する制御なし

例アルゴリズムの各反復ごと画面に1行出力する単純な例です。
XPRSsetcbbarlog(prob,barLog,NULL);
XPRSmaxim(prob,"b");このコールバック関数は以下に似ています。
int XPRS_CC barLog(XPRSprob prob, void *object){
printf("Next barrier iteration\n");
}
prob
現在の問題
fubl
コールバック関数です。２つの引数my_probとmy_objectがあり、整数の返り値を持ちます。fublにより返される値が零でない場合、

my_prob
my_object

求解は中断されます。この関数は、バリアの繰返しの度に呼ばれます
コールバック関数fublに渡される問題
XPRSsetcbbarlogでコールバックを設定したとき、オブジェクトとして渡されるユーザ定義オブジェクト

MSI 用

コールバック関数fublに渡すユーザ定義オブジェクト

objectXpress-Optimizer Reference Manual Console and Library Functions 197

XPRSsetcbbarlog

6補足
コールバック関数が零でない値を返した場合、Optimizerは中断します。

関連事項
XPRSsetcbgloballog, XPRSsetcblplog, XPRSsetcbmessage.
Xpress-Optimizer Reference Manual Console and Library Functions 198

XPRSsetcbchgbranch
XPRSsetcbchgbranch

6

XPRSsetcbchgbranch

目的
MIP探索中に新しく分枝変数が設定あるいは選択される度に呼ばれる分枝変数コールバック関
数を宣言します。

概要
int XPRSsetcbchgbranch(XPRSprob prob,
void (XPRS_CC *fucb)(XPRSprob my_prob, void *my_object,
int *entity, int *up, double *estdeg), void *object);

引数
関係する制御
なし
prob
fucb

現在の問題
５つの引数my_prob，my_object, entity，up，estdegを持ち、返り値がないコールバック関数です。この関数は新しく分枝変数や集合選択される度に呼ばれます
コールバック関数fucb に渡される問題
XPRSsetcbchgbranchでコールバックを設定したとき、object として渡されるユーザ定義オブジェクト
分枝方向を示す変数や集合を示すポインタ。通常、離散変数は列添字、例えば0,1,…(COLS-1)や集合添字、例えば0,1,…(SEETS-1)
により区別されます
entityが変数の場合、最初に上方へ分枝をするのであれば1、そうでなければ0とします。entityが設定されている場合、最初に上方へ分枝するのであれば3、そうでなければ2とします
ノードでの推定劣化量
コールバック関数fucbに渡されるユーザ定義オブジェクト

my_prob
my_object
entityup

estdegobjectXpress-Optimizer Reference Manual Console and Library Functions 199

XPRSsetcbchgbranch6

例
整数探索において最も違反が大きなバイナリ整数に分枝ルールを適用します。
typedef struct {double* soln;
char* type;
double tol;
int cols;

MSI 用} solutionData;...
solutionData nodeData;...
XPRSminim(prob,"");XPRSsetintcontrol(prob,XPRS_MIPLOG,3);
XPRSsetintcontrol(prob,XPRS_CUTSTRATEGY,0);/* setup data */XPRSgetintattrib(prob,XPRS_COLS,&(nodeData.cols));
XPRSgetdblcontrol(prob,XPRS_MATRIXTOL,&(nodeData.tol));nodeData.soln = (double*)malloc(sizeof(double)*nodeData.cols);
nodeData.type = (char*)malloc(sizeof(char)*nodeData.cols);
XPRSgetcoltype(prob,nodeData.type,0,nodeData.cols-1);
XPRSsetcbchgbranch(prob,varSelection,&nodeData);
XPRSglobal(prob);

コールバック関数は次と似ています。
void XPRS_CC varSelection(XPRSprob prob, void* vdata,
int *iColumn, int *iUp, double *dEstimate ){double dDist, dUpDist, dDownDist, dGreatestDist=0;
int iCol;solutionData *nodeData = (solutionData*) vdata;
XPRSgetpresolvesol(prob, (*nodeData).soln, NULL, NULL,
NULL);
for(iCol=0;iCol<(*nodeData).cols;iCol++)if((*nodeData).type[iCol]=='I' ||(*nodeData).type[iCol]=='B'){
Xpress-Optimizer Reference Manual Console and Library Functions 200

XPRSsetcbchgbranch

6

dUpDist=ceil((*nodeData).soln[iCol]) (*nodeData).soln[iCol];dDownDist = (*nodeData).soln[iCol] floor((*nodeData).soln[iCol]);dDist = (dUpDist>dDownDist)?dUpDist:dDownDist;if(dDownDist > (*nodeData).tol &&dUpDist > (*nodeData).tol)if( dDist > dGreatestDist ){*iColumn = iCol;
dGreatestDist = dDist;
}
}
}

補足
引数は分枝変数，分枝方向，推定劣化量のデフォルト値を初期値として含みます。それらが変更されると、Optimizerは新しい値を使います。変更なければデフォルトのまま使用されます。

関連事項
XPRSsetcbchgnode, XPRSsetcboptnode, XPRSsetcbinfnode,MSI 用XPRSsetcbintsol, XPRSsetcbnodecutoff, XPRSsetcbprenode.
Xpress-Optimizer Reference Manual Console and Library Functions 201

XPRSsetcbchgnode
XPRSsetcbchgnode

6

XPRSsetcbchgnode

目的
ノード選択コールバック関数を宣言します。この関数は、MIP探索中に、新しいノードを選択するためにコードを遡る度に呼ばれます。

概要
int XPRSsetcbchgnode(XPRSprob prob,
void (XPRS_CC *fusn)(XPRSprob my_prob, void *my_object,
int *nodnum), void *object);

引数
関係する制御Integer
例1

整数解探索中、新しいノードが選ばれる度にノード番号を出力します。
XPRSminim(prob,"");XPRSsetintcontrol(prob,XPRS_MIPLOG,3);
XPRSsetintcontrol(prob,XPRS_NODESELECTION,2);
XPRSsetcbchgnode(prob,nodeSelection,NULL);XPRSglobal(prob);
prob
現在の問題
fusn
３つの引数my_prob，my_object，nodnumを持ち、返り値のない

コールバック関数です。この関数は新しいノードが選択される度に呼ばれます
コールバック関数fusn に渡される問題
XPRSsetcbchgnodeでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
Optimizerにより選ばれたノードnodnumの数を示すポインタ。この引数により示される値を変えると、選ばれたノードがこの関数に基づいて変更されます
コールバック関数fusnに渡されるユーザ定義オブジェクト
ノード選択制御

my_prob
my_objectnodnumobjectNODESELECTION

Xpress-Optimizer Reference Manual Console and Library Functions 202

XPRSsetcbchgnode6

このコールバック関数は以下と同様です。
XPRS_CC void nodeSelection(XPRSprob prob, void *object,
int *Node){printf("Node number %d\n", *Node);}
例2
Xpress-MP CD-ROM の例 depthfirst.c をご覧下さい。

関連事項
XPRSsetcboptnode, XPRSsetcbinfnode, XPRSsetcbintsol,

MSI 用XPRSsetcbnodecutoff, XPRSsetcbchgbranch, XPRSsetcbprenode.
Xpress-Optimizer Reference Manual Console and Library Functions 203

XPRSsetcbcutlog
XPRSsetcbcutlog

6

XPRSsetcbcutlog

目的
カットログが出力される度に呼ばれるカットログコールバック関数を宣言します。

概要
int XPRSsetcbcutlog(XPRSprob prob,
int (XPRS_CC *fucl)(XPRSprob my_prob, void *my_object),void *object);

引数
関係する制御なし

関連事項
XPRSsetcbcutmgr, XPRSsetcbfreecutmgr, XPRSsetcbinitcutmgr.
prob
現在の問題
fucl
２つの引数my_probとmy_objectを持ち、整数の返り値があるコー

ルバック関数
コールバック関数fuc1に渡される問題
XPRSsetcbcutlogでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
コールバック関数fuc1に引き渡されるユーザ定義オブジェクト

my_prob
my_object
objectXpress-Optimizer Reference Manual Console and Library Functions 204

XPRSsetcbcutmgr
XPRSsetcbcutmgr

6

XPRSsetcbcutmgr

目的
分枝限定探索の各ノードで呼ばれるユーザ定義カットマネージャルーチンを宣言します。

概要
int XPRSsetcbcutmgr(XPRSprob prob,
int (XPRS_CC *fcme)(XPRSprob my_prob, void *my_object),void *object);

引数
関係する制御Integer

補足
最も効果的に実行するために、値がわかっているなら、スペース割り当て制御EXTRAROWS，
EXTRAELEMS，CPMAXELEMS，CPMAXCUTSをユーザにより指定するべきです。不明ならば、自動的にリサイズしますが、スペースはユーザ設定で必要な分以上に大きく割り当てられてしまいます。
2. カットマネージャルーチンは、戻り値が0になるまで、各ノードで繰り返し呼ばれます。
カットが追加、削除されると、部分問題は自動的に最適化されます。
prob
現在の問題
fcme
２つの引数my_probとmy_object があり、整数返り値があるコールバック関数。この関数は分枝限定探索の各ノードで呼ばれます1.

MSI 用

コールバック関数fcmeに渡される問題
XPRSsetcbcutmgrでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
コールバック関数fcmeに渡されるユーザ定義オブジェクト
アクティブでないユーザ作成カットの除去
カットプール内のカット最大数
カットプール内の非零要素の最大数追加できる行列要素数
追加できる行数

my_prob
my_object
object
CPKEEPALLCUTSCPMAXCUTS
CPMAXELEMSEXTRAELEMSEXTRAROWS

Xpress-Optimizer Reference Manual Console and Library Functions 205

XPRSsetcbcutmgr

3.

6

Xpresss-Optimizerではノードに追加されたカットは、子ノードで必ず自動的に復元されます。このために、全てのカットはカットプールに保存され、Optimizerはノードごとにカッ
トプールからカットを復元します

関連事項
XPRSsetcbcutlog, XPRSsetcbfreecutmgr, XPRSsetcbinitcutmgr.
Xpress-Optimizer Reference Manual Console and Library Functions 206

XPRSsetcbestimate
XPRSsetcbestimate

6

XPRSsetcbestimate

目的
推定コールバック関数を宣言します。定義されると、ユーザの離散要素の分枝から推定劣化量を決定するために、分枝限定木のノードごとで呼ばれます。

概要
void XPRSsetcbestimate(XPRSprob prob,
int (XPRS_CC *fbe)(XPRSprob my_prob, void *my_object,
int *iglsel, int *iprio, double *degbest,
double *degworst, double *curval, int *ifupx,
int *nglinf, double *degsum, int *nbr), void *object);

引数
prob
fbe

my_prob
my_objectiglseliprio
degbestdegworst
curval
ifupx
nglinf

現在の問題
７つの引数my_prob，my_object，iglsel，iprio，degbest，
degworst，curval，ifupx，nglinf，degsum，nbrを持ち、整数返り値があるコールバック関数。この関数は分枝限定探索の各ノードで呼ばれます
コールバック関数fbeに渡される問題
XPRSsetcbestimateでコールバックを設定したとき、object として渡されるユーザ定義オブジェクト
選択されたユーザ離散要素(非負であること)選ばれたユーザ離散要素の優先度
望ましい方向で選ばれたユーザ要素の分枝から得られる推定劣化量
最悪の方向で選ばれたユーザ要素の分枝から得られる推定劣化量
ユーザ離散要素の現在値
ユーザ離散要素(0,…,nbr-1)の望ましい分枝
実行不可能なユーザ離散要素の数

MSI 用全てのユーザ要素を満足する推定劣化量の和
分枝の数

degsumnbr

Xpress-Optimizer Reference Manual Console and Library Functions 207

XPRSsetcbestimate

6

関係する制御なし

関連事項
XPRSbranchcut, XPRSsetcbsepnode, XPRSstorecuts.
objectコールバック関数fbeに渡されるユーザ定義オブジェクト
Xpress-Optimizer Reference Manual Console and Library Functions 208

XPRSsetcbfreecutmgr
XPRSsetcbfreecutmgr

6

XPRSsetcbfreecutmgr

目的
分枝限定探索の終わりに呼ばれるユーザ終了ルーチンを宣言します。

概要
int XPRSsetcbfreecutmgr(XPRSprob prob,
int (XPRS_CC *fcms)(XPRSprob my_prob, void *my_object),void *object);

引数
関係する制御なし

関連事項
XPRSsetcbcutlog, XPRSsetcbcutmgr, XPRSsetcbinitcutmgr.
prob
現在の問題
fcms
２つの引数my_probとmy_objectを持ち、整数返り値があるコール

バック関数
コールバック関数fcmsに渡される問題
XPRSsetcbfreecutmgrでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
コールバック関数fcmsに渡されるユーザ定義オブジェクト

my_prob
my_object
objectXpress-Optimizer Reference Manual Console and Library Functions 209

XPRSsetcbgloballog
XPRSsetcbgloballog

6

XPRSsetcbgloballog

目的
離散ログが出力される度に呼ばれる離散ログコールバック関数を宣言します。

概要
int XPRSsetcbgloballog(XPRSprob prob,
int (XPRS_CC *fugl)(XPRSprob my_prob, void *my_object),void *object);

引数
関係する制御IntegerMSI 用例1
整数解探索の各ノードで、ノード番号とその深さを出力します。
XPRSsetintcontrol(prob, XPRS_MIPLOG, 3);
XPRSsetcbgloballog(prob, globalLog, NULL);
XPRSminim(prob,"g");このコールバック関数は以下と同様です。
XPRS_CC int globalLog(XPRSprob prob, void *data){
int nodes, nodedepth;
XPRSgetintattrib(prob, XPRS_NODEDEPTH, &nodedepth);
prob
現在の問題
fugl
２つの引数my_probとmy_objectを持ち、整数返り値があるコールバック関数。この関数はMIPLOG制御により決められた離散ログが出力されると呼びだされます
コールバック関数fuglに渡される問題
XPRSsetcbgloballogでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
コールバック関数fuglに渡されるユーザ定義オブジェクト
整数印刷フラグ

my_prob
my_object
objectMIPLOG

Xpress-Optimizer Reference Manual Console and Library Functions 210

XPRSsetcbgloballog

6

XPRSgetintattrib(prob, XPRS_NODES, &nodes);printf("Node %d with depth %d has just beenprocessed\n", nodes, nodedepth);
return 0;}

例2
Xpresss-MP CD-ROMの例 depthfirst.c をご覧下さい。

補足
コールバック関数が零でない値を返した場合、整数解探索は中断されます。コールバック関数が零でない値を返した場合、整数解探索は中断されます。

関連事項
XPRSsetcbbarlog, XPRSsetcblplog, XPRSsetcbmessage.
Xpress-Optimizer Reference Manual Console and Library Functions 211

XPRSsetcbinfnode
XPRSsetcbinfnode

6

XPRSsetcbinfnode

目的
分枝限定探索中に現在のノードが実行不能と分かった後で呼ばれるユーザ最適ノードコールバ
ック関数を宣言します。

概要
int XPRSsetcbinfnode(XPRSprob prob,
void (XPRS_CC *fuin)(XPRSprob my_prob, void *my_object),void *object);

引数
関係する制御IntegerMSI 用例1
整数探索中に実行不能ノードが見つかるとユーザに通知します。
XPRSsetintcontrol(prob,XPRS_NODESELECTION,2);
XPRSsetcbinfnode(prob,nodeInfeasible,NULL);
XPRSmaxim(prob,"g");このコールバック関数は以下と同様です。
void XPRS_CC nodeInfeasible(XPRSprob prob, void *obj){
int node;
XPRSgetintattrib(prob,XPRS_NODES,&node);
printf("Node %d infeasible\n",node);
prob
現在の問題
fuin
２つの引数my_prob とmy_objectを持ち、返り値がないコールバック関数。この関数は現在のノードが実行不能と分かった後に呼ばれます
コールバック関数fuinに渡される問題
XPRSsetcbinfnodeでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
コールバック関数fuinに渡されるユーザ定義オブジェクト
ノード選択制御

my_prob
my_object
objectNODESELECTION

Xpress-Optimizer Reference Manual Console and Library Functions 212

XPRSsetcbinfnode

6

}

例2
Xpresss-MP CD-ROM の例 depthfirst.cをご覧下さい。

関連事項
XPRSsetcbchgnode, XPRSsetcboptnode, XPRSsetcbintsol,
XPRSsetcbnodecutoff, XPRSsetcbchgbranch, XPRSsetcbprenode.
Xpress-Optimizer Reference Manual Console and Library Functions 213

XPRSsetcbinitcutmgr

6

XPRSsetcbinitcutmgr

XPRSsetcbinitcutmgr

目的
カットマネージャーを初期化するために呼ばれるユーザコールバックルーチンを宣言します。

概要
int XPRSsetcbinitcutmgr(XPRSprob prob,
int (XPRS_CC *fcmi)(XPRSprob my_prob, void *my_object),void *object);

引数
関係する制御なし

関連事項
XPRSsetcbcutlog, XPRSsetcbcutmgr, XPRSsetcbfreecutmgr.
prob
現在の問題
fcmi
２つの引数my_probとmy_object を持ち、整数返り値があるコール

バック関数

MSI 用

コールバック関数fcmiに引き渡される問題
XPRSsetcbinitcutmgrでコールバックを設定したとき、objectとして引き渡されるユーザ定義オブジェクト
コールバック関数fcmiに引き渡されるユーザ定義オブジェクト

my_prob
my_object
objectXpress-Optimizer Reference Manual Console and Library Functions 214

XPRSsetcbintsol
XPRSsetcbintsol

6

XPRSsetcbintsol

目的
分枝限定探索中に整数解が見つかる度に呼ばれるユーザ整数解コールバック関数を宣言します。

概要
int XPRSsetcbintsol(XPRSprob prob,
void (XPRS_CC *fuis)(XPRSprob my_prob, void *my_object),void *object);

引数
関係する制御なし
例1

整数解探索で見つけられた整数解を解ファイルを使わずに出力します。
XPRSsetcbintsol(prob,printsol,NULL);XPRSsetintcontrol(prob,XPRS_SOLUTIONFILE,0);
XPRSmaxim(prob,"g");このコールバック関数は以下と同様です。
void XPRS_CC printsol(XPRSprob my_prob, void *my_object){
int i, cols, *x;
double objval;
XPRSgetintattrib(my_prob,XPRS_COLS,&cols);
prob
現在の問題
fuis
２つの引数my_probとmy_objectを持ち、返り値はないコールバッ

ク関数。現在のノードが整数実行可能解を持つと分かったとき（つまり整数実行可能解が見つかる度に）呼ばれます
コールバック関数fuisに渡される問題
XPRSsetcbintsolでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
コールバック関数fuisに渡されるユーザ定義オブジェクト

my_prob
my_object
objectXpress-Optimizer Reference Manual Console and Library Functions 215

XPRSsetcbintsol

6

XPRSgetdblattrib(my_prob,XPRS_LPOBJVAL,&objval)
x = malloc(cols * sizeof(int));
XPRSgetsol(my_prob,x,NULL,NULL,NULL);
printf("\nInteger solution found: %f\n",objval);for(i=0;i<cols;i++) printf(" x[%d] = %d\n",i,x[i])}例2Xpresss-MP CD-ROM の例depthfirst.cをご覧下さい。

MSI 用補足
メモリから整数解の値を戻したいときに、この関数は有用です。整数解が見つかった後、他の方法でこの情報を得るには、解ファイルから得るしかありません。

関連事項
XPRSsetcbchgnode, XPRSsetcboptnode, XPRSsetcbinfnode,
XPRSsetcbnodecutoff, XPRSsetcbchgbranch, XPRSsetcbprenode.
Xpress-Optimizer Reference Manual Console and Library Functions 216

XPRSsetcblplog
XPRSsetcblplog

6

XPRSsetcblplog

目的
シンプレックス法の各LPLOG繰返しの後に呼ばれるシンプレックスログコールバック関数を宣
言します。

概要
int XPRSsetcblplog(XPRSprob prob,
int (XPRS_CC *fuil)(XPRSprob my_prob, void *my_object),void *object);

引数
関係する制御Integer

例
次のコードはコールバック関数lpLog を最適化における10回の繰返しごとに呼ばれるように設定しています。
XPRSsetintcontrol(prob,XPRS_LPLOG,10);
XPRSsetcblplog(prob,lpLog,NULL);XPRSreadprob(prob,"problem","");XPRSminim(prob,"");
prob
現在の問題
fuil
2つの引数my_probとmy_objectを持ち、整数返り値があるコールバック関数。この関数は、繰返し0と最後の繰返しを含む各LPLOGシ
ンプレックス繰返しの度に呼ばれます
コールバック関数fuilに渡される問題
XPRSsetcblplogでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
コールバック関数fuilに渡されるユーザ定義オブジェクト
シンプレックスアルゴリズムの繰返しログを出力する頻度

my_prob
my_object
objectLPLOG

Xpress-Optimizer Reference Manual Console and Library Functions 217

XPRSsetcblplog

6

このコールバックは以下と同様です。
int XPRS_CC lpLog(XPRSprob my_prob, void *my_object){
int iter; double obj;
XPRSgetintattrib(my_prob, XPRS_SIMPLEXITER, &iter);
XPRSgetdblattrib(my_prob, XPRS_LPOBJVAL, &obj);
printf("At iteration %d objval is %g\n", iter, obj);
return 0;}

MSI 用補足
コールバック関数が零でない値を返す場合、解の探索は中断されます。

関連事項
XPRSsetcbbarlog, XPRSsetcbgloballog, XPRSsetcbmessage.
Xpress-Optimizer Reference Manual Console and Library Functions 218

XPRSsetcbmessage
XPRSsetcbmes sage

6

XPRSsetcbmessage

目的
Optimizerによりテキストラインが出力される度に呼ばれる出力コールバック関数を宣言します。

概要
int XPRSsetcbmessage(XPRSprob prob,
void (XPRS_CC *fop)(XPRSprob my_prob, void *my_object,
const char *msg, int len, int msgtype), void *object);

引数
関係する制御Integer
prob
fop

現在の問題
５つの引数my_prob，my_object，msg，len，msgtypeを持ち、返り値のないコールバック関数
コールバック関数fopに渡される問題
XPRSsetcbmessageでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
新しいラインのメッセージを含む文字列
メッセージの長さ
出力メッセージタイプを示します
1
正常メッセージ (情報)2
正常メッセージ (デバッグ)
3
警告メッセージ
4
エラーメッセージの値の場合、出力がファイルにリダイレクトされると、部分ルーチ
ンライブラリの呼びだしは終了しようとし、バッファは消去されるかもしれません
コールバック関数fopに渡されるユーザ定義オブジェクト
メッセージの出力

my_prob
my_objectmsg
len
msgtypeobjectOUTPUTLOG

Xpress-Optimizer Reference Manual Console and Library Functions 219

XPRSsetcbmessage

6

例
全ての出力を単純に画面(stdout)に送ります。
XPRSsetcbmessage(prob,Message,NULL);

コールバック関数は以下と同様です。
void XPRS_CC Message(XPRSprob my_prob, void* my_object,
const char *msg, int len, int msgtype){

MSI 用

switch(msgtype){case 4: /* error */case 3: /* warning */case 2: /* dialogue */case 1: /* information */printf("%s\n", msg);
break;
default: /* exiting - buffers need flushing */fflush(stdout);
break;}}

補足
ユーザ出力コールバックを定義することで、全てのスクリーン出力はオフにされます。全ての出力メッセージはOUTPUTLOG整数制御を0にすることで消去されます。
2. この関数はプログラム実行中に発生する警告やエラーを詳細に画面に表示する際に有用です。そうしない場合、関数の返り値をチェックしたり、XPRSgetlasterrorあるいはログファイルの出力内容を調査することで（そのような設定になっているとします）、同じ情報が得られます。
3. このルーチンは、引数として文字列を返すのはこのコールバックだけであるため、Visual
Basic では特別な扱いが必要です。Visual Basic で使用するためには、
XPRSetcbmessageVBを使用する必要があります。CD-Romにこの使用例がいくつかあり
ます。
1.

関連事項
XPRSsetcbbarlog, XPRSsetcbgloballog, XPRSsetcblplog,
XPRSsetlogfile.
Xpress-Optimizer Reference Manual Console and Library Functions 220

XPRSsetcbnodecutoff
XPRSsetcbnodecutoff

6

XPRSsetcbnodecutoff

目的分枝限定探索中に見つかった改善された整数解により、ノードがカットオフされる度に呼ばれるユーザノードカットオフコールバック関数を宣言します。

概要
int XPRSsetcbnodecutoff(XPRSprob prob,
void (XPRS_CC *fucn)(XPRSprob my_prob, void *my_object,
int nodnum), void *object);

引数
関係する制御なし
例1

整数解探索中にノードがカットオフされるとユーザに通知します。
XPRSsetcbnodecutoff(prob,Cutoff,NULL);
XPRSmaxim(prob,"g");このコールバック関数は以下と同様です。
void XPRS_CC Cutoff(XPRSprob prob, void *obj, int node);{

MSI 用printf("Node %d cutoff\n",node);
prob
現在の問題
fucn
３つの引数my_prob，my_object，nodnumを持ち、返り値がない

コールバック関数。改善された整数解が見つかり、ノードがカット
オフされる度に呼ばれます
コールバック関数fucnに渡される問題
XPRSsetcbnodecutoffでコールバックを設定したとき、objectとして渡すユーザ定義オブジェクト
カットオフされるノードの数
コールバック関数fucnに渡されるユーザ定義オブジェクト

my_prob
my_objectnodnumobjectXpress-Optimizer Reference Manual Console and Library Functions 221

XPRSsetcbnodecutoff

6

}

例2
Xpresss-MP CD-ROM の例depthfirst.cをご覧下さい。

補足
この関数によりユーザは適切なノードの経緯を保存できます。

関連事項
XPRSsetcbchgnode, XPRSsetcboptnode, XPRSsetcbinfnode,
XPRSsetcbintsol, XPRSsetcbchgbranch, XPRSsetcbprenode.
Xpress-Optimizer Reference Manual Console and Library Functions 222

XPRSsetcboptnode
XPRSsetcboptnode

6

XPRSsetcboptnode

目的
分枝限定探索中に現在のノードの最適解を発見した後で呼ばれる最適ノードコールバック関数
を宣言します。

概要
int XPRSsetcboptnode(XPRSprob prob,
void (XPRS_CC *fuon)(XPRSprob my_prob, void *my_object,
int *feas), void *object);

引数
関係する制御なし
例1

先に見つかった最適解を出力します。
XPRSsetcboptnode(prob,nodeOptimal,NULL);
XPRSmaxim(prob,"g");コールバック関数は以下と同様です。
void XPRS_CC nodeOptimal(XPRSprob prob, void *obj,
int *feas){
int node;
double objval;
XPRSgetintattrib(prob,XPRS_NODES,&node);
prob
現在の問題

MSI 用

３つの引数、my_prob，my_object，feasを持ち、返り値がない
コールバック関数
コールバック関数fuonに引き渡す問題
XPRSsetcboptnodeでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
実行可能性の状態。零でない値を設定すると、現在のノードは実行不能と宣言されます
コールバック関数fuonに渡されるユーザ定義オブジェクト

fuon
my_prob
my_objectfeas
objectXpress-Optimizer Reference Manual Console and Library Functions 223

XPRSsetcboptnode6

printf("NodeOptimal: node number %d\n", node);
XPRSgetdblattrib(prob,XPRS_LPOBJVAL,&objval);printf("\tObjective function value = %f\n",objval);}}
例2
Xpress-MP CD-ROM の例depthfirst.cをご覧下さい。

補足
ノードがこのコールバック関数から実行不能と宣言されると、ノードを最適化するコストは無効になります。

関連事項
XPRSsetcbchgnode, XPRSsetcbinfnode, XPRSsetcbintsol,
XPRSsetcbnodecutoff, XPRSsetcbchgbranch, XPRSsetcbprenode.
Xpress-Optimizer Reference Manual Console and Library Functions 224

XPRSsetcbprenode
XPRSsetcbprenode

6

XPRSsetcbprenode

目的
事前分析ノードコールバック関数を宣言します。ノードが最適化される前に呼ばれるため、ノードの解は使えません。

概要
int XPRSsetcbprenode(XPRSprob prob,
void (XPRS_CC *fupn)(XPRSprob my_prob, void *my_object,
int *nodinfeas), void *object);

引数
関係する制御なし

例
各ノードが事前分析される前に、ユーザに通知します。
XPRSsetcbprenode(prob, preNode, NULL);
XPRSminim(prob,"g");このコールバック関数は以下と同様です。
void XPRS_CC preNode(XPRSprob prob, void* data, int*Nodinfeas)
{
prob
現在の問題

MSI 用

３つの引数my_prob,my_object, nodnumを持ち、返り値がないコールバック関数。この関数は、新しいノードが選択される度に呼ばれ、選択されたノードはこれにより変更されます
コールバック関数fupnに渡される問題
XPRSsetcbprenodeでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
ノードが実行可能かどうかを表します。事前分析中にノードが実行不能と判明した場合、1が設定され、そのノードは再最適化されないことを示しますコールバック関数fupnに渡されるユーザ定義オブジェクト

fupn

my_prob
my_objectnodinfeas

objectXpress-Optimizer Reference Manual Console and Library Functions 225

XPRSsetcbprenode6*Nodinfeas = 0; /* set to 1 if node is infeasible */}関連事項
XPRSsetcbchgnode, XPRSsetcbinfnode, XPRSsetcbintsol,
XPRSsetcbnodecutoff, XPRSsetcboptnode.
Xpress-Optimizer Reference Manual Console and Library Functions 226

XPRSsetcbsepnode
XPRSsetcbsepnode

6

XPRSsetcbsepnode

目的
整数目的関数を使う分枝限定木のノードの分割法を指定するための分割コールバック関数を宣言します。カットまたは上下界値を各ノードに適用してノードは分割されます。これらはカッ
トプールに保存されます。

概要
void XPRSsetcbsepnode(XPRSprob prob,
int (XPRS_CC *fse)(XPRSprob my_prob, void *my_object,
int ibr, int iglsel, int ifup, double curval),
void *object);

引数
関係する制御なし

例
整数解探索のためのユーザ分割コールバック関数を定義する前に問題を最小化します。
XPRSminim(prob,"");XPRSsetcbsepnode(prob,nodeSep,NULL);
prob
現在の問題
fse
6つの引数my_prob，my_object，ibr，iglsel，ifup，curval
my_prob
my_objectibr
iglselを持ち、整数返り値があるコールバック関数
コールバック関数fseに渡される問題
XPRSsetcbsepnodeでコールバックを設定したとき、objectとして渡されるユーザ定義オブジェクト
分枝番号
離散要素番号MSI 用

離散要素の分枝方向（ibrと同様）
離散要素の現在値
コールバック関数fseに渡されるユーザ定義オブジェクト

ifup
curvalobjectXpress-Optimizer Reference Manual Console and Library Functions 227

XPRSsetcbsepnode

6

XPRSglobal(prob);

関数 nodeSep は次のように定義されます。
int nodeSep(XPRSprob my_prob, void *my_object, int ibr,
int iglsel, int ifup, double curval){
int index;
double dbd;
if( ifup ){dbd = floor(xval);
XPRSstorebounds(my_prob,1,&iglsel,"U",&dbd,&index);}else{
dbd = ceil(xval);
XPRSstorebounds(my_prob,1,&iglsel,"L",&dbd,&index);}
XPRSbranchcut(my_prob,1,&index);
return 0;}

補足
ユーザ分割ルーチンは推定コールバック関数XPRSsetcbestimate により返されるnbr回だけ呼ばれます。これにより、複数の分枝が可能になります
2. XPRSbranchcutを呼ぶことで、ユーザ分割ルーチンにあるノードで指定された上下界値と／あるいは カットに適用されます
1.

関連事項
XPRSbranchcut, XPRSsetcbestimate, XPRSstorecuts.
Xpress-Optimizer Reference Manual Console and Library Functions 228

XPRSsetdblcontrol
XPRSsetdblcontrol

6

XPRSsetdblcontrol

目的
倍精度型制御パラメータの値を設定します。

概要
int XPRSsetdblcontrol(XPRSprob prob, int ipar,
double dsval);

引数
関係する制御７章「制御パラメータ」参照

例
倍精度型の制御DEGRADEFACTOR に 1.0を設定します。
XPRSsetdblcontrol(prob,XPRS_DEGRADEFACTOR,1.0);

・・・・・

MSI 用関連事項
XPRSgetdblcontrol, XPRSsetintcontrol, XPRSsetstrcontrol.
prob
現在の問題
ipar
設定される値を持つ制御パラメータ。全ての制御パラメータのリストについては７章「制御パラメータ」かヘッダファイルxprs.h のリストをご覧ください
制御パラメータに設定される値

dsval

Xpress-Optimizer Reference Manual Console and Library Functions 229

XPRSsetdefaults
XPRSsetdefault s

6

XPRSsetdefaults

目的
全ての制御にデフォルト値を設定します。

概要
int XPRSsetdefaults(XPRSprob prob);

引数
関係する制御なし

例
制御にデフォルトを再設定し、再び解く前に事前分析をオフにします。
XPRSsetintcontrol(prob,XPRS_PRESOLVE,0);
XPRSmaxim(prob,"g");XPRSwriteprtsol(prob);
XPRSsetdefaults(prob)
XPRSmaxim(prob,"g");関連事項
７章「制御パラメータ」, XPRSsetintcontrol,
XPRSsetdblcontrol, XPRSsetstrcontrol.
prob
現在の問題
Xpress-Optimizer Reference Manual Console and Library Functions 230

XPRSsetintcontrol
XPRSsetintcontrol

6

XPRSsetintcontrol

目的与えられた整数制御パラメータの値を設定します。

概要
int XPRSsetintcontrol(XPRSprob prob, int ipar, int isval);

引数
関係する制御７章「制御パラメータ」参照

例
制御PRESOLVEを0に設定し、最適化の前の事前分析機能をオフにします。
XPRSsetintcontrol(prob,XPRS_PRESOLVE,0);
XPRSmaxim(prob,"");補足
SCALING のような整数制御パラメータのいくつかはビットマップで、各ビットは異なる動作

MSI 用を意味します。ビット0は値1、ビット1は値2、ビット2は値4を意味します。

関連事項
XPRSgetintcontrol, XPRSsetdblcontrol, XPRSsetstrcontrol.
prob
現在の問題
ipar
設定される値の制御パラメータ。全制御のリストは７章「制御パラメータ」かヘッダファイルxprs.h内のリストをご覧ください
設定される制御パラメータの値

isval

Xpress-Optimizer Reference Manual Console and Library Functions 231

XPRSsetlogfile
XPRSsetlogfile

6

XPRSsetlogfile

目的全てのOptimizer出力をログファイルに書き出すように指示します。

概要
int XPRSsetlogfile(XPRSprob prob, char *filename);

引数
関係する制御なし

例
ファイルlogfile.logに出力するよう指示します。
XPRSinit(NULL);
XPRScreateprob(&prob);
XPRSsetlogfile(prob,"logfile.log");

補足
求解過程でOptimizerにより出力されるエラーや警告を得る手段なので、実行された問題ごとにログファイルを設定することをお勧めします。
2. 出力がXPRSsetlogfile によってリダイレクトされる場合、全ての画面出力はオフになります。
3. 出力コールバックは、XPRSsetcbmessageによって定義され、テキストラインが出力される度に呼ばれます。ユーザ出力コールバックを定義すると、全ての画面出力がオフになります。全ての出力メッセージを破棄するためにはOUTPUTLOG整数制御を0に設定してく
ださい。
1.

関連事項
XPRSsetcbmessage.
prob
filename

現在の問題全ての出力書かれるファイルの名前。NULLを設定すると、出力のリ
ダイレクトが止まり、全てのスクリーン出力がオンに戻ります（常に画面出力をオフにしているDLLユーザを除く）

Xpress-Optimizer Reference Manual Console and Library Functions 232

XPRSsetprobname
SETPROBNAME
XPRSsetprobname SETPROBNAME

6

XPRSsetprobname SETPROBNAME

目的
現在のデフォルト問題名を設定します。あまり使うことはありません。

MSI 用

概要
int XPRSsetprobname(XPRSprob prob, char *probname);
SETPROBNAME probname

引数
関係する制御なし

例 1 (ライブラリ)
現在の問題名をjoに設定します。
char sProblem[]="jo";...
XPRSsetprobname(prob,sProblem);…………

例 2 (コンソール)
READPROB bob
MINIM
SETPROBNAME jim
PRINTSOL
SETPROBNAME bob
PRINTSOL
問題jimの解を表示し(解ファイルjim.solが存在するとして)、その後で問題bobの解を表示

します。

警告
XPRSreadprob (READPROB) の後、最適化ルーチンを呼ぶ前にXPRSsetprobname(SETPROBNAME)で問題名を変更してはいけません。問題名が変更されると、メモリの行列が保存されません。例えばREADPROB number1
SETPROBNAME number2
prob
現在の問題
probname
問題名を含む200文字以内の文字列
Xpress-Optimizer Reference Manual Console and Library Functions 233

XPRSsetprobname
SETPROBNAME

6PRINTSOL
SETPROBNAME number1
MINIM

これは、XPRSreadprob (READPROB)により設定されたメモリ内の行列をPRINTSOLコマンド
が上書きするため、不自然な結果になります。

補足
次のようなコマンド列が続くと、XPRSreadprob (READPROB) はデフォルト問題名を変更します。
SETPROBNAME bob
READPROBとREADPROB bob

は同じ結果になります。

関連事項
XPRSreadprob (READPROB).

MSI 用Xpress-Optimizer Reference Manual Console and Library Functions 234

XPRSsetstrcontrol
XPRSsets trcontrol

6

XPRSsetstrcontrol

目的与えられた文字列制御パラメータの値を設定します。

概要
int XPRSsetstrcontrol(XPRSprob prob, int ipar,
char *csval);

引数
関係する制御７章「制御パラメータ」参照

例
制御MPSOBJNAME を「Profit」に設定します。
XPRSsetstrcontrol(prob,XPRS_MPSOBJNAME,"Profit");

関連事項
XPRSgetstrcontrol, XPRSsetdblcontrol, XPRSsetintcontrol.
prob
現在の問題
ipar
値が設定される制御パラメータ。全制御のリストは７章「制御パラメータ」かヘッダファイルxprs.h 内のリストをご覧ください
制御が設定される値を含む文字列(NULL終了分を加える)

csval

Xpress-Optimizer Reference Manual Console and Library Functions 235

STOP
STOP

6

STOP

目的
コンソールOptimizerを終了し、終了コードをOSに返します。バッチ操作でも使用できます。

概要
STOP

引数
なし

関係する制御なし

例 1 (コンソール)
行列ファイル lama.mat を入力し、整数最適化を実行した後、終了します。
READPROB lama
MAXIM -gSTOP

補足
QUITコマンドと同様にOptimizerを終了します。ホストOSまたは呼びだしたプログラムで調べることができる終了値を設定します。

関連事項
QUIT.
Xpress-Optimizer Reference Manual Console and Library Functions 236

XPRSstorebounds

6

MSI 用XPRSstorebounds

XPRSstorebounds

目的
カットプールにある上下界値を保存します。

概要
int XPRSstorebounds(XPRSprob prob, int nbnds, int *mcols,
char *qbtype, double *dbds, int *mindex);

引数関係する制御なし

例1
整数解探索のためのユーザ分割コールバック関数を定義します。
XPRSsetcbsepnode(prob,nodeSep,void);

関数nodeSepは次のように定義されます。
int nodeSep(XPRSprob prob, void *obj int ibr,
int iglsel, int ifup, double curval){
int index;
double dbd;
if( ifup ){dbd = floor(xval);
XPRSstorebounds(prob,1,&iglsel,"U",&dbd,&index);
prob
現在の問題
nbnds
保存する上下界値の数
mcols
列添字を含む配列
qbtype
上下界値タイプを含む配列
U
上限を示しますL下限を示しますdbds
上下界値値を含む配列
mindex
カットプール内の上下界値の添字が返される領域のポインタ
Xpress-Optimizer Reference Manual Console and Library Functions 237

XPRSstorebounds

6

}
else
{
dbd = ceil(xval);
XPRSstorebounds(prob,1,&iglsel,"L",&dbd,&index);}
XPRSbranchcut(prob,1, &index);
return 0;}

関連事項
XPRSbranchcut, XPRSsetcbestimate, XPRSsetcbsepnode.
Xpress-Optimizer Reference Manual Console and Library Functions 238

XPRSstorecuts
XPRSstorecuts

6

XPRSstorecuts

MSI 用目的
カットをカットプールに保存しますが、それは現在のノードには適用されません。これらのカ
ットはアクティブになる前にXPRSloadcutsを使って行列に明示的にロードされなければい
けません。

概要
int XPRSstorecuts(XPRSprob prob, int ncuts, int nodupl,
int *mtype, char *qrtype, double *drhs, int *mstart,
int *mindex, int *mcols, double *dmatval);

引数
現在の問題

prob
ncuts
nodupl追加されるカットの数.
0
カットプールから重複したものを除きません
1
重複したものはカットプールから除かれます2
カットタイプを無視して、重複したものはカットプールから除かれます
カットタイプを含む長さncutsの整数型配列。カットタイプは正の整数でカットを規定するのに使われます
行タイプを含む長さncutsの文字型配列
L
行を示しますE
行を示しますG
行を示しますカットの右辺の要素を含む長さncuts の倍精度型配列
各カットの開始を示すmcolsとdmtval配列のオフセットを含む整数型配列。この配列長さはncuts+1で最終要素mstart[ncuts]でncuts+1が始まります
カットの添字番号が返される長さncutsの整数型配列。mstartと同じメモリスペースを使用します
カットの列添字を含む長さmstart[ncuts]-1 の整数型配列

mtype
qrtypedrhs
mstartMindexmcols.
=.

Xpress-Optimizer Reference Manual Console and Library Functions 239

XPRSstorecuts

6

関係する制御Double補足
1.

XPRSstorecutsは重複カットを減らすのに使われます。パラメータnoduplが1に設定されると、カットプールは追加されるカットと同じカットタイプのカットについて重複を調べます。重複カットが見つかると、右辺値がカットを強くする新しいカットであれば追加します。プール内のカットが追加されるカットより弱ければ、木のアクティブノードに適用されていない限り、取り除かれます。noduplが2に設定されると、同じテストが、カッ
トタイプを無視して全てのカットに対して実施されます。
2. XPRSstorecutsは、mindex配列のカットプールに保存されたカットの添字番号のリス
トを返します。より強いカットが存在するために、カットプールにカットが追加されない
場合は、-1の添字番号が返されます。mindex配列は、一番新しく行列に保存されたカッMSI 用トをロードするために、XPRSloadcutsに直接渡されます。
3. カットの列と要素は、XPRSstorecutsに渡されるmcolsとdmtval配列内に連続的に保存されなくてはなりません。各カットの開始点はmstart配列に保存されます。最終カットの長さを決めるために、配列mstartは長さncuts+1であり、カットncuts+1この配列の最終要素でスタートします。

関連事項
XPRSbranchcut, XPRSsetcbestimate, XPRSsetcbsepnode, 章5.4「カットマネージャのはたらき」
カットの行列値を含む長さmstart[ncuts]-1の倍精度型配列
行列要素の零許容範囲

dmatval
MATRIXTOL

Xpress-Optimizer Reference Manual Console and Library Functions 240

XPRSwritebasis
WRITEBASIS
XPRSwr itebas is WRITEBASIS

6

XPRSwritebasis WRITEBASIS

目的
後でOptimizerに入力するために、現在の基底をファイルに書きこみます。

概要
int XPRSwritebasis(XPRSprob prob, char *filename,char *flags);
WRITEBASIS [-flags] [filename]

引数
関係する制御なし

例 1 (ライブラリ)
LPを解いた後で、将来、他のよく似た問題のより進んだ出発点とするために基底を保存して使うことは有効です。LPが複雑で解くのに時間がかかる場合に特に有効です。このためのコ
マンドは以下の通りです。
XPRSreadprob(prob,"myprob","");XPRSmaxim(prob,"");XPRSwritebasis(prob,"","");XPRSglobal(prob);

行列ファイルを読み、LP問題を最大化し、基底を保存して整数解を求めます。IP基底を保存することはあまり役に立たないので、上の例でもLP基底を保存しています。
prob
在の問題
filename
基底が読みこまれるファイル名を含む200文字以内の文字列。省略時はデフォルトで problem_nameに拡張子.bss が付いたものになります
flags
XPRSwritebasis (WRITEBASIS)に渡されるフラグt
コンパクトな基底の出力。後で似た問題の入力として使うには
XPRSreadbasis (READBASIS)にtフラグをつけて使うことが有効です
Xpress-Optimizer Reference Manual Console and Library Functions 241

XPRSwritebasis
WRITEBASIS

6

MSI 用例 2 (コンソール)
コンソールユーザの場合、上記と同様のコマンドは次の通りです。
READPROBMAXIMWRITEBASISGLOBAL補足
1.

bフラグを使ってXPRSreadprob (READPROB)コマンドで問題が入力された場合や長い行や列の名前を持つ問題のとき、基底を保存するにはtフラグオプションを使うしかありません。
最適化にニュートンバリア法を使用した場合には、有効な基底を作る前にクロスオーバーを実行しておく必要があります。この基底はシンプレックス法（主，双対）で再スタート
する場合にのみ使えます。
3. 行列が事前分析済みでも、XPRSwritebasis (WRITEBASIS) は原問題の基底を書き出し
ます。
2.

関連事項
XPRSgetbasis, XPRSreadbasis (READBASIS).
Xpress-Optimizer Reference Manual Console and Library Functions 242

XPRSwriteomni
WRITEOMNIXPRSwr iteomni WRITEOMNI

6

XPRSwriteomni WRITEOMNI

目的
現在の解をバイナリのOMNI形式ファイルSOLFILEに解ファイルproblem_name.solとして書き込みます。また、現在の行列も書き込まれます。全ての情報がこのファイルに付け加えられます。

概要
int XPRSwriteomni(XPRSprob prob);
WRITEOMNI

引数
関係する制御IntegerString例 1 (ライブラリ)
XPRSreadprob(prob,"bob","");XPRSminim(prob,"");XPRSsetintcontrol(prob,XPRS_OMNIFORMAT,1);
XPRSwriteomni(prob);
XPRSreadprob(prob,"jo","");XPRSsetstrcontrol(prob,XPRS_OMNIDATANAME,"Jo ");XPRSminim(prob,"");XPRSwriteomni(prob);

２つの解をSOLFILEに書きます。最初の解はbob.matにある問題名をデータ名フィールドに、2番目の解はデータ名前フィールドJoに入ります。

例 2 (コンソール)
コンソールでは次のコマンドが同意です。
READPROB bob

MSI 用MINIM
OMNIFORMAT = 1
prob
OMNIFORMATOMNIDATANAME

現在の問題
OMNI出力に行列係数を含むかを表します
OMNIデータ名フィールドのためのデータ

Xpress-Optimizer Reference Manual Console and Library Functions 243

XPRSwriteomni
WRITEOMNI6WRITEOMNIREADPROB jo
OMNIDATANAME = ’Jo ’MINIMWRITEOMNI補足OMNI仕様に合わせるために、出力はSOLFILEというファイルになされます。このファイ
ルが既にあれば、XPRSwriteomni(WRITEOMNI)の出力はSOLFILEに追加されます。ファイルがないときは、現在の作業ディレクトリにSOLFILE が作られます。このファイルは、Haverly Systems社のドキュメント「各種OptimizerへのOMNI標準インターフェース」に従ったフォーマットで書かれます。状態コードは、‘OPTM’, ‘INFE’, ‘FEAS’ , ‘UNBD’です。初期の仕様とはコードが変わっています。
2. MHDR, MROW,MCOLの各項目は、XPRSwriteomni (WRITEOMNI)を呼ぶ前に制御パラメー
タOMNIFORMATを零でない値に設定すると作られます。例えば次のような場合です。
1.

READPROBMINIMWRITEBASISOMNIFORMAT = 1
WRITEOMNI
QUIT
3. OMNI形式のデータ名フィールド（最初のバイトを第０バイトとして第８から１５バイト）

は、制御パラメータOMNIDATANAMEの内容が入ります。そのパラメータはXPRSwriteomni(WRITEOMNI)を呼ぶ前に設定しておかなければなりません。

関連事項なし
Xpress-Optimizer Reference Manual Console and Library Functions 244

XPRSwriteprob
WRITEPROBXPRSwr iteprob WRITEPROB

6

XPRSwriteprob WRITEPROB

目的
現在の問題をMPSあるいはLPファイルに書きこみます。

概要
int XPRSwriteprob(XPRSprob prob, char *filename,char *flags);
WRITEPROB [-flags] [filename]

引数
関係する制御なし

MSI 用例 1 (ライブラリ)
現在の問題をフル精度で出力し、ファイルproblem_name.lp.にベクトル名が含まれるLP形式
で出力します。
XPRSwriteprob(prob,"","lps");
例 2 (コンソール)
WRITEPROB -p C:myprob
OptimizerにMPS行列をCドライブのファイルmyprob.mat に倍精度で書くように指示します。
prob
現在の問題
filenamefilename 問題が書かれるファイル名を含む200文字以内の文字列。

拡張子.lp が使われるフラグがlのときでない限り、省略時はデフォルトproblem_name に拡張子.mat がついたものになります
フラグ。次のいずれかですp
フル精度数値o
１行に１要素n
スケーリング済みs
ベクトル名を含む
lLP 形式の出力

flags

Xpress-Optimizer Reference Manual Console and Library Functions 245

XPRSwriteprob
WRITEPROB

6

警告
XPRSreadprob (READPROB)が問題の入力に使われる場合、新しいファイル名を指定しないと、XPRSwriteprob (WRITEPROB)によって上書きされます。

補足
XPRSloadlp, XPRSloadglobal, XPRSloadqglobal, XPRSloadqpが行列を得るために使用される場合、目的関数と行列のN行との間に関連はなく、(__OBJ___と呼ばれる)分離N 行
は、XPRSwriteprob (WRITEPROB)を実行するときに生成されます。またXPRSreadprob(READPROB)を実行して、目的行あるい目的行に相当する行列のN行のどちらかが変更されると、二つの関連はなくなり、__OBJ___行はXPRSwriteprob (WRITEPROB)を実行するときに生成されます。XPRSreadprob (READPROB)を実行するとき、行列から目的関数行を取り除く
ためには、XPRSreadprob (READPROB)の前にKEEPNROWSに-1を設定します。

関連事項
XPRSreadprob (READPROB).
Xpress-Optimizer Reference Manual Console and Library Functions 246

XPRSwriteprtrange
WRITEPRTRANGE
XPRSwr iteprtrange WRITEPRTRANGE

6

XPRSwriteprtrange WRITEPRTRANGE

目的
ルーチンXPRSrange (RANGE)により保存されたレンジ情報をASCII形式のファイル
problem_name.rrtに書きこみます。

概要
int XPRSwriteprtrange(XPRSprob prob);
WRITEPRTRANGEPRINTRANGEMSI 用引数
関係する制御Integer
Double例 1 (ライブラリ)LP問題を解いてプリントファイルに結果を出力する前にXPRSrange(RANGE)を呼びだします。
XPRSreadprob(prob,"myprob","");XPRSmaxim(prob,"");
XPRSrange(prob);
XPRSwriteprttange(prob);
例 2 (コンソール)

コンソールユーザの場合、次のコマンドで同様に実行できます。
READPROB
MAXIM
RANGE
WRITEPRTRANGE
prob
MAXPAGELINESOUTPUTLOGOUTPUTTOL

現在の問題
改ページ行数
メッセージの印刷を実施するかについて
印刷値の零許容範囲

Xpress-Optimizer Reference Manual Console and Library Functions 247

XPRSwriteprtrange
WRITEPRTRANGE

6

補足(コンソール) 画面に同じ情報を出力する同様のコマンドPRINTRANGEがあります。形式は
XPRSwriteprtrange (WRITEPRTRANGE)によるファイル出力と同じですが、更に出力が必要なときに各画面の後に応答が入力可能をなる場合を除きます。
2. このコマンドで生成されるASCII形式のファイルは、XPRSwriterange (WRITERANGE)で生成されるファイルほど容易に使えるものではありません。フィールドが固定幅で出力されるためです。
XPRSwriteprtrange (WRITEPRTRANGE)は、印刷できるファイルを作るのが主たる目的です。このレンジファイルの形式については、付録Ａ「ログとファイル形式」に説明があります。
3. 制御OUTPUTLOG は出力を作成するためには零以外でないといけません。
1.

関連事項
XPRSgetcolrange, XPRSgetrowrange, XPRSrange (RANGE),XPRSwriteprtsol, XPRSwriterange, 付録A.4「ASCII レンジファイル」
Xpress-Optimizer Reference Manual Console and Library Functions 248

XPRSwriteprtsol
WRITEPRTSOLXPRSwr iteprtsol WRITEPRTSOL

6

XPRSwriteprtsol WRITEPRTSOL目的
SOLUTIONFILEを1に設定したとき、現在の解をASCIIファイルproblem_name.prt に出力します。

MSI 用

概要
int XPRSwriteprtsol(XPRSprob prob);
WRITEPRTSOLPRINTSOL

引数関係する制御Integer
Double例 1 (ライブラリ)

次の例は、この関数の標準的な使い方で、最適化に続いて解を書き出します。
XPRSreadprob(prob,"myprob","");XPRSmaxim(prob,"");XPRSwriteprtsol(prob);
例 2 (コンソール)
READPROBMAXIM
PRINTSOL

コンソールユーザが画面に出力を直接表示したい場合の例です。
prob
現在の問題
MAXPAGELINES
改ページ行数OUTPUTLOG
メッセージの印刷の実施について
REL10STYLE
双対変数の旧型表記の使用について
OUTPUTTOL
出力値の零許容範囲
Xpress-Optimizer Reference Manual Console and Library Functions 249

XPRSwriteprtsol
WRITEPRTSOL

6

補足
1.

(コンソール) 画面に同じ情報を表示する同様のコマンドPRINTSOL があります。形式は

XPRSwriteprtsol (WRITEPRTSOL)で得られるファイルと同じですが、更に出力が必要な場合に各画面の後に応答を入力できる場合を除きます。
2. このコマンドで生成されるASCII形式のファイルは、XPRSwritesol (WRITESOL)で生成されるファイルほど容易に使えるものではありません。フィールドが固定幅で出力されるためです。
XPRSwriteprtsol (WRITEPRTSOL)は、直接プリンタへ送ることのできるファイルを作るのが目的です。この解印刷ファイルの形式については、付録Ａ「ログとファイル形式」に説明があります3. 制御OUTPUTLOGは出力作成ののためには零以外でないといけません

関連事項
XPRSgetsol, XPRSwriteprtrange, XPRSwritesol, 付録A.3「ASCII 解ファイル」
Xpress-Optimizer Reference Manual Console and Library Functions 250

XPRSwriterange
WRITERANGE
XPRSwr iterange WRITERANGE

6

XPRSwriterange WRITERANGE

目的
ルーチンXPRSrange (RANGE)により保存されたレンジ情報をASCIIファイルとそれに関係す

MSI 用るヘッダファイルに書きこみます。

概要
int XPRSwriterange(XPRSprob prob, char *filename,char *flags);
WRITERANGE [filename] [-flags]

引数関係する制御DoubleString例 1 (ライブラリ)

基本的には、XPRSwriterange (WRITERANGE)の使い方はXPRSwriteprtrange(WRITEPRTRANGE)に似ていますが、出力は他のプログラムの入力に向いています。次の例にその使い方を示します。
prob
現在の問題
filename
解が書かれるファイル名を含む200文字以内の文字列。ファイル名に拡張子.hdr と.rscが付けられますが、省略時はデフォルトのproblem_nameが使用されます
flags
XPRSwriterange (WRITERANGE)に渡されるフラグ
s
連続番号
n
名前
t
タイプ
b
基底状態
a
アクティビティc
コスト (列), スラック (行)フラグの指定がない場合、デフォルトとして、全てのフィールドを出力します
OUTPUTLOG
メッセージの出力について
OUTPUTTOL
出力値の零許容範囲
OUTPUTMASKファイルへ出力する行，列名を制限するためのマスク
Xpress-Optimizer Reference Manual Console and Library Functions 251

XPRSwriterange
WRITERANGE

6

XPRSreadprob(prob,"myprob","");XPRSminim(prob,"");
XPRSrange(prob);
XPRSwriterange(prob,"","");例 2 (コンソール)
RANGE
WRITERANGE -nbac

この例ではベクトルごとに、名前，基底状態，アクティビティ，（列）コスト，（行）スラッ
クの値をファイルproblem_name.rscに出力します。この他にユーザの選択により他のレンジ情報の他のフィールド番号も出力されます／ません。

補足
1.

以下のフィールドは.rsc ファイルの中に以下の順序で必ず現れます。レンジファイルの
詳細は付録A「ログとファイル形式」に説明があります。

MSI 用

下限アクティビティ
単価コスト下げ
コスト上限値（最大化の場合は、利益下限値）
極限プロセス下げ極限プロセス下げの状態
上限アクティビティ
単価コスト上げ
コスト下限値（最大化の場合は、利益上限値）
極限プロセス上げ
極限プロセス上げの状態
行については、コスト下限値とコスト上限値は零です。制限過程，アクティビティがなければ、そのフィールドは空白のままで、倍精度クオーテーションで範囲が定められます。
2.
制御パラメータOUTPUTMASKはASCIIファイルに報告されるベクトルを制御するために使われます。OUTPUTMASKに一致する名前のベクトルだけが出力されます。デフォルトは‘????????’で、このときは全てのベクトルが出力されます。

関連事項
XPRSgetsol, XPRSwriteprtrange (WRITEPRTRANGE), XPRSrange (RANGE),XPRSwritesol (WRITESOL), A.4「ASCII レンジファイル」
Xpress-Optimizer Reference Manual Console and Library Functions 252

XPRSwritesol
WRITESOL
XPRSwr itesol WRITESOL

6

XPRSwritesol WRITESOL

目的
現在の解をASCIIファイルに書きこみます。

概要
int XPRSwritesol(XPRSprob prob, char *filename,char *flags);
WRITESOL [filename] [-flags]

引数関係する制御Integer
Doubleprob
filename

flags

現在の問題
解が書かれるファイルの名前を含む200文字以内の文字列。ファイル名に拡張子.hdr と.ascが付けられますが、省略時はproblem_nameが使われますXPRSwritesol (WRITESOL)に渡されるフラグ
s
連続番号
n
名前
t
タイプ
b
基底状態
a
アクティビティc
コスト(列), スラック (行)l
下限値

MSI 用上限値
dj (列; 被約費用), 双対値 (行; シャドウプライス)
右辺 (行)
各MIP，目標計画の解の出力零でない最適値をもつベクトルだけを出力旧型の双対値の使用について
出力値の零許容範囲
u
d
r
e
q

REL10STYLEOUTPUTTOL

Xpress-Optimizer Reference Manual Console and Library Functions 253

XPRSwritesol
WRITESOL

6

String例 1 (ライブラリ)

最適化に続いて基底状態を(連続番号で)出力します。
XPRSreadprob(prob,"richard","");XPRSminim(prob,"");XPRSwritesol(prob,"","sb");
例 2 (コンソール)

次のようなファイルを作成します。
• 名前がXから始まり、値が零でない変数の名前と値、及び• CO2で始まる制約条件の名前と値と右辺
Optimizerに必要なコマンドは次の通りです。
OUTPUTMASK = ’X???????’WRITESOL XVALS -naq
OUTPUTMASK = ’CO2?????’WRITESOL CO2 -nar

補足
このコマンドはfilename.hdr（ヘッダファイル）とfilename.asc（ASCII solutionファイル）の2つの読み込み可能なファイルを作ります。ヘッダファイルには1行に要約した情報が入っています。ASCIIファイルには、問題の各行、各列の情報が１行ずつ入っています。.asc ファイルには、フィールドが上記のフラグ順に現れます。フラグのリストに示された順番は関係ありません。
2. また、マスク制御OUTPUTMASK はASCIIファイルに書き込まれる名前を制御するために使われます。名前がOUTPUTMASKに一致するベクトルだけが出力されます。OUTPUTMASKはデフォルトでは「????????」が設定され、全てのベクトルが出力されます。
3. KEEPMIPSOL が、多くのMIP解，目標計画解を保存するために使われる場合、eフラグは保存してある解ごとに解情報を出力するために使われます。最もよい解は、
problem_name.hdr，problem_name.ascに出力されます。他の解はヘッダファイル
problem_name.hd0， problem_name.hd1，… そして、ASCII 形式の解ファイル
problem_name. as0， problem_name. as1，…に出力されます。
OUTPUTMASKファイルへ出力する行，列名を制限するためのマスク
1.

Xpress-Optimizer Reference Manual Console and Library Functions 254

XPRSwritesol
WRITESOL

6

関連事項
XPRSwriterange (WRITERANGE), XPRSwriteprtsol (WRITEPRTSOL), .

MSI 用Xpress-Optimizer Reference Manual Retrieving and Changing Control Values 255

77 制御パラメータ
Control Parameters

Optimizerには解法や出力様式を制御するために様々な制御があります。これらの多くは整数値をとり、種々の動作のスイッチとして機能します。値の許容範囲は倍型精度で、一部については構造に名前を設定するために文字列となっています。これらについては、ユーザがOptimizerの能力を高めるために変更できます。しかし、設定されているデフォルト値は、これまでに様々な問題に適用して良好な動作を得られた実績をもとに設定されていますので、変更の場合にはよく検討してください。

7.1 制御値の扱いかた
コンソールXpressユーザは、Optimizerのプロンプト, >,で制御名とリターンキーを入力して制御値を得ることができます。制御は指定された文法を使って設定できます。
control_name = new_value
ここでnew_valueは適切な整数値、倍精度型値または文字列です。文字列については’ ’で囲まれ全８文字が与えられます。
Xpress-MPのライブラリユーザは、制御値を設定したり得るために次のような関数の組が与えられます。本章にリストしたような制御はXpress-MP ライブラリに接頭辞XPRS_を前に付ける必要があり、そうしないとエラーになってしまうことは極めて重要です。次に例を示します。
XPRSgetintcontrol(prob, XPRS_PRESOLVE, &presolve);
printf("The value of PRESOLVE is %d\n", presolve);
XPRSsetintcontrol(prob, XPRS_PRESOLVE, 1-presolve);
printf("The value of PRESOLVE is now %d\n", 1-presolve);
XPRSgetintcontrol XPRSgetdblcontrol XPRSgetstrcontrol
XPRSsetintcontrol XPRSsetdblcontrol XPRSsetstrcontrol
Xpress-Optimizer Reference Manual Control Parameters 256

AUTOPERTURB– BACKTRACK

7

AUTOPERTURBBACKTRACK解 説 シンプレックス法:自動的に摂動を実施するかを決めます。1に設定されると、シンプレックス法が極端な数の退化ピボットステップに遭遇した場合、PERTURBにより問題が摂動され、Optimizerは退化により機能低下するのを防ぎます。
タ イ プ 整数
値0
摂動しません1
自動的に摂動します
デフォルト値1
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 分枝限定法: 木探索において次のノードの選び方を決めます。
タ イ プ 整数値
1
MIPTARGETが設定されなければ、最もよい推定量のノードを選びます。
MIPTARGETが（ユーザか整数解を見つける前に整数探索により）設定されれ
ば、Forrest-Hirst-Tomlin基準により選ばれます。これは現在、最もよい整数解を考慮して、改善される可能性が高い新しいノードを探します2
最もよい推定解のノードを常に選びます3
その解において最もよい上下界値のノードを常に選びますMSI 用デフォルト値3
作 用 ル ー チ ン XPRSglobal (GLOBAL).
Xpress-Optimizer Reference Manual Control Parameters 257

BARDUALSTOP– BARGAPSTOP

7

BARDUALSTOPBARGAPSTOP
解 説 ニュートンバリア法: 双対実行不能の許容範囲を表す収束パラメータ。双対問題の制約と上下界値の差が絶対値許容範囲を下回ると、最適化は停止し、そのときの解が返されます。
タ イ プ 倍精度
デフォルト値
1.0E-08
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 ニュートンバリア法: 相対双対ギャップの許容範囲を表す収束パラメータ。主目的関数と双対
目的関数値の差がこの許容範囲を下回ると、Optimizerは最適解が見つかったと判断します。
タ イ プ 倍精度
デフォルト値
1.0E-08
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 258

BARITERLIMIT– BARMEMORY

7BARITERLIMITBARMEMORY
解 説 ニュートンバリア法: 繰返し回数の最大値。シンプレックス法は、通常、問題の制約（行）の数に応じた繰返し計算を実施しますが、バリア法は問題の大きさとは独立な繰返し計算の後、与えられた精度の最適解を見つけます。ペナルティは問題サイズに伴う各繰返し時間の増加です。
BARITERLIMITはバリアにより実行される繰返しの最大回数を指定します。
タ イ プ 整数
デフォルト値200
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 ニュートンバリア法: 最適解の探索におけるバリアアルゴリズムによって使われるメモリをメ
ガバイト単位で指定します。0に設定すると、Optimizer により自動的に決められます。
タ イ プ 整数
デフォルト値
0 —メモリは自動的に決められます
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 259

BARORDER– BAROUTPUT

7

BARORDER
BAROUTPUT解 説 ニュートンバリア法: コレスキー因子分解の順序アルゴリズムを指定し、因子分解された行列の疎密を保存するのに使われます。
タ イ プ 整数
値0
自動的に選択します1
最小度法。行，列における最小非零数の対角要素を選びます
2
最小ローカルフィル法。行列内の非零要素の近接グラフを考え、新しい辺の作

MSI 用成を最小化するノードを減らすように探します
ネスト解体法。近接グラフを考え、反復的にそれを非近接部分に分割するように探しますデフォルト値0
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 ニュートンバリア法: 解の出力レベルを指定します。出力はアルゴリズムの各繰返し後に得られるか、このパラメータにより完全にオフにされます。
タ イ プ 整数
値
0 出力なし
1 各繰返しにおいて出力
デフォルト値1
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
3

Xpress-Optimizer Reference Manual Control Parameters 260

BARPRIMALSTOP– BARSTEPSTOP

7

BARPRIMALSTOPBARSTEPSTOP
解 説 ニュートンバリア法: 主実行不能の許容範囲を示す収束パラメータ。主問題の制約と上下界値との間の差がこの絶対値許容範囲を下回ればOptimizerは終了し、そのときの答を返します。
タ イ プ 倍精度
デフォルト値
1.0E-08
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 ニュートンバリア法: 最小ステップサイズを表す収束パラメータ。バリア法の各繰返しでは、計算された探索方向に沿ってステップは実施されます。ステップサイズがBARSTEPSTOPより小さ
い場合、Optimizerは終了し、その時の解を返します。
タ イ プ 倍精度
デフォルト値
1.0E-10
注 意 バリア法が後の繰返しにおいてBARGAPSTOPで改善を少しする場合、この値を大きくした方が、発見済みの最適解に近い解が得られるため有効です。
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 261

BARTHREADS– BIGM

7

BARTHREADS
BIGM
解 説 ニュートンバリア法: アルゴリズムを実行するためになされたスレッドの数。通常、Parallel
Xpress-MP を１台のマルチプロセッサ機上で動作させるときにプロセッサの数を設定します。
タ イ プ 整数
デフォルト値1
注 意 BARTHREADSの値はユーザのライセンスによって決まります。ライセンスで認められている以上の数に設定すると、Optimizerは最適化に先立って修正します。最適化後にその値を得ること
で、実際にプロセッサがいくつ使われたかが分かります。
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 Big M法が実施される場合、実行不能ペナルティが使われます。
タ イ プ 倍精度

MSI 用デ フ ォ ル ト 値 行列によります
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 262

BIGMMETHOD– BREADTHFIRST

7BIGMMETHODBREADTHFIRST
解 説 シンプレックス法: Big M法を使うか、標準フェーズI(実行可能到達)とフェーズII(最適化到達)を使うかを指定します。 Big M法では、目的関数の変数の係数は実行可能フェーズにおいて考慮され、できるだけ最適解に近い最初の実行可能基底に到達します。問題内のBig M要素の存在によりround-offエラーの可能性がある副作用があります。
タ イ プ 整数
値0
フェーズ I / フェーズII
1
Big M法が使われます
デフォルト値1
注 意 XPRSreadprob (READPROB)， XPRSloadglobal，XPRSloadlp，XPRSloadqglobal，
XPRSloadqpによりリセットされます
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 NODESELECTION = 4のとき、深さ優先探索において含まれるノードの数を決定します。
タ イ プ 整数
デフォルト値10
作 用 ル ー チ ン XPRSglobal (GLOBAL).
Xpress-Optimizer Reference Manual Control Parameters 263

CACHESIZE– CHOLESKYTOL

7CACHESIZECHOLESKYALG
CHOLESKYTOL
解 説 ニュートンバリア法: ユーザのコンピュータのキャッシュサイズ （KB）。インテルプラットフ
ォームでは-1にすると自動的にキャッシュサイズを決めます。
タ イ プ 整数
デフォルト値
ハードウェア／プラットフォームに依存します
注 意 サイズが分からない場合、小さめに設定することをお勧めします。Windowsにおいて自動的にサイズを決められない場合には、デフォルトの512kBが使われます。
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 コレスキー因子分解のタイプ。
タ イ プ 整数値
0 Cholesky不採用
1 Cholesky採用
デフォルト値 1
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 ニュートンバリア法: 普通の等式係数行列のコレスキー分解におけるピボット要素の零許容範
囲で、バリア法の各繰返しにおいて計算されます。ピボット要素の絶対値がCHOLESKYTOL以下であれば、コレスキー分解過程において特別に取り扱われる利点があります。
タ イ プ 倍精度

MSI 用デ フ ォ ル ト 値 1.0E-15
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 264

COVERCUTS– CPKEEPALLCUTS7

COVERCUTS
CPKEEPALLCUTS
解 説 分枝限定法: トップノードにおいて採用された被覆不等式の使用回数。採用された被覆不等式
は可能性のある整数解を除外せずに、実行可能領域の大きさを減らす際に特に有効な追加制約です。
これらを生成する過程は、例え時間ペナルティを負っても何度も実行され、実行可能領域が更に縮小されます。トップノードでこれらを生成することで、通常、良い解が得られます。と言うのは、これらの不等式は木探索においてあらゆるノードに対して接続的に適用されるためです。
タ イ プ 整数
デフォルト値20
作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 カットプール: ユーザが作成したアクティブでないカットをカットプールから取り除くかを示します。これにより、カットを再度続いて作成しなくてはならないときに、計算時間が増えてもメ
モリを節約できます。
タ イ プ 整数
値0
アクティブでないカットを取り除かない
1
アクティブでないカットを取り除く
デフォルト値1
注 意 自動生成のカットはカットプールから取り除かれません。
作 用 ル ー チ ン XPRSsetcbcutmgr.
Xpress-Optimizer Reference Manual Control Parameters 265

CPMAXCUTS– CPUTIME

7

CPMAXCUTS
CPMAXELEMSCPUTIME解 説 カットプール: カットプールに保存されるカットの初期最大数。最適化中にカットプールは自動的にリサイズされます。
タ イ プ 整数
デフォルト値100
作 用 ル ー チ ン XPRSsetcbcutmgr.
解 説 カットプール: カットプールに保持される非零係数の初期最大数。最適化中、カットプールは自動的にリサイズされます。
タ イ プ 整数
デフォルト値200
作 用 ル ー チ ン XPRSsetcbcutmgr.
解 説 求解時間を報告するのに使われる時間基準
タ イ プ 整数
値
0
経過時間
1
CPU時間
デフォルト値1

MSI 用注 意 Windowsでは経過時間が常に使われます。
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM), XPRSglobal(GLOBAL), XPRSrecurse (RECURSE).
Xpress-Optimizer Reference Manual Control Parameters 266

CRASH– CROSSOVER

7

CRASH
CROSSOVER解 説 シンプレックス法: アルゴリズムの開始時に使われたクラッシュのタイプを決めます。クラッ
シュ処理中、初期基底は実行可能性と三角可能性に可能な限り近づくように決定されます。ここでのよい選択は最適解を見つけるのに必要な反復回数を減らすことです。その値は時間の消費に応じて増加します。
タ イ プ 整数
値0
全クラッシュ処理を行いません1
シングルトンのみ (ワンパス)
2
シングルトンのみ (マルチパス)
3
スラックを考慮した、行列のマルチパス4
行列全体のマルチ(≦10)パスですが、最後にはスラックのみを対象としますn>10 4のとき、最大でn – 10パスを実施します
デフォルト値2
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 ニュートンバリア法: 最適解が見つかった場合、バリア法からシンプレックス法にクロスオー
バーを実施するかを制御し、最終基底と感度分析情報を示す。
タ イ プ 整数
値0
クロスオーバーなし
1
基底解にクロスオーバーする
デフォルト値 1
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
.
Xpress-Optimizer Reference Manual Control Parameters 267

CSTYLE– CUTFREQ7CSTYLECUTDEPTHCUTFREQ
解 説 配列の番号付けの際に用いられる表記法
タ イ プ 整数値0
配列にFORTRANのルールが用いられることを示します(1から配列番号開始)
1
配列にCのルールが用いられることを示します(0から配列番号開始)
デフォルト値1
作 用 ル ー チ ン 引数として配列を採用する全ライブラリルーチン
解 説 分枝限定法:カットが作成される箇所における木探索で最大深さを設定する。カットの作成には長時間を要し、木の深いレベルでは余り重要でないことがしばしばである。と言うのは、変数についての強い上下界値は既に実行可能領域を縮小化済みであるためです。値0はカットが作られないことを示します。

MSI 用タ イ プ 整数
デフォルト値
0 — デフォルトで木にカットが生成されません。
作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 分枝限定法: 木探索でカットが作成される頻度を決めます。ノード深さCUTFREQが零であれば、カットが作成されます。
タ イ プ 整数
デフォルト値8
作 用 ル ー チ ン XPRSglobal (GLOBAL).
Xpress-Optimizer Reference Manual Control Parameters 268

CUTSTRATEGY– DEFAULTALG

7

CUTSTRATEGYDEFAULTALG
解 説 分枝限定法:カット戦略を規定します。カットを多く作成する攻撃的なカット戦略は、探索ノードを減らしますが、カット作成に関係する時間費用がかかります。カットの生成を減らすと、時間が減りますが、たくさんのノードを探すことになります。
タ イ プ 整数
値
-1
カット戦略を保守的か攻撃的か自動的に選択します
0
カットなし
1
保守的なカット戦略
2
攻撃的なカット戦略
デフォルト値-1
作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 最適化ルーチンに渡されるアルゴリズムフラグがない場合、LPを解くのに使うアルゴリズムを選びます。
タ イ プ 整数
値
1
自動的に決まります2
双対シンプレックス
3
主シンプレックス
4ニュートンバリア
デフォルト値1
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM), XPRSglobal(GLOBAL).
Xpress-Optimizer Reference Manual Control Parameters 269

DEGRADEFACTOR– ELIMTOL

7

DEGRADEFACTOR
DENSECOLLIMIT
ELIMTOL
解 説 分枝限定法: 木において未探索ノードに関係する推定劣化量を増やす要素です。推定劣化量は与えられたノードを探索することで得られる整数解において目的関数の見込まれる悪化量のことです。
タ イ プ 倍精度
デフォルト値
1.0
作 用 ル ー チ ン XPRSglobal (GLOBAL).

MSI 用解 説 ニュートンバリア法: DENSECOLLIMIT要素以上の列は、密であるとして考慮されます。このような列は行列のコレスキー因子分解において特別に扱われます。
タ イ プ 整数
デフォルト値
0 — 自動的に決められます
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM)
解 説 事前分析の減少フェーズのためのマルコビッツ許容範囲
タ イ プ 倍精度
デフォルト値
1.0E-03作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 270

ETATOL– EXTRACOLS

7ETATOLEXTRACOLS
解 説 イータ要素の零許容範囲それぞれの反復に対して、基底逆行列が基本行列に乗じられる。基本行列は、１つの列のイータベクトルを除いて同一とする。絶対値がETATOLより小さなイータベ
クトルの要素は、ここでは零となります。
タ イ プ 倍精度
デフォルト値
1.0E-12
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM), XPRSbtran,
XPRSftran.
解 説 行列内に追加できる列の初期数。列が行列に追加されると、最大効果をあげるために
EXTRACOLS制御の設定により、行列が入力される前に、列のためのスペースが準備されます。これがなされない場合には、自動的にリサイズされますが、実際にユーザが必要とするスペース以上に割り当てられます。
タ イ プ 整数
デフォルト値0
作 用 ル ー チ ン XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp,
XPRSloadqglobal, XPRSloadqp.
EXTRAROWS， EXTRAELEMS，EXTRAMIPENTSもご覧ください。
Xpress-Optimizer Reference Manual Control Parameters 271

EXTRAELEMS– EXTRAMIPENTS

7EXTRAELEMSEXTRAMIPENTS
解 説 カット の係数を含む行列に追加可能な要素の初期数。行や列が行列に追加されると、最大効果をあげるために、EXTRAELEMS制御の設定により，行列が入力される前に行列要素のためのスペースが準備されます。これがなされない場合には、自動的にリサイズされますが、実際にユーザが必要とするスペース以上に割り当てられます。カット係数のためのスペースは、行や列が追加された後で、整数探索の開始前の追加行列の要素数に同じです。EXTRAELEMSは、行列が最初にカットのためのスペースに入力されたとき、Optimizerによって自動的に設定されますが、 行や列を追加しても、この自動的な設定はアップデートされません。自動カットかユーザカットを行列に追加したい／追加する場合、EXTRAELEMSは行列が最初に入力される前に設定されなくてはなりません。
そして、追加したいカットと行や列の追加可能なスペースができます。
タ イ プ 整数MSI 用デフォルト値
ハードウェアやプラットフォームによります
作 用 ル ー チ ン XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp,
XPRSloadqglobal, XPRSloadqp, XPRSsetcbcutmgr.
EXTRACOLS， EXTARROWSもご覧ください。
解 説 追加できる離散要素数の初期値
タ イ プ 整数
デフォルト値0
作 用 ル ー チ ン XPRSreadprob (READPROB), XPRSloadglobal,
XPRSloadqglobal.
Xpress-Optimizer Reference Manual Control Parameters 272

EXTRAPRESOLVE– EXTRAROWS

7EXTRAPRESOLVEEXTRAROWS
解 説 事前分析における追加できる要素数の初期値
タ イ プ 整数
デフォルト値
ハードウェアやプラットフォームによります
注 意 追加事前分析要素を保存するために必要なスペースはダイナミックに割り当てられます。

そのため、この制御を設定する必要はありません。
作 用 ル ー チ ン XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp,
XPRSloadqglobal, XPRSloadqp.
解 説 行列に追加可能な行の数の初期値でカットを含みます。行列に行が追加されると、最大効果をあげるために、EXTRAROWS制御の設定により、行列の入力前に行のためのスペースが準備されます。これがなされない場合には、自動的にリサイズされますが、実際にユーザが必要とするスペース以上に割り当てられます。カットのためのスペースは、行が追加された後で、整数探索の開始前の追加行の数と同じです。EXTRAROWSは、最初に行列がカットのためのス
ペースに入力されたとき、Optimizerによって自動的に設定されますが、行を追加しても、この自動的な設定はアップデートされません。自動カットかユーザカットを行列に追加したい／する場合、EXTRAROWSは行列が最初に入力される前に設定されなくてはなりません。そして、行列に追加したいカットや行の追加可能なスペースができます。
タ イ プ 整数
デフォルト値行列の性質に依存します。
作 用 ル ー チ ン XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp,
XPRSloadqglobal, XPRSloadqp, XPRSsetcbcutmgr.

EXTRACOLSもご覧ください。
Xpress-Optimizer Reference Manual Control Parameters 273

FEASTOL– GOMCUTS

7

FEASTOL
GOMCUTS解 説 右辺値，上下界値，レンジ値，つまり基底変数の上下界値の零許容範囲。この中の１つが絶対値FEASTOL以下であれば、零として扱います。
タ イ プ 倍精度
デフォルト値
1.0E-06
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM), XPRSgetinfeas.

MSI 用解 説 分枝限定法: トップノードでのGomoryカットの使用回数です。現在のノードが整数解を作らないのであれば、常に生成されます。しかし、Gomoryカットは常に実行可能領域の大きさを減らすために採用された被覆不等式と同じように有効とは限りません。
タ イ プ 整数
デフォルト値2
作 用 ル ー チ ン XPRSglobal (GLOBAL).
Xpress-Optimizer Reference Manual Control Parameters 274

INVERTFREQ– INVERTMIN

7INVERTFREQ
INVERTMIN
解 説 シンプレックス法: 基底の逆行列計算の頻度。基底は因子分解された形で維持され、ほとんどのシンプレックス反復において、採用されたステップを反映して次々とアップデートされます。何度もの反復の後、基底が余り良い状態でなくなり、十分な逆行列計算の必要があっても、これは各反復において逆行列計算をするより相当速くなります。
タ イ プ 整数
デフォルト値-1 — 自動的に頻度が決められます
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 シンプレックス法: 基底行列の逆行列を計算する際数の最小値。 詳細はINVERTFREQの解説をご覧ください。
タ イ プ 整数
デフォルト値3
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 275

KEEPBASIS– KEEPMIPSOL7KEEPBASISKEEPMIPSOL
解 説 シンプレックス法: 次の反復に使う基底を決めます。最初の反復でのクラッシュ処理により決定されたものか、最後の反復の基底を使うかを選択します。
タ イ プ 整数値0
最初の反復から最適化を開始します。つまり、以前の基底は無視されます。
1
先にロードされた基底（メモリにあるもの）が使われます。
デフォルト値 1
注 意 最適化が実施された後ではデフォルト値に戻ります。
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 分枝限定法: 保持する整数解の数。木探索中、一般に、最適解であるかないかは別にして、いくつかの整数解が見つかります。メモリに保持する整数解の数はKEEPMIPSOLで表されます。
タ イ プ 整数
デフォルト値
1 — デフォルトでは最適解のみ保持されます
作 用 ル ー チ ン XPRSgoal (GOAL).
参 照 XPRSwritesol (WRITESOL) にeフラグを付ける場合
Xpress-Optimizer Reference Manual Control Parameters 276

KEEPNROWS

MSI 用– LPLOG

7

KEEPNROWSLPITERLIMIT
LPLOG
解 説 非束縛行の状態
タ イ プ 整数値
-1
Nタイプの行を消去し、予備行のスペースを作成します
0
Nタイプの行を消去します
1
Nタイプの行を保持します
デフォルト値1
作 用 ル ー チ ン XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp,
XPRSloadqglobal, XPRSloadqp.
解 説 シンプレックス法: 最適化過程が終了する前に、実施される反復回数の最大値。MIP問題の場合、これは分枝限定法で探される各ノードでの反復回数の最大値です。
タ イ プ 整数
デフォルト値
2147483645
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 シンプレックス法: 反復ログが出力される頻度。
タ イ プ 整数値n<0n回の反復ごとに詳細に出力
0
解探索が終了した際にのみログを出力
n>0n回の反復ごとに概要を出力
デフォルト値100
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 277

MARKOWITZTOL– MAXCUTTIME

7

MARKOWITZTOLMATRIXTOLMAXCUTTIME
解 説 基底行列の因子分解で使われるマルコビッツ許容範囲。
タ イ プ 倍精度
デフォルト値0.01
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 行列要素の零許容範囲。行列要素の値が絶対値MATRIXTOL以下であれば零として扱います。
タ イ プ 倍精度
デフォルト値
1.0E-09
作 用 ル ー チ ン XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp,
XPRSloadqglobal, XPRSloadqp, XPRSalter (ALTER),XPRSaddcols, XPRSaddcuts, XPRSaddrows, XPRSchgcoef,
XPRSchgmcoef, XPRSstorecuts.
解 説 カット面の作成と再最適化のための許容時間の最大値。この限度は作成中にチェックされ、一旦限度を超えるとカットをそれ以上追加しません。

MSI 用タ イ プ 整数
値0
時間制限なしn>0
n秒後からはカットを生成しない
デフォルト値 0
作 用 ル ー チ ンXPRSmaxim (MAXIM) / XPRSminim (MINIM), XPRSglobal (GLOBAL).
Xpress-Optimizer Reference Manual Control Parameters 278

MAXIIS– MAXNODE

7

MAXIISMAXMIPSOLMAXNODE解 説 探索する既約実行不可能集合の数を制御します。
タ イ プ 整数値
-1
IISの各々について探します0
何も探しませんn>0
最初のn個のIIS について探します
デフォルト値-1
作 用 ル ー チ ン XPRSiis (IIS), XPRSgetiis.
解 説 分枝限定法:一時停止して続行するかをチェックする前に、 Optimizerで見つけられた整数
解の数の限度を指定します。最適化の間、Optimizerは別のノードから同じ目的関数値の解を見つけます。しかし、MAXMIPSOLは見つかる整数解の総数を決め、必ずしも値が違う解の数ではありません。
タ イ プ 整数
デフォルト値0
作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 分枝限定法: Optimizerが一時停止して続行するかをチェックする前に探索されるノードの最大値。
タ イ プ 整数
デフォルト値
100000000
作 用 ル ー チ ン XPRSglobal (GLOBAL).
Xpress-Optimizer Reference Manual Control Parameters 279

MAXPAGELINES– MAXTIME

7

MAXPAGELINESMAXSLAVE
MAXTIME解 説 印刷可能な出力における改ページ間の行数。
タ イ プ 整数
デフォルト値23
作 用 ル ー チ ン XPRSwriteprtsol (WRITEPRTSOL), XPRSwriteprtrange(WRITEPRTRANGE).
解 説 並行 MIP 探索で使用するスレーブプロセッサの数。
タ イ プ 整数
デフォルト値0
注 意 MIP 問題を解くのに有効なプロセッサの数を設定します。

MSI 用作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 Optimizerが終了するまでの動作時間（秒）の最大値。問題のセットアップ時間や解く時
間を含みます。MIP 問題の場合、全てのノードを解くのに要する総時間です。
タ イ プ 整数
値0
制限時間なしn>0
整数解が見つかった場合、n秒後にMIP 探索を終了するか、最後の解がに見つかるまで継続します
LP やMIP 探索をn秒後に停止します

n<0
デフォルト値0
作 用 ル ー チ ン XPRSglobal (GLOBAL), XPRSmaxim (MAXIM) / XPRSminim(MINIM).
Xpress-Optimizer Reference Manual Control Parameters 280

MIPABSCUTOFF– MIPABSSTOP

7MIPABSCUTOFFMIPABSSTOP
解 説 分枝限定法: 目的関数がある値よりよい値を持つ場合にのみ興味がある場合、
MIPABSCUTOFFにより、その値を設定します。Optimizerは探索時間を節約するために、これよ

り悪い目的関数値になるノードについて解きません。これについては、ユーザに前もって設定されない限り、LP Optimizerコマンドの後に自動的に設定されます。カットオフは
MIPRELCUTOFFや MIPADDCUTOFF制御によりMIP 解が見つかる度に自動的に更新されます。
タ イ プ 倍精度
デフォルト値

1.0E+40 (最小化問題)-1.0E+40 (最大化問題)
作 用 ル ー チ ン XPRSglobal (GLOBAL), XPRSmaxim (MAXIM) / XPRSminim(MINIM).
MIPRELCUTOFF， MIPADDCUTOFFもご覧ください
解 説 分枝限定法: 整数探索を継続するかしないかを決める絶対値許容範囲。MIPOBJVALが最適解の目的関数値で、BESTBOUNDがその時点の最良解であるとした場合に| MIPOBJVAL - BESTBOUND| MIPABSSTOPであれば探索を終了します。
タ イ プ 倍精度
デフォルト値0.0
作 用 ル ー チ ン XPRSglobal (GLOBAL).
参 照 MIPRELSTOP， MIPADDCUTOFF.
Xpress-Optimizer Reference Manual Control Parameters 281

MIPADDCUTOFF– MIPLOG

7

MIPADDCUTOFFMIPLOG解 説 分枝限定法: 新しいカットオフを与えるために、見つかった最良整数解の目的関数に加える量。
一旦、整数解が見つかり、MIPABSCUTOFF 以上の目的関数値である場合、少なくともある量より良くない限り、この値の改善には興味がありません。MIPADDCUTOFFが零でない場合、この新しい値よりよい整数解が見つかる度にMIPABSCUTOFFが追加されます。これにより、目的関数において大きな改善がない答を持つ木の部分を切り離して計算時間を節約します。制御MIPABSSTOPはMSI 用似たような関数ですが、働きが違います。
タ イ プ 倍精度
デフォルト値-1.0E-05
作 用 ル ー チ ン XPRSglobal (GLOBAL).
MIPRELCUTOFF，MIPABSSTOP，MIPABSSTOPもご覧ください解 説 整数出力制御．
タ イ プ 整数値0
整数探索の出力なし
1終了時に概要のみを出力する
2
全ての解が見つかったときに詳細ログを出力する
3
各ノードにおいて詳細ログを出力する
nn番目のノードごとに概要ログを出力する
デフォルト値-100
作 用 ル ー チ ン XPRSglobal (GLOBAL).
参 照 付録A.7「グローバルログ」
Xpress-Optimizer Reference Manual Control Parameters 282

MIPPRESOLVE– MIPPRESOLVE

7

MIPPRESOLVE
解 説 分枝限定法: 実施される整数処理のタイプ。0に設定されると、何も処理されません。
タ イ プ 整数
値 ビットに意味があります。
0
各ノードでリデュースコストの固定化が実行されます。これはノードが解かれる前に単純化するもので、ある変数の値が、このノードで他の変数に設定された追加上下界値に基づいて固定されることを推測して実施されます。
1
各ノードで論理事前処理を行います。これはバイナリ変数について実施され、しばしば制約に基づいて変数を固定します。これは非常に問題を単純化し、シンプレックス法を始める前に、ノードの最適性や実行不能性を決定することさえできます。
2
トップノードでバイナリ変数の深さを調査します。これはあるバイナリ変数を設定し、同じ制約内の他のバイナリ変数への影響を推定します。
デフォルト値
行列特性によります
作 用 ル ー チ ン XPRSglobal (GLOBAL).
参 照 章 5.2「事前分析のはたらき」， PRESOLVE， PRESOLVEOPS.
Xpress-Optimizer Reference Manual Control Parameters 283

MIPRELCUTOFF– MIPRELSTOP

7

MIPRELCUTOFF
MIPRELSTOP
解 説 分枝限定法: MIPABSCUTOFF の新しい値を設定するために、整数解が見つかったときに目的関数の値に加えるLP解の値の割合。この効果としては、現在の解よりもそれ程良好でない目的関数を持つ可能性が最も高い木の一部を探索から切り離すことです。制御 MIPRELSTOPは似た機能を持っていますが、働きが違います。
タ イ プ 倍精度
デフォルト値
1.0E-04

MSI 用作 用 ル ー チ ン XPRSglobal (GLOBAL).
参 照 MIPABSCUTOFF, MIPADDCUTOFF, MIPRELSTOP.
解 説 分枝限定法: これは整数探索を終了するかしないかを決めます。MIPOBJVAL が最適解の目的関数値でBESTBOUND が現在の最良解の上下界値であるとして |MIPOBJVAL - BESTBOUND |MIPRELSTOP BESTBOUND のときには探索を終了します。
タ イ プ 倍精度
デ フ ォ ル ト 値 0.0
作 用 ル ー チ ン XPRSglobal (GLOBAL).
参 照 MIPABSSTOP, MIPRELCUTOFF.
.⋅
Xpress-Optimizer Reference Manual Control Parameters 284

MIPTARGET– MPSBOUNDNAME7

MIPTARGETMIPTOLMPSBOUNDNAME
解 説 分枝限定法: 整数探索における目的関数の目標 (ノード選択基準により使われる)。これはユー
ザに事前に設定されない限り、LP最適化ルーチンの後で自動的に設定されます。
タ イ プ 倍精度
デフォルト値
1.0E+40
作 用 ル ー チ ン XPRSglobal (GLOBAL).
参 照 BACKTRACK.
解 説 分枝限定法: 整数条件を考慮した決定変数の値の許容範囲。
タ イ プ 倍精度
デフォルト値
5.0E-06
作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 MPSファイル内で探索された上下界値名。全ての文字列制御を考慮して64文字とNULL終了\0を加えた長さです。
タ イ プ 文字列
デフォルト値
64ブランク作 用 ル ー チ ン XPRSreadprob (READPROB).
Xpress-Optimizer Reference Manual Control Parameters 285

MPSECHO– MPSFORMAT7MPSECHOMPSERRIGNOREMPSFORMAT
解 説 入力中にMPSコメントをエコーするかの決定。
タ イ プ 整数
値
0
MPSコメントがエコーされない1
MPSコメントがエコーされる
デフォルト値1
作 用 ル ー チ ン XPRSreadprob (READPROB).
解 説 MPSファイルの読み込み中に無視されるエラーの数。
タ イ プ 整数MSI 用デフォルト値 0
作 用 ル ー チ ン XPRSreadprob (READPROB).
解 説 MPS ファイル形式を指定します。
タ イ プ 整数
値 -1 自動的にファイルタイプを決定します
0 固定形式です
1入力時にMPSファイルが前提である場合です
デフォルト値-1
作 用 ル ー チ ン XPRSalter (ALTER), XPRSreadbasis (READBASIS),
XPRSreadprob (READPROB).
Xpress-Optimizer Reference Manual Control Parameters 286

MPSNAMELENGTH– MPSRANGENAME

7

MPSNAMELENGTHMPSOBJNAMEMPSRANGENAME
解 説 MPS名の最大文字列長さ。リセットは問題の入力前に実施されなくてはなりません。内部的には最低８文字の組合せであり、MPS名は右にブランクが付けられます。
タ イ プ 整数
デフォルト値
8
最大値
64
作 用 ル ー チ ン XPRSaddnames, XPRSreadprob (READPROB)解 説 MPSファイル内で探索される目的関数の名前。全ての文字列制御を考慮して 64文字にNULL終了\0を加えた長さです。
タ イ プ 文字列
デフォルト値
64ブランク作 用 ル ー チ ン XPRSreadprob (READPROB).
解 説 MPSファイル内で探索されるレンジ名。全ての文字列制御を考慮して 64文字にNULL終了\0を加えた長さです。
タ イ プ 文字列
デフォルト値
64ブランク作 用 ル ー チ ン XPRSreadprob (READPROB).
Xpress-Optimizer Reference Manual Control Parameters 287

MPSRHSNAME– OMNIDATANAME

7MPSRHSNAMENODESELECTIONOMNIDATANAME
解 説 MPSファイル内を探索される右辺名。全ての文字列制御を考慮して64文字とNULL終了\0を加えた長さです。
タ イ プ 文字列
デフォルト値
64ブランク作 用 ル ー チ ン XPRSreadprob (READPROB).
解 説 分枝限定法: 現在のノードが一度解かれているときに、どのノードを考慮すべきかを決定します。

MSI 用タ イ プ 整数
値1

ローカル優先: 使用可能であれば、２つの子ノードから選択します。そうでなければ全てのアクティブなノードから選択します2
最良値優先: 常に全てのアクティブノードが考慮されます3
深さ優先: 使用可能であれば２つの子ノードから選択します。そうでなければ最も深いノードから選択します4
最良値優先とローカル優先: 最初にBREADTHFIRSTノードについて全てのノードを考慮します。その後、ローカル優先探索が使われます
デフォルト値行列の特性によります
作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 OMNIデータ名フィールドのためのデータ。全ての文字列制御を考慮して 64文字とNULL終了\0を加えた長さです。
タ イ プ 文字列
デフォルト値
64ブランク作 用 ル ー チ ン XPRSwriteomni (WRITEOMNI).
Xpress-Optimizer Reference Manual Control Parameters 288

OMNIFORMAT– OUTPUTLOG7OMNIFORMATOPTIMALITYTOLOUTPUTLOG
解 説 XPRSwriteomni(WRITEOMNI)出力の中に行列係数を含むかを決めます。
タ イ プ 整数値0
行列係数は出力に含まれません
1
出力に係数を含みます (新形式)2出力に係数を含みます(旧形式 – 1999年以前)
デフォルト値 0
作 用 ル ー チ ン XPRSwriteomni (WRITEOMNI).
解 説 シンプレックス法: 被約費用の零許容範囲。各反復において、シンプレックス法は負のリデュースコストを持つ基底に入れる変数を探します。負のOPTIMALITYTOLの値以下のリデュースコス
トを持つ変数だけが候補となります。
タ イ プ 倍精度
デフォルト値
1.0E-06
作 用 ル ー チ ン XPRSgetinfeas, XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 最適化の間、 Optimizerによって作られる出力のレベルを制御します。可能なオプションとして、全メッセージを出力するか、全く出力をしないか、が決められます。
タ イ プ 整数値0全ての出力をしません1
メッセージを出力します
デフォルト値1
作 用 ル ー チ ン XPRSsetcbmessage, XPRSwriteprtsol (WRITEPRTSOL).
Xpress-Optimizer Reference Manual Control Parameters 289

OUTPUTMASK– PENALTY7OUTPUTMASKMSI 用OUTPUTTOLPENALTY解 説 ファイルに書かれる行や列の名前を制限するためのマスクです。 全ての文字列制御を考慮して64文字とNULL終了\0を加えた長さです。
タ イ プ 文字列
デフォルト値64の?
作 用 ル ー チ ン XPRSwriterange (WRITERANGE), XPRSwritesol (WRITESOL).
解 説 出力値の零許容範囲。
タ イ プ 倍精度
デフォルト値
1.0E-05
作 用 ル ー チ ン XPRSwriteprtrange (WRITEPRTRANGE), XPRSwriteprtsol(WRITEPRTSOL), XPRSwriterange (WRITERANGE),XPRSwritesol (WRITESOL).
解 説 ペナルティ変数係数の絶対値最小値。BIGMとPENALTYは入力ルーチン(XPRSreadprob(READPROB))により設定されますが、XPRSmaxim(MAXIM) / XPRSminim (MINIM)に先立ってユーザにリセットできます。
タ イ プ 倍精度
デフォルト値行列の特性によります。
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 290

PERTURB– PPFACTOR

7PERTURB
PIVOTTOLPPFACTOR
解 説 制御AUTOPERTURBが1に設定されているとき、最適化に先立って実行される摂動問題の係数（摂動値）です。0.0に設定されているときは摂動値は自動的に決められます。
タ イ プ 倍精度
デフォルト値
0.0 — デフォルトでは自動的に摂動値が決められます
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 シンプレックス法: 行列要素の零許容範囲。各繰返しにおいて、シンプレックス法はピボット
する非零行列要素を探します。PIVOTTOL より小さい絶対値の要素は零として扱われます。
タ イ プ 倍精度
デフォルト値
1.0E-09
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM), XPRSpivot.
解 説 パラメータをサイジングする部分プライシング候補リスト 。
タ イ プ 倍精度
デフォルト値
1.0
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
Xpress-Optimizer Reference Manual Control Parameters 291

PRESOLVE– PRESOLVE

7PRESOLVE解 説 メインアルゴリズムの開始に先立って事前分析を実施するかを決定する制御。事前分析は退化制約を検出して取り除いたり、変数上下界値を強化する等して問題を単純化します。場合によっMSI 用ては、この段階で実行不能性さえも決定できたり最適解が見つかります。
タ イ プ 整数値-1
事前分析が実施されますが、主実行不能性が検出される際、問題が実行不能と宣言されません。問題はLP最適化アルゴリズムで解かれ、実行不能解が返されますが、このことは時に有用です
0
事前分析は実施されません
1
事前分析は実施されます2
事前分析は実施されますが、退化上下界値は取り除かれません
これはバリア法の有効性を時々向上させます
デフォルト値1
注 意 事前分析のためのメモリはダイナミックにリサイズされます。Optimizerが事前分析するのにメモリ不足の場合、エラーメッセージ245が作成されます。
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
参 照 章5.2「事前分析のはたらき」, PRESOLVEOPS,MIPPRESOLVE.
Xpress-Optimizer Reference Manual Control Parameters 292

PRESOLVEOPS– PRICINGALG

7

PRESOLVEOPSPRICINGALG
解 説 事前分析中に実施されるオペレーションを指定します。
タ イ プ 整数値ビットの意味は以下の通りです。
0
シングルトン列が除かれます1
シングルトン行が除かれます
2
行の強制削除
3
双対縮小
4
退化行削除
5
二重列削除
6
二重行削除
7
強制双対縮小8
変数消去
9
IP縮小なしデフォルト値
511 (0 – 8のビットに設定)
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
参 照 章5.2「事前分析のはたらき」, PRESOLVE, MIPPRESOLVE.
解 説 シンプレックス法: 各繰返しにおいて使うプライシング法を決定し、基底に入れる変数を選びます。一般に、Devexプライシングは各繰返しで多くの時間を要しますが、繰返し回数は減ります。一方、部分プライシングは各繰返しの時間は節約できますが、繰返し回数が増える可能性があります。
タ イ プ 整数値
-1
部分プライシングが使われます
0
自動的にプライシング方法が決まります1
Devexプライシングが使われます
デフォルト値0
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).

MSI 用Xpress-Optimizer Reference Manual Control Parameters 293

PSEUDOCOST– RECMAXPASSES

7PSEUDOCOSTRECEXPAND
RECMAXPASSES
解 説 分枝限定法: 木探索における未発見ノードに関する推定劣化量の算定に使われる擬コストのデ
フォルト値。擬コストは各整数決定変数に関係し、その値を整数変数にした場合 の目的関数の値の悪化量の推定値です。
タ イ プ 倍精度
デフォルト値0.01
作 用 ル ー チ ン XPRSglobal (GLOBAL), XPRSreaddirs (READDIRS).
解 説 反復におけるB X係数とSB上下界値の改善倍率。
タ イ プ 倍精度
デフォルト値
1.1
作 用 ル ー チ ン XPRSrecurse (RECURSE).
解 説 反復ループの実施最大数。
タ イ プ 整数
デフォルト値20
作 用 ル ー チ ン XPRSrecurse (RECURSE).
Xpress-Optimizer Reference Manual Control Parameters 294

RECSHRINK– RECSTOP

7RECSHRINKRECSTEPLENGTH
RECSTOP解 説 反復におけるB X係数とSB上下界値の減少倍率。
タ イ プ 倍精度
デフォルト値
0.9
作 用 ル ー チ ン XPRSrecurse (RECURSE).
解 説 反復ステップの長さ。ステップ長さ1.0は時々大きすぎて収束しないことがあります。その場
合、パラメータRECSTEPLENGTHを減らす必要があります。
タ イ プ 倍精度
デフォルト値
1.0
作 用 ル ー チ ン XPRSrecurse (RECURSE).
解 説 反復収束パラメータ。
タ イ プ 倍精度
デフォルト値
1.0E-05
作 用 ル ー チ ン XPRSrecurse (RECURSE).
Xpress-Optimizer Reference Manual Control Parameters 295

REFACTOR– REL10STYLE

7

REFACTOR
REL10STYLE
解 説 メモリ内の現在の因子分解の再表現を使って最適化を再スタートするかを指定します。

MSI 用タ イ プ 整数
値
01
デフォルト値

再最適化において再因子分解しない
再最適化において再因子分解する
0
整数探索
1
再最適化
注 意 木探索において、ノードにおける最適基底は、デフォルトでは再因子分解されませんが、LP問題の最適基底は再因子分解されます。LP問題を少しの変更だけで繰返し解く場合、REFACTORを0に設定することがより効果的です。
作 用 ル ー チ ン XPRSglobal (GLOBAL), XPRSmaxim (MAXIM) / XPRSminim(MINIM).
解 説 双対変数やスラック，被約費用に旧型表記を使用するかを決めます。
タ イ プ 整数値0
解の値に標準表記を使います1
リリース10より前の表記を解の値に使います
デフォルト値0
作 用 ル ー チ ン XPRSgetsol, XPRSwriteprtsol (WRITEPRTSOL),
XPRSwritesol (WRITESOL).
Xpress-Optimizer Reference Manual Control Parameters 296

RELPIVOTTOL– SBITERLIMIT

7

RELPIVOTTOLSBBEST
SBITERLIMIT
解 説 シンプレックス法: 各反復において、ピボット要素は行列の与えられた列の中で選ばれます。
相対ピボット許容範囲RELPIVOTTOLは、同じ列で最大の可能なピボット要素に関係して選ばれます。
タ イ プ 倍精度
デフォルト値
1.0E-06
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM), XPRSpivot.
解 説 強力分枝を実施する実行不能離散要素の数。
タ イ プ 整数
デフォルト値-1 — 自動的に決められます。
作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 強力分枝を実施するための双対繰り返し数。
タ イ プ 整数
デフォルト値0
作 用 ル ー チ ン XPRSglobal (GLOBAL).
Xpress-Optimizer Reference Manual Control Parameters 297

SCALING– SOLUTIONFILE7

SCALINGSOLUTIONFILE
解 説 最適化の前に Optimizerが内部的にモデルをリスケールする方法を決定します。0に設定されるとスケーリングは実行されません。
タ イ プ 整数MSI 用ビットの意味は以下の通りです。
0行スケーリング
1
列スケーリング
2
再度の行スケーリング
3
最大4
Curtis-Reid50: 幾何平均によるスケーリング
1: 最大要素によるスケーリング
デフォルト値35
作 用 ル ー チ ン XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp, XPRSreadprob (READPROB), XPRSscale (SCALE).
参 照 章3.4「スケーリング」
解 説 解ファイルから（へ）の解の読み（書き）を実施するかを制御します。
タ イ プ 整数値0
メモリから（へ）の解の読み（書き）
1
ファイルから（へ）の解の読み（書き）
デフォルト値1
作 用 ル ー チ ン XPRSgetbasis, XPRSgetinfeas, XPRSgetsol, XPRSmaxim(MAXIM) / XPRSminim (MINIM).
値

Xpress-Optimizer Reference Manual Control Parameters 298

SOSREFTOL– TREECOVERCUTS

7

SOSREFTOLTRACETREECOVERCUTS
解 説 特殊順序集合における要素の順序値間の最小ギャップ。
タ イ プ 倍精度
デフォルト値
1.0E-03作 用 ル ー チ ン XPRSloadglobal, XPRSloadqglobal, XPRSreadprob(READPROB).
解 説 事前分析での実行不能診断の制御— 零でなければ実行不能性が説明されます。
タ イ プ 整数
デフォルト値0
作 用 ル ー チ ン XPRSmaxim (MAXIM) / XPRSminim (MINIM).
解 説 分枝限定法: 木のトップノードでないノードで生成された採用被覆不等式の使用回数。
COVERCUTSの解説と比較してください。
タ イ プ 整数
デフォルト値2
作 用 ル ー チ ン XPRSglobal (GLOBAL).
Xpress-Optimizer Reference Manual Control Parameters 299

TREEGOMCUTS– VERSION7TREEGOMCUTSVARSELECTION
VERSIONMSI 用解 説 分枝限定法: 木の最初のノードでないノードで生成されたGomoryカットの使用回数。GOMCUTSの解説と比べてください。
タ イ プ 整数
デフォルト値0
作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 分枝限定法: 与えられたノードの探索からの整数解において期待される目的関数の全推定劣化量を得るための整数変数に関係する擬コストの組合せ方を決めます。BACKTRACKが1に設定されているときにのみ有効です。
タ イ プ 整数値1
上下側擬コストの最小値の和2
上下側擬コストの総和
3
上下側擬コストの最大値と最小値の２倍の和
4
上下側擬コストの最大値の和
5
下側擬コストの和6
上側擬コストの和
デフォルト値1
作 用 ル ー チ ン XPRSglobal (GLOBAL).
解 説 Optimizerのバージョン番号e.g.1301 はリリース13.01を表します。
タ イ プ 整数
Xpress-Optimizer Reference Manual Control Parameters 300

VERSION– VERSION

7

Xpress-Optimizer Reference Manual Retrieving Problem Attributes 301

88 問題特性Problem Attributes

最適化においては、解かれた問題の特性が保存され、Xpress-MP ライブラリユーザはproblem
attributes（問題特性）の形で利用できます。これらについては、制御と同様の方法でアクセスできます。問題特性の例は、配列の大きさを含みます。よって、ライブラリユーザは、配列が検索される前にスペースを割り当てる必要があるかもしれません。利用可能な特性やタイプについて、本章に全リストを示します。

8.1 問題特性の検索
ライブラリユーザは、特性値を得るために次のような３つの関数が使えます。
先の制御と同じように、Xpress-MP ライブラリユーザの場合には、ここに示された特性にプレフィクスXPRS_を付ける必要があり、そうしないとエラーになることに注意してください。これらの使い方の例は、次のようにLP 問題を解いた後に目的関数の最適値を返して出力します。
XPRSgetdblattrib(prob, XPRS_LPOBJVAL, &lpobjval);printf("The objective value is %2.1f\n", lpobjval);
XPRSgetintattrib XPRSgetdblattrib XPRSgetstrattrib
Xpress-Optimizer Reference Manual Problem Attributes 302

ACTIVENODES– BARDENSECOL

8ACTIVENODESBARAASIZEBARCROSSOVER

MSI 用BARDENSECOL
解 説 未解決ノード数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSdelnode, XPRSglobal, XPRSinitglobal.
解 説 AA T内の非零要素数
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 基底クロスオーバーフェーズが入力済みかを示します。
タ イ プ 整数
値0
クロスオーバーフェーズ入力済みでありません1
クロスオーバーフェーズ入力済みです
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 行列内で見つかった密な列の数
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
Xpress-Optimizer Reference Manual Problem Attributes 303

BARDUALINF– BARPRIMALINF

8

BARDUALINF
BARDUALOBJBARITER
BARLSIZEBARPRIMALINF
解 説 ニュートンバリア法での双対実行不能の合計。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 ニュートンバリア法により計算された双対目的関数値。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 ニュートンバリア法の繰り返し数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 コレスキー因子分解の結果についての L内の非零数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 ニュートンバリア法での主実行不能の和。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
Xpress-Optimizer Reference Manual Problem Attributes 304

BARPRIMALOBJ– BOUNDNAME8BARPRIMALOBJBARSTOPBESTBOUNDBOUNDNAMEMSI 用解 説 ニュートンバリア法により計算された主目的関数値 。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 ニュートンバリア法の収束基準 。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 整数探索により決定された最良上下界値の値 。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSglobal.
解 説 アクティブな上下界値名。
タ イ プ 文字列
ル ー チ ン に よ る 設 定 XPRSreadprob.
Xpress-Optimizer Reference Manual Problem Attributes 305

COLS– ELEMS

8

COLS
CUTS
DUALINFEAS
ELEMS
解 説 行列内の列の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp, XPRSreadprob.
解 説 行列への追加カットの数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSaddcuts, XPRSdelcpcuts, XPRSdelcuts, XPRSloadcuts,
XPRSloadmodelcuts.
解 説 双対実行不能の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
参 照 PRIMALINFEAS
解 説 行列の非零要素の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp, XPRSmaxim / XPRSminim, XPRSreadprob.
Xpress-Optimizer Reference Manual Problem Attributes 306

ERRORCODE– LPOBJVAL8ERRORCODEIISLPOBJVAL
解 説 一番最近に発生した Optimizer エラー番号。
タ イ プ 整数
ル ー チ ン に よ る 設 定 どれでも解 説 発見された IISの数。

MSI 用タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSiis.
解 説 最後に解かれたLPの目的関数値。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim, XPRSglobal.
参 照 MIPOBJVAL, OBJRHS, OBJFIXED
Xpress-Optimizer Reference Manual Problem Attributes 307

LPSTATUS– MATRIXNAME8LPSTATUS
MATRIXNAME
解 説 LP解の状態。
タ イ プ 整数
値
XPRS_LP_OPTIMAL
最適
XPRS_LP_INFEAS
実行不能
XPRS_LP_CUTOFF
目的関数がカットオフより悪い
XPRS_LP_UNFINISHED
未完了
XPRS_LP_UNBOUNDED
非有界
XPRS_LP_CUTOFF_IN_DUAL
双対でのカットオフ
注 意 Optimizer CヘッダファイルとVB.bas ファイル中で定数として定義される可能な戻り値。上記に示したリターンコードについてのファイルの１つを参照ください。
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
参 照 MIPSTATUS
解 説 行列名 。
タ イ プ 文字列
注 意 MPS 行列内のMATRIX フィールドから読まれる名前であり、Optimizer 内で使われる問題名とは関係ありません。問題名を得るにはXPRSgetprobnameを使ってください。
ル ー チ ン に よ る 設 定 XPRSreadprob, XPRSetprobname.
Xpress-Optimizer Reference Manual Problem Attributes 308

MIPENTS– MIPSOLNODE

8MIPENTS
MIPINFEASMIPOBJVALMIPSOLNODE
解 説 離散要素の数(つまり、バイナリ，整数，半連続，整数，半連続整数変数)。但し、集合の数を除きます。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSaddcols, XPRSchgcoltype, XPRSdelcols,
XPRSloadglobal, XPRSloadqglobal, XPRSreadprob.
参 照 SETS
解 説 現在のノードでの整数実行不能の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSglobal.
参 照 PRIMALINFEAS

MSI 用解 説 見つかった最良整数解の目的関数値。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSglobal.
参 照 LPOBJVAL
解 説 最後に見つかった整数実行可能解のノード。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSglobal.
Xpress-Optimizer Reference Manual Problem Attributes 309

MIPSOLS– MIPSTATUS

8

MIPSOLS
MIPSTATUS
解 説 見つかった整数解の 数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSglobal.
解 説 整数(混合型整数)問題の解の状態。
タ イ プ 整数
値
XPRS_MIP_LP_NOT_LOADEDXPRS_MIP_LP_NOT_OPTIMALXPRS_MIP_LP_OPTIMALXPRS_MIP_NO_SOL_FOUNDXPRS_MIP_SOLUTION
XPRS_MIP_INFEAS
XPRS_MIP_OPTIMAL

問題がロードされていません
LP最適化がなされていません
LP 最適化済みです。MIP最適化が実施されれば、次の４つのどれかの状態コードが返されます
整数探索未終了— 整数解が見つかりません
整数探索未終了— 整数解は見つかっています
整数探索終了 —整数解は見つかりませんでした
整数探索終了— 整数解が見つかりました

注意
1. XPRS_MIP_LP_OPTIMAL 状態コードが返されると、LP最適化の後か最中に、最適化が停止したことを示します。例えば、LP緩和が実行不能や非有界の場合です。この場合、 LP解の状態の値をLPSTATUSを使って確認してください。
2. Optimizer CヘッダファイルとVB.bas ファイル中の定数として可能な戻り値が定義されます。
上に示したリターンコードの値についてのファイルの１つを参照ください。
ル ー チ ン に よ る 設 定 XPRSglobal, XPRSloadglobal, XPRSloadqglobal, XPRSmaxim /XPRSminim, XPRSreadprob.
参 照 LPSTATUS
Xpress-Optimizer Reference Manual Problem Attributes 310

NAMELENGTH– OBJFIXED8

NAMELENGTHNODEDEPTHNODESOBJFIXED解 説 行列内の行や列の名前の長さ（８文字の組）。名前を保存する文字配列を割り当てるためには、１つの名前（+1は文字列終了文字のため）あたり8*NAMELENGTH+1文字を許容しなくてはな
りません。
タ イ プ 整数MSI 用ル ー チ ン に よ る 設 定 XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp, XPRSreadprob.
解 説 現在のノードの深さ。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSglobal, XPRSinitglobal.
解 説 整数探索において解かれたノードの数。ノード番号 は分枝限定木で最初（トップ）のノードが1で始まります。ノードは連続的に番号が付けられます。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSglobal, XPRSinitglobal.
解 説 人為（固定された）変数の目的関数への寄与 。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
参 照 LPOBJVAL, OBJRHS
Xpress-Optimizer Reference Manual Problem Attributes 311

OBJNAME– PARENTNODE

8OBJNAME
OBJRHSOBJSENSE
PARENTNODE
解 説 アクティブな目的関数行の名前 。
タ イ プ 文字列
ル ー チ ン に よ る 設 定 XPRSreadprob.
解 説 目的関数の定数項部分。目的関数の定数項部分。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSchgobj
参 照 LPOBJVAL, OBJFIXED解 説 実施された最適化の方向。
タ イ プ 倍精度
値
1.0
最小化問題
-1.0 最大化問題
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 木探索における現在のノードの親ノード。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSglobal, XPRSinitglobal.
Xpress-Optimizer Reference Manual Problem Attributes 312

PRESOLVESTATE– RANGENAME

8

PRESOLVESTATE
PRIMALINFEASQELEMS
RANGENAME
解 説 ビットマップで表される問題の状態。
タ イ プ 整数値ビットの意味MSI 用0
問題はロードされました
1
問題はLP 事前分析されました
2
問題はMIP事前分析されました7
メモリ内の解は有効です
注 意 他のビットは予備です。
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
解 説 主実行不能の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
参 照 SUMPRIMALINF, DUALINFEAS, MIPINFEAS
解 説 行列内の２次要素の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSchgmqobj, XPRSchgqobj, XPRSloadqglobal, XPRSloadqp.
解 説 アクティブレンジ名。
タ イ プ 文字列
ル ー チ ン に よ る 設 定 XPRSreadprob.
Xpress-Optimizer Reference Manual Problem Attributes 313

RECCONVERGE– SIMPLEXITER

8

RECCONVERGERHSNAMEROWSSIMPLEXITER
解 説 XPRSrecurseが収束したかを示します。
タ イ プ 整数
値
0
XPRSrecurseは収束しました>0
XPRSrecurseは収束していません。収束していない項の番号を返します-1
XPRSrecurseは目的関数収束試験によると収束していません
ル ー チ ン に よ る 設 定 XPRSrecurse.
解 説 アクティブ右辺の名前。
タ イ プ 文字列
ル ー チ ン に よ る 設 定 XPRSreadprob.
解 説 行列内の行の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSaddrows, XPRSdelrows, XPRSloadglobal, XPRSloadlp,
XPRSloadqglobal, XPRSloadlp, XPRSreadprob.
解 説 実施されたシンプレックス 繰返しの数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
Xpress-Optimizer Reference Manual Problem Attributes 314

SETMEMBERS– SPAREELEMS

8SETMEMBERS
SETS
SPARECOLS

MSI 用SPAREELEMS
解 説 行列内の集合要素の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSloadglobal, XPRSloadqglobal, XPRSreadprob.
参 照 SETS
解 説 行列内の集合の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSloadglobal, XPRSloadqglobal, XPRSreadprob.
参 照 SETMEMBERS, MIPENTS
解 説 行列内の予備列の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp, XPRSreadprob.
解 説 行列内の予備行列要素の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp, XPRSreadprob.
Xpress-Optimizer Reference Manual Problem Attributes 315

SPAREMIPENTS– SUMPRIMALINF

8

SPAREMIPENTSSPAREROWSSUMPRIMALINF
解 説 行列内の予備離散要素の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp, XPRSreadprob.
解 説 行列内の予備行の数。
タ イ プ 整数
ル ー チ ン に よ る 設 定 XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp, XPRSreadprob.
解 説 主実行不能のスケーリングされた和。
タ イ プ 倍精度
ル ー チ ン に よ る 設 定 XPRSmaxim / XPRSminim.
参 照 PRIMALINFEAS
Xpress-Optimizer Reference Manual Problem Attributes 316

SUMPRIMALINF– SUMPRIMALINF

8

Xpress-Optimizer Reference Manual Return Codes for the Xpress-MP Optimizer 317

Error Messages &99 エラーメッセージ & リターンコード
Return Codes

9.1 Xpress-MP Optimizerのリターンコード
Optimizerが終了するとき、OSや呼びだしたプログラムによってチェック可能な終了コードが出力

MSI 用されます。終了コードは次のように設定されます。
終了コード63〜99は、STOPコマンドでOptimizerを終了した際に出力され、コンソールユーザにだけ重要です。
リターンコード
内容
0
プログラムは正常に終了(QUITを使用)
1aa.
異常終了を引き起こすような致命的エラー。入力が間違っています。
2a
不良あるいは壊れたファイル − 回復不可能
4a
メモリエラー8a
使い方が間違っています
16aプログラムエラー32
呼びだしか引数が無効です
63
LP最適化が終了していません
64
LP実行可能で最適解が得られました
65
LP実行不能です66
LP非有界です67
IP最適解が得られました
68
IP最適化が未終了ですが IP解は見つかっています
69
IP最適解が未終了でIP解は見つかっていません
70
IP実行不能です99
LP最適化がスタートしていません
128a
コプロセッサがみつかりません
Xpress-Optimizer Reference Manual Error Messages & Return Codes 318

Error Codes 3 – 9

9

9.2 Optimizerエラーコード
終了に続いて、発生したエラーについての必要な情報を得るためにOptimizerに問い合わせることができます。ライブラリユーザは、関数XPRSgetlasterror によりエラーの解説を得られます。
この関数は、エラーコードに関連する情報、問題属性ERRORCODEにある情報を返します。コンソールユーザは、遭遇したエラーを示す特性の値が画面に表示されます。ライブラリユーザは次のよ
うに検索します。
XPRgetintattrib(prob,XPRS_ERRORCODE,&errorcode);
ERRORCODEの値や解決法については以下のリストをご覧下さい。
3 Extension not allowed — ignored.
指定した拡張子は許容外です。Optimizerはその拡張子を無視し、ファイル名を縮めます。
4 Column <col> has no upper bound.
列 <col> には基底における上限値が示されていません。残りの行と列は基底／非基底状態を維持し、列 <col>が下限値に基づいて内部的に新たな基底が作られます。
5 Error on .<ext> file.
エラーが.<ext>ファイルで発生しました。ディスクにスペースが十分あり、壊れていないことを確認して下さい。
6 No match for column <col> in matrix.
列 <col> が、行列のCOLUMNSセクションに定義されていないため、次のセクションで使えません。
<col>のスペルが正しいことと列名フィールドの外に書かれていないかをチェックして下さい。
7 Empty matrix. Please increase EXTRAROWS.
列や行がほとんどありません。入力の前にEXTRAROWSを増やすか行列に少なくとも１行あることを確認して再度読みなおしてください。

MSI 用9 Error on read of basis file.
基底ファイル.BSSが壊れています。ファイルに十分なスペースがディスクにあり、壊れていな
いことを確認して下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 319

Error Codes 11 – 36

9

11 Not allowed — solution not optimal.
解が最適値でないと、実行しようとしている操作ができません。XPRSminim (MINIM)あるいはXPRSmaxim (MAXIM)を呼びだして問題を最適化し、最適化が終了するのを確認して下さい。制御パラメータLPITERLIMITが設定されているときは、認められている反復の最大回数内で最適解を見つけられることを確認してください。
16 Null column <col>.
列<col>においてCOLUMNセクション内の全ての行が零係数です。警告メッセージをなくすために空の列を取り除いてください。
17 More than one RHS not permitted — subsequent ones ignored.
１つの制約には１つのRHSのみ認められています。読みこまれた最初のRHS値は保存されますが、その後のものは無視されます。
18 Bound conflict for column <col>.
列<col> に指定した上限が指定した下限よりも小さいです。矛盾のないよう、どちらか、あるいは両方を変更してもう一度やり直してください。
19 Eta overflow straight after invert — unrecoverable.
イータ配列のためのメモリが十分にありません。仮想ページングスペースか物理メモリのどちらかを増やしてください。
20 Insufficient memory for array <array>.
初期データ構造のためのメモリが十分にありません。仮想ページングスペースか物理メモリのど
ちらかを増やしてください。
21 Unidentified section
そのコマンドはOptimizerに認識されません。スペルを確認してもう一度やり直して下さい。リファレンスマニュアルの有効なコマンドのリストを参照ください。
29 Input aborted.

行列を読みこむ際にあまりにも多くの問題があったため中止されました。このメッセージは問題の性質についての情報を与えるエラー番号の他のエラーメッセージより先に出ます。全
てのエラーを直してもう一度やり直してください。
36 Linear Optimizer only: buy IP Optimizer from Dash Associates.
線形Optimizerだけが使用できます。このコマンドを使用したい場合は、IPOptimizerへのアップ
グレードについてお近くの営業所にお問い合わせ下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 320

Error Codes 38 – 60

9

38 Invalid option.
指定したオプションが正しくありません。入力したオプションをチェックし、コマンドを再入力
して下さい。各コマンドの有効なオプションのリストは、６章「コンソールとライブラリ関数」
をご覧下さい。
41 Global error — contact Dash.
内部エラー。Dash に連絡して下さい。
45 Failure to open global file — aborting. (Perhaps disk is full).
Xpress-MPは.GLBファイルを開くことができません。通常ディスクが一杯のときに発生します。
違う原因であれば.GLBファイルが壊れています。
50 Inconsistent basis.

MSI 用メモリ内の内部基底が壊れています。Dash に連絡下さい。
52 Too many nonzero elements.
行列要素数が許容最大数を超えています。Hyperバージョンをお持ちの場合は、仮想ページスペ
ースか、物理メモリを増やしてください。他のバージョンのソフトウェアをお持ちの場合は、お近くの営業所に、この要素数を使用できるアップグレードについてお問い合わせ下さい。
54 XPRSrecurse (RECURSE) did not converge in <num> loops.
反復が収束しませんでした。収束するとは保証できませんが、より多くの反復要素を使用できる
ようにRECMAXPASSESを増やして下さい。
56 Reference row entries too close for set <set> member <col>.
集合<set>の参照行として使われる制約条件における列<col>の係数は、参照行の他の列の係数と非常に似ています。参照行の中の係数がお互い十分に異なっていることを確認して下さい。これを行う方法の１つは、集合<set>の全ての変数要素を含み、係数の間隔が少なくとも１単位であるよう指定した計算制約 (N型) でない制約を作成することです。
58 Duplicate element for column <col> row <row>.
列<col> の係数は、行<row>で２回以上現れます。その要素は一緒に加えられますが、この警告メッセージを出さないために列<col>は行<row>の中で１つの係数だけとして下さい。
60 Out of memory — program aborted.
Optimizerはこれ以上のメモリを割り当てられません。仮想ページスペースか物理メモリを増やして下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 321

Error Codes 61 – 76

9

61 Unexpected EOF on workfile.
内部ワークファイルが壊れています。ディスクに十分なスペースがあることを確認してもう一度やってみてください。解決しない場合は、Dash にご連絡下さい。
64 Error closing file <file>.
Xpress-MPはファイル<file>を閉じることができません。そのファイルが存在することと、他のアプリケーションで使用していないことを確認して下さい。
65 Fatal error on read from workfile <file> — program aborted.
内部ワークファイルが壊れています。ディスクに十分なスペースがあることを確認してもう一度やってみてください。解決しない場合は、Dash にご連絡下さい。
66 Unable to open file <file>.
Xpress-MPはファイル<file>を開くことができませんでした。そのファイルが存在することと、ディスクに十分なスペースがあることを確認して下さい。
67 Error on read of file <file>.
Xpress-MPはファイル<file>を読むのに失敗しました。ファイルが存在することと、壊れていな
いことを確認して下さい。
68 <num> errors in sizing parameter <par> — fatal.
初期化中にXpress-MP が<num> エラーに遭遇しました。すぐにお近くの営業所にお問い合わせ下さい。
71 Not a basic vector: <vector>.
行あるいは列<vector>の双対値が分析できません。そのベクトルが基底でないためです。
72 Not a non-basic vector: <vector>.
行あるいは列<vector>のアクティビティが分析できません。そのベクトルが基底でないためです。
73 Problem has too many rows. The maximum is <num>.
行の数が可能最大数<num>を超えているため、Xpress-MPは問題を入力できません。Hyperバー
ジョン以上を購入するなら、アップグレードによってこの行数の行列を読めるかをお近くの営業所にお問い合わせ下さい。

MSI 用76 Illegal priority: entity <ent> value <num>.
要素<ent>がディレクティブファイル中の<num>の値の無効な優先度を指定しているので、この優先度は無視されます。優先度の値が0〜1000の範囲内であることと、.DIRファイルの正しいフィールド内に書きこまれていることを確認して下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 322

Error Codes 77 – 90

977 Illegal set card <line>.
.MAT ファイルあるいは.MPSファイルの<line>行目に定義された集合が矛盾しています。集合が正しいタイプで既に定義されていないことを確認して下さい。有効な集合タイプのリストについてはリファレンスマニュアルをご覧下さい。
79 File error.
Optimizerはファイルエラーに遭遇しました。ディスクに十分なスペースがあることと、そのボリュームが壊れていないことを確認して下さい。
80 File creation error.
Optimizerはファイルを作成できません。ディスクに十分なスペースがあることと、そのボリュー
ムが壊れていないことを確認して下さい。
81 Fatal error on write to workfile <file> — program aborted.
Optimizerはファイル<file>に書きこむことができません。ディスクに十分なスペースがあることと、そのボリュームが壊れていないことを確認して下さい。
83 Fatal error on write to file — program aborted.
Optimizerは内部ファイルに書きこむことができません。ディスクに十分なスペースがあることと、そのボリュームが壊れていないことを確認して下さい。
84 Input line too long. Maximum line length is <num>.
.MATファイル あるいは .MPSファイルの１行が長すぎます。 <num> 以下の長さに減らして再入力して下さい。
85 File not found: <file>.
Optimizerはファイル<file>を見つけられません。スペルとそのファイルが存在するかをチェックして下さい。このファイルをXpress-MPで作成した場合は、その作成過程が実行されたことを確認して下さい。
89 No optimization has been attempted.
解が最適値でない限り、実行しようとしているオペレーションは認められません。最適化を行うためにXPRSminim (MINIM)あるいは XPRSmaxim (MAXIM)を呼びだし、プロセスが終了することを確認して下さい。制御LPITERLIMITを設定した場合は、最大反復数内で最適解を見つけられることを確認してください。
90 Not enough memory for devex pricing: PRICINGALG has been set to -1.
Optimizerは、Devex プライシングを実行するために更にメモリが必要です。仮想ページングス
ペースあるいは物理メモリを増やすか、Devex プライシングアルゴリズムを使用しないようにして下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 323

Error Codes 91 – 114

9

91 No problem has been input.
入力済みの問題を要求しました。再度実行する前に、XPRSreadprob (READPROB)を呼びだして問題が正しくロードされていることを確認してください。
95 SB recursion entries cannot be global entities <ent>.
離散要素は反復では使用できません。もう一度やり直す前に要素<ent>をXPRSrecurse(RECURSE)セクションから取り除くか、上下界値タイプを連続に変更してください。
97 Split vector <vector>.

MSI 用.MATファイルや.MPSファイルのCOLUMNセクションで列<vector>は、連続した行の中で宣言されなければなりません。別のベクトルに相当するラインで列の宣言を中断することはできません。
98 At line <num> no match for row <row>.
.MATファイルあるいは.MPSファイルの<num>行目で使用される行<row>は存在しません。スペ
ルのチェックと、ROWSセクションに<row>が定義されていることを確認して下さい。
102 Eta file space exceeded — optimization aborted.
Optimizerは更に多くのメモリを必要としてます。仮想ページングスペースか物理メモリを増やして最適化を再実行して下さい。
107 Too many global entities at column <col>.
離散要素の数が許容最大数を超えているため、Xpress-MPは問題を入力できません。 Hyperバー
ジョンなら、仮想ページングスペースか物理メモリを増やしてください。他のバージョンをお持ちの場合は、この離散要素数の行列の読みこみについてのアップグレードを、お近くの営業所にお問い合わせ下さい。
111 Duplicate row <row> — ignored.
行<row>は、同一セクションで２度以上使用されています。最初のだけが使われ２度目以降については無視されます。
112 Postoptimal analysis not permitted on presolved problems.
PRESOLVE = 0 で再最適化してください。事前分析された問題上で操作しようとしました。フ
ラグにlを設定したXPRSminim (MINIM) /XPRSmaxim (MAXIM)を呼びだすか、PRESOLVEに0を設定して事前分析をしないようにして再度最適化を行ってください。
114 Fatal error — pool hash table full at vector <vector>.
内部エラー。Dash に連絡して下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 324

Error Codes 120 – 142

9

120 Problem has too many rows and columns. The maximum is <num>.
行と列の和が許容最大数を超えているため、Xpress-MPは問題を入力できません。Hyperバージ
ョン以外を購入した場合には、このサイズの行列の読みこみに関するアップグレードについてお近くの営業所にお問い合わせ下さい。
122 Corrupt solution file.
解ファイル.SOL にアクセスできませんでした。ディスクに十分なスペースがあることとファイ
ルが他のプロセスで使用されていないことを確認して下さい。
127 Not found: <vector>.
行あるいは列<vector> を使用しようとしましたが、その問題上で見つけることができませんでした。スペルを確認して再度実行して下さい。
130 Bound type illegal <type>.
不正な上下界値タイプ<type> が基底ファイル.BSSで使われています。不正な上下界値タイプと列の残りが下限に存在し、新たな基底が内部的に作られます。そして、行は基底／非基底状態を維持します。XPRSreadbasis(READBASIS)にtフラグを付けて使って、コンパクト形式基底を読むことをチェックしてください。
131 No column: <col>.
基底ファイル.BSS内で使用される列<col>がその問題に存在しません。列<col>が取り除かれる
ところに新たな基底が内部的に作られ、残りの列と行は基底／非基底状態を維持します。
132 No row: <row>.
基底ファイル.BSSに使用される行< row>がその問題に存在しません。行<row>が取り除かれるところに新たな基底が内部的に作られ、残りの列と行は基底／非基底状態を維持します。
140 Basis lost — recovering.
Optimizerはメモリ内で問題と基底の間でいくつかの疑問を見つけました。修正された基底が内部

MSI 用に作成されました。
142 Type illegal <type>.
間違った優先度タイプ <type>がディレクティブファイル.DIRで見つかったので無視されます。
有効な優先度タイプについては付録Ａ「ログとファイル形式」を参照して下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 325

Error Codes 143 – 180

9

143 No entity <ent>.
ディレクティブファイル.DIRで使用される要素<ent>は、その問題で見つかりません。それに相当する優先度は無視されます。スペルをチェックし、列<ent>が、BOUNDSセクションで要素として実際に宣言されているかをチェックするか、要素を設定してください。
151 Illegal MARKER.
整数列の集合のスタートや.MPS ファイル内の特別順序集合に属する列の集合をマークするラインが正しくありません。
152 Unexpected EOF.
Optimizerは想定外のEOFマークを見つけました。入力ファイルが正しいことを確認して再入力して下さい。
153 Illegal card at line <line>.
.MPSファイルの<line>行を解釈できませんでした。有効な MPS 形式については、リファレンスマニュアルを参照して下さい。
155 Too many files open for reading: <file>.
開いているファイルが多すぎるため、Optimizerはファイル<file> から読み込めませんでした。いくつかのファイルを閉じて、もう一度実行して下さい。
170 Corrupt global file.
グローバルファイル.GLBにアクセスできません。ディスクに十分なスペースがあることと、ファイルが他のプロセスで使用されていないことを確認して下さい。
171 Invalid row type for row <row>.
新しいタイプが無効であるため、XPRSalter (ALTER)は<row>の行タイプを変更できません。
訂正してもう一度実行して下さい。
172 Scaling too bad to continue.

スケーリングは反復要素に不都合です。行列をスケーリングしてみてください。
178 Not enough spare rows to remove all violations.
十分なスペースがないため、Optimizerはこれ以上のカットを行列に追加できませんでした。
EXTRAROWSを増やしてから入力して下さい。
180 No change to this SSV allowed.
Optimizerはこの制御を変更できません。学生バージョンの場合は、制御値を変更するためのアップグレードについてお近くの営業所にお問い合わせ下さい。そうでなければ、Optimizerは正常に初期化されたことと、セキュリティーの問題で学生用モードになっていないかチェックして下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 326

Error Codes 181 – 259

9181 Cannot alter bound on BV, SC,UI, PI, or set member.
変数タイプがバイナリ、半連続、整数,部分整数,半連続整数である場合、あるいは、行列要素である場合、XPRSalter (ALTER)は変数の上下限値を変更できません。
186 Inconsistent number of variables in problem.
コンパクト形式の基底を作成した基底と違う変数の数で問題に読もうとしています。
199 SB recursion entries cannot be global entities <num>.
反復変数番号<num>は離散要素です。離散要素をXPRSrecurse (RECURSE)セクションから取り

MSI 用除いて再度入力して下さい。
245 Not enough memory to presolve matrix.
Optimizerは行列を事前分析するために、更にメモリが必要です。仮想ページングスペースか物理
メモリを増やしてください。これができない場合、最適化の前にPRESOLVEに0を設定すれば、事前分析は実行されません。
246 Wrong release of binary files.
リリース<rel1> を検出しました。リリース<rel2>が必要です。リリース <rel1>で生成されたバイ
ナリファイル*.BIFを読みこみできません。リリース<rel2>あるいは、１つ前の<rel2>-1 を使って、バイナリファイルを作成して、もう一度実行して下さい。
247 Directive on non-global entity not allowed: <col>.
ディレクティブファイル.DIRで使用された列<col>は離散要素でなく、それに相当する優先度は無視されます。変数は「離散要素」で、連続変数ではないか集合要素です。有効な要素と集合のタイプについては付録Ａの「ログとファイル形式」をご参照下さい。
255 Not enough space to presolve matrix. Increase <par> before XPRSreadprob(READPROB).
行列の事前分析のための十分なスペースがありません。XPRSreadprob (READPROB)の前にパラメータ<par> を増やすか、PRESOLVE に0を設定して事前分析を行わないようにして下さい。
256 Simplex Optimizer only: buy barrier Optimizer from Dash Associates.
Optimizerはシンプレックスアルゴリズムのみ使用できます。このコマンドを使用したい場合は、ライセンスのアップグレードについてお近くの営業所にお問い合わせ下さい。
259 Cannot use XPRSrecurse (RECURSE) if presolve applied.
XPRSrecurse (RECURSE)は事前分析された問題では実行することができません。 最適化を実行する前かフラグを1にしたXPRSminim (MINIM) /XPRSmaxim (MAXIM)を用いて最適化する前に
PRESOLVEに0を設定して下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 327

Error Codes 261 – 278

9261 <ent> already declared as a global entity — old declaration ignored.
要素<ent>は既に離散要素として宣言されています。新しい宣言の方が有効で古い宣言は無視されます。
262 Unable to remove shift infeasibilities of &.
問題を解くのに適用された制約の右辺の摂動は取り除かれません。入力データにおけるラウンド
オフエラーか問題のスケーリングが悪いためと思われます。
263 The problem has been presolved.
メモリにある問題は事前分析されています。事前分析された問題で操作しようとしました。フラグを1としたXPRSminim (MINIM) /XPRSmaxim (MAXIM)を呼びだすか、PRESOLVEに0を設定して事前分析をしないようにして再度最適化を行ってください。最適化された問題で実行する必要がない場合は、もう一度問題をロードするだけで構いません。
264 Not enough spare matrix elements to remove all violations.
Optimizerはスペース不足のため行列にこれ以上のカットを追加できません。EXTRAELEMSを増やした後、入力して動作を改善して下さい。
266 Cannot read basis for presolved problem. Re-input matrix.
メモリにある問題が事前分析済みのため、基底を読めません。XPRSreadprob (READPROB)を使用して問題を再度ロードし、再度基底を読みこんでみてください。
268 Cannot perform operation on presolved matrix. Re-input matrix.
メモリ上の問題が事前分析済みです。問題を再度ロードしてもう一度操作を行ってみてください。
277 This version is not authorized to run as a DLL.
Xpress-MPのサプライヤーに連絡してください。Optimizer部分ルーチンライブラリは DLLとして

MSI 用実行する権限がありません。DLLとしてOptimizerを実行したい場合は、権限に関するアップグレ
ードについてお近くの営業所にお問い合わせ下さい。
278 No purchase authorization found.
xpress.pwdファイルの存在を確認して下さい。OptimizerはOptimizerのディレクトリ内のxpress.pwdを使用しようとし、見つからない場合は、環境変数XPRESSに指定されたディレク
トリで探します。Optimizerを実行するのにドングルが必要な場合は、それをチェックして下さい。これでも問題が解決されない場合は、お近くの営業所にお問い合わせ下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 328

Error Codes 279 – 309

9279 Xpress-MP has not been initialized.
Optimizerは正常に初期化できませんでした。まず最初に初期化を行ってから他の操作を行って、再度実行してみてください。
285 Cut pool is full. Increase CPMAXELEMS before input.
Optimizerはカットを保存するためのスペースを使い切りました。CPMAXELEMSを増やして再度問
題を読みこんで下さい。
286 Cut pool is full. Increase CPMAXCUTS before input.
Optimizerはカットを保存するためのスペースを使い切りました。CPMAXCUTSを増やして再度問
題を読みこんで下さい。
287 Cannot read in directives after the problem has been presolved.
メモリにある問題が事前分析されているため、指示を読みこみません。最適化の前に、問題を再ロードしてディレクティブファイル.DIRを読みこんで下さい。-l フラグを使って再度最適化を行うかPRESOLVEに0を設定するかして実行してみてください。
302 Option must be C/c or O/o.
目標のタイプの有効なオプションは、C, c, O ,o のみです。他のものは無視されます。
305 Row <row> (number <num>) is an N row.
制限付きの行、つまりG、 L、 R、Eタイプだけが、目標計画のタイプで使われます。N行を目標として使う場合、目的関数となる目標計画を選択して下さい。
306 Option must be MAX/max or MIN/min.
最適化方向の有効なオプションは MAX, max, MIN , minのみです。それ以外は無視されます。
307 Option must be P/p or D/d.
目標の緩和タイプのオプションはP, p, D , d のみ有効です。それ以外は無視されます。
308 Row <row> (number <num>) is an unbounded goal.
目標計画は目標<row>が非有界であることを発見したので、この位置で止まります。<row>よりも優先度が低い目標は無視されます。
309 Row <row> (number <num>) is not an N row.
この目標計画タイプではNタイプの行だけが目標として選択できます。N以外のタイプの行を使用するときは、制約として目標計画を使用して下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 329

Error Codes 310 – 352

9

310 Option must be A/a or P/p.
目標計画のタイプの有効なオプションは A, a, P , p のみ有効です。それ以外は無視されます。
314 Invalid number.
入力が数字でありません。スペルをチェックして再度実行して下さい。
316 Not enough space to add deviational variables.
入力の前にEXTRACOLSを増やしてください。Optimizerは予備偏差変数のための予備列を見つけられません。EXTRACOLSを入力する前に最低でも目標制約数の２倍に増やし再度実行してください。

MSI 用318 Maximum number of allowed goals is 100.
目標計画は100以上の目標をサポートしていないため中断します。
320 This version is not authorized to run under Windows NT.
Xpress-MPのサプライヤーに連絡してください。Optimizerは Windows NTでの実行が認められていません。このプラットフォームで実行したい場合は、ライセンスのアップグレードについてお近くの営業所にお問い合わせ下さい。
324 Not enough extra matrix elements to complete elimination phase.
入力の前にEXTRAPRESOLVE を増やして下さい。追加行列要素を作成した事前分析により消去
フェーズが実施されました。この要素の数がEXTRAPRESOLVE パラメータで許容されている数より大きければ、消去フェーズは止まります。問題をロードする前にEXTRAPRESOLVE を増やして実行を改善してください。
326 Linear Optimizer only: buy QP Optimizer from Dash.
二次計画Optimizerを使用する権限がありません。このコマンドを使用したい場合は、
QP Optimizer
へのアップグレードについてお近くの営業所へお問い合わせ下さい。
349 Release <rel1> of binary files used with version <rel2>.
リリース<rel1> で作成されたバイナリファイルがリリース<rel2>で使用されています。
352 Command not authorized in this version.
使用権限のないコマンドを使おうとしました。このコマンドを使用したい場合は、ライセンスのアップグレードについてお近くの営業所へお問い合わせ下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 330

Error Codes 361 – 389

9361 QMATRIX or QUADOBJ section must be after COLUMN section.
行列ファイルでエラーがありました。QMATRIXあるいはQUADOBJセクションがCOLUMNセク
ションの後にあることを確認して再度実行して下さい。
362 Duplicate elements not allowed in QUADOBJ section.
列の係数が、QUADOBJセクションで2度以上現れました。このセクションにおいて、全ての列が１つの係数だけをもつことを確認して下さい。
363 Quadratic matrix must be symmetric in QMATRIX section.
対称行列だけが.MATファイルあるいは.MPSファイルのQMATRIXセクションに入力できます。
修正して再度実行して下さい。
364 Problem has too many QP matrix elements. Please increase M_Q.
二次要素が非常に多いため、問題を読みこめません。M_Qを増やして、再度実行して下さい。
366 Problems with Quadratic terms can only be solved with the barrier.
バリア法以外のアルゴリズムを使って２次計画問題を解こうとしました。bフラグと共に
XPRSminim (MINIM) / XPRSmaxim (MAXIM)を使ってバリアソルバにより解いてください。
368 QSECTION second element in line ignored: <line>.
<line> 行の第２要素は無視されます。
381 Bug in lifting of cover inequalities.
内部エラーです。直ちにお近くの営業所へお問い合わせ下さい。
386 This version is not authorized to run Goal Programming.
Xpress-MPのサプライヤーにご連絡ください。 使用している Optimizerには目標計画を実行する権限がありません。このコマンドを使用したい場合は、ライセンスのアップグレードについてお近くの営業所へお問い合わせ下さい。
387 Parallel code not initialized — continuing in serial mode.
パラレルモードが使用できません。スレーブの数が0より大きいことと、HPPVMが正しくインストールされていることをチェックして下さい。
388 Slave number <num> has failed.
スレーブ番号<num>は使えませんでした。 有効なスレーブに作業が割り当て直されます。

MSI 用389 Incorrect type of dongle, or security violation on slave <num>.
Xpress-MPはスレーブ<num>上で初期化できませんでした。残ったスレーブに割り当て直します。
詳細は1章の初期化に関するセクションをご覧下さい。それでも問題が解決しない場合はお近くの営業所へお問い合わせ下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 331

Error Codes 390 – 402

9

390 Slave number <num> has failed — insufficient memory.
メモリが不足しているため、スレーブ<num> 上のプロセスは中止されました。仮想ページング
スペースか物理メモリを増やして再度実行して下さい。使えないスレーブの作業は残ったスレー
ブに割り当て直されます。
391 All slaves have failed — continuing in serial mode.
全てのスレーブが使えず、最適化はシリアルモードで続けられます。
392 This version is not authorized to be called from BCL.
Xpress-MPのサプライヤーにご連絡ください。部分ルーチンライブラリBCL からこのバージョンのOptimizerを呼ぶことはできません。BCLからOptimizerを実行したい場合は、ライセンスのアップグレードについてお近くの営業所へお問い合わせ下さい。
394 Fatal communications error.
マスターとスレーブプロセスの間でコミュニケーションエラーがありました。ネットワークをチェックし、再度実行して下さい。
395 This version is not authorized to be called from the Optimizer library.
Xpress-MPのサプライヤーにご連絡ください。 OptimizerライブラリからこのバージョンのOptimizerを呼ぶことはできません。このライブラリを使ってOptimizerを実行したい場合は、ライセンスのアップグレードについてお近くの営業所へお問い合わせ下さい。
396 Insufficient memory on slave <num>.
スレーブ上のメモリが不足しているため、スレーブ<num> 上でプロセスを開始できません。仮想ページングスペースか物理メモリを増やして再度実行して下さい。使えないスレーブの作業は残ったスレーブに割り当て直されます。
401 Invalid row type passed to <function>.
配列要素<num>に無効な行タイプ<type>があります。関数<function>の引数にエラーがありました。配列要素<num>に相当する行タイプが無効です。行タイプの詳細な情報やタイプについては
６章「コンソールとライブラリ関数」の関数 <function>をご参照下さい。
402 Invalid row number passed to <function>.
行番号 <num> は無効です。関数<function>の引数にエラーがありました。配列の要素<num>に相当する行番号は無効です。行番号が0より小さい値でないことと、問題の行の総数を超えていないことを確認して下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 332

Error Codes 403 – 409

9403 Invalid global entity passed to <function>.
配列の要素<num>に無効な要素タイプ<type>があります。関数<function>の引数にエラーがありました。配列の要素<num>に相当する列タイプ<type>は離散要素には無効です。
404 Invalid set type passed to <function>.
配列の要素 <num> に無効な集合タイプ<type>があります。関数<function>の引数にエラーがありました。要素<num>に相当する集合タイプ<type>は集合要素には無効です。
405 Invalid column number passed to <function>.
列番号<num>は無効です。関数<function>の引数にエラーがありました.。配列の要素<num>に相当する列番号が無効です。列番号が0より小さくないことと問題の列の総数COLS-1を超えていな
いことを確認して下さい。XPRSgetobj，XPRSchgobjを呼ぶ場合、-1の列番号は有効で目的関MSI 用数の定数を参照します。
406 Invalid row range passed to <function>.
Limit <lim>は範囲外です。関数<function>の引数にエラーがありました。行番号は0から問題の行の総和の間です。Limit <lim>はこの範囲外にあり、有効でありません。
407 Invalid column range passed to <function>.
Limit <lim>は範囲外です。関数<function>の引数にエラーがありました。列番号は0から問題の列の総和の間です。Limit <lim>はこの範囲外にあり、有効でありません。
408 Too long a row or column name passed to <function>.
名前の長さ<num> が長すぎます。関数<function> の引数にエラーがありました。配列の要素<num>に相当する列名あるいは行名が長すぎます。
409 Invalid directive passed to <function>.
配列の要素<num>に無効な指示<type>があります。関数<function>の引数にエラーがありました。
配列の要素<num>に相当する指示タイプ<type>は無効です。有効な指示タイプのリストについてはリファレンスマニュアルをご参照下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 333

Error Codes 410 – 416

9

410 Invalid row basis type passed to <function>.
配列の要素<num> に無効な行基底タイプ<type>があります。関数<function>の引数にエラーがありました。配列の要素<num>に相当する行基底タイプは無効です。
411 Invalid column basis type passed to <function>.
配列要素<num>に無効な列基底タイプ<type>があります。関数<function>の引数にエラーがありました。 配列の要素<num>に相当する列基底タイプは無効です。
412 Invalid parameter number passed to <function>.
パラメータ番号<num>は範囲外です。LPあるいはMIPパラメータと制御パラメータは、第 1引数
としてパラメータか制御名を引き渡すことによって、あるいは関連番号を引き渡すことによって関数で使用できます。この場合、番号<num>は既存のパラメータや制御パラメータに対応しない
ため、関数<function>には無効な引数です。第1引数として番号を引き渡す場合は、設定したい値
または得たいパラメータか制御の名前でそれを代用して下さい。パラメータや制御名を既に渡している場合は、6章「コンソールとライブラリ関数」をチェックし、関数<function>が有効である
ことを確認して下さい。
413 Not enough spare rows in <function>.
入力前にEXTRAROWSを増やしてください。関数<function>を正常に終了するのに十分な予備行がありません。XPRSreadprob (READPROB)の前にEXTRAROWSを増やして再度実行して下さい。
414 Not enough spare columns in <function>.
入力前に EXTRACOLS を増やしてください。関数<function>を正常に終了するのに十分な予備列がありません。 XPRSreadprob (READPROB)の前にEXTRACOLSを増やして再度実行して下さい。
415 Not enough spare matrix elements in <function>.
入力前にEXTRAELEMS を増やしてください。関数<function>を正常に終了するのに十分な予備行
列要素がありません。XPRSreadprob (READPROB)の前にEXTRAELMSを増やして再度実行して下さい。
416 Invalid bound type passed to <function>.
配列の要素<elem> に無効な上下界値タイプ<type>があります。関数<function>の引数にエラーがありました。配列の要素番号<num>の上下界値タイプ<type>は無効です。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 334

Error Codes 418 – 428

9418 Invalid cut number passed to <function>.
配列の要素<num1>に無効なカット番号<num2>があります。配列の要素番号<num1>はカットプ

MSI 用ールにないカットを含みます。<num2>が有効なカット番号であるかチェックして下さい。
419 Not enough space to store cuts in <function>.
入力前にCPMAXELEMSを増やしてください。関数<function>を正常に終了するのに十分なスペー
スがありません。XPRSreadprob (READPROB)の前にCPMAXELEMSを増やして、再度実行して下さい。
422 Solution is not available.
有効な解がありません。メモリにある問題が変更されたか、最適化が実行されなかったために起こります。最適化を行って再度実行して下さい。
423 Duplicate rows/columns passed to <function>.
配列要素<elem>に二重行／列番号<num>があります。関数<function>の引数でエラーがありました。引数配列の要素番号<elem> は連続番号<num> が繰り返される行や列です。
424 Not enough space to store cuts in <function>.
入力前にCPMAXCUTSを増やしてください。関数<function>を正常に終了するのに十分なスペースがありません。入力前にCPMAXCUTSを増やして再度実行して下さい。
425 Column already basic.
既に基底であるために列をピボットして基底に入れることができません。ピボットして基底に入れる前に、変数が非基底であることを確認してください。
426 Column not eligible to leave basis.
既に非基底であるために、その列は基底に残すために選択されません。基底に残す前にその変数が基底であることを確認してください。
427 Invalid column type passed to <function>.
配列要素<num>に無効な列タイプ<num>があります。関数<function>の引数にエラーがありました。配列要素<num>に相当する列タイプ<type>が無効です。
428 Increase EXTRAMIPENTS before input.
関数<function>を正常に終了するのに十分な離散要素がありません。入力の前にEXTRAMIPENTSを増やし、再度実行して下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 335

Error Codes 430 – 506

9430 Column types cannot be changed during the global search.
Optimizerは、整数解探索を実行している間、列タイプを変更することはできません。整数解探索を開始する前、あるいは整数解探索が終了した後に、この関数を呼んでください。離散要素の問
題のLP解を見つけた後に整数解探索を自動的に開始することを望まない場合は、
XPRSminim(MINIM) あるいは XPRSmaxim (MAXIM)にlフラグを伴って呼ぶことでできます。
434 Invalid name passed to XPRSgetindex.
行列の行あるいは列でない名前をXPRSgetindexに渡しました。
436 Cannot trace infeasibilities when integer presolve is turned on.
XPRSminim (MINIM) / XPRSmaxim (MAXIM)にlフラグを付けて試してください。整数事前分析
は問題制約の関係により作られた上下限と同様に列タイプによって設定できます。実行不能トレ
ース機能は問題制約による実行不能についてのみ説明可能です。
473 Row classification not available.
501 Error at <line> Empty file. Read aborted.
ファイルが空のため、Optimizerは問題を読みこめません。
502 Warning: ‘min’ or ‘max’ not found at <line.col>. No objective assumed.
目的関数を指定するものがLP ファイルの<col>列や<line>行目で見つかりませんでした。目的関数を指定したい場合には、‘max’, ‘maximize’, ‘maximum’, ‘min’, ‘minimize’ や ‘minimum’が現れる
ことを確認してください。
503 Objective not correctly formed at <line.col>. Aborting.

MSI 用LPファイルの<line> 行目に指定された目的関数が正しくなかったので、Optimizerは途中終了しました。
504 No keyboard or empty problem at <line.col>.
LPファイルの<line>行目の<col>列目にエラーがあります。 ‘Subject to’, ‘subject to:’, ‘subject to’,‘such that’ ‘s.t.’, または‘st’ が見つかりません。修正してもう一度実行して下さい。
505 A keyword was expected at <line.col>.
キーワードはLP ファイルの<line>行目の<col>列目にあったようです。修正して再度実行して下さい。
506 A variable name was expected at <line.col>
右辺は定数でないため、LPファイルの<line>行目は無視されます。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 336

Error Codes 508 – 518

9

508 The constant at <line.col> has no term.
LPファイルの<line>行目の<col>列目に定義された制約条件には項がないため無視されます。
509 The type of the constraint at <line.col> has not been specified.
LPファイルの<line>行目の<col>列目に定義された制約条件は定数でないため無視されます。
510 Upper bound at <line.col> is not a numeric constant.
LPファイルの<line>行目の<col>列目に宣言された上限は定数でないため無視されます。
511 Bound at <line.col> is not a numeric constant.
LPファイルの<line>行目の<col>列目に宣言された上下界値は定数でないため無視されます。
512 Unknown word starting with an ‘f’ at <line.col>. Treated as ‘free’.
‘f’ではじまる言葉でXpress-MPに分からない言葉がLPファイルの<line>行目の<col>列目に見つかりました。その単語はXpress-MPに’ free’として読みこまれます。
513 Wrong bound statement at <line.col>.
<line>行目の<col>列目の上下界値状態は無効で無視されます。
514 Lower bound at <line.col> is not a numeric constant. Treated as -inf.
LPファイルの<line>行目の<col>列目に宣言された下限は定数ではありません。可能な限りの下限で設定し直されてXpress-MPに読まれます。
515 Sign ‘<’ expected at <line.col>.
予期されなかった記号‘<’以外の文字が LPファイルの<line>行目の<col>列目で見つかりました。
この行は無視されます。
516 Problem has not been loaded.
Xpress-MPに問題をロードすることができませんでした。このメッセージの他に更に情報を示す
エラーメッセージがないかチェックして下さい。
517 Row names have not been loaded.
Xpress-MPに行名をロードすることができませんでした。このメッセージの他に更に情報を示す
エラーメッセージがないかチェックして下さい。
518 Column names have not been loaded.
Xpress-MPに列名をロードすることができませんでした。このメッセージの他に更に情報を示す
エラーメッセージがないかチェックして下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 337

Error Codes 519 – 528

9519 Not enough memory at <line.col>.
割り当てられたメモリ全てが既に使用されているため、LPファイルの<line>行目の<col>列目の情報を読めません。仮想ページングスペースあるいは物理メモリを増やして、再度実行して下さい。
520 Unexpected EOF at <line.col>.

MSI 用LPファイルの<line>行目で、予期していないEOF文字が見つけられ、Optimizerへの問題のロード
は途中で終了しました。修正して再度実行して下さい。
521 Number expected for exponent at <line.col>.
LPファイルの<line>行目の<col>列目の入力は適切な実数でないので無視されます。
522 Line <line> too long (length>255).
LPファイルの<line>行目は長すぎるため、Optimizerへの問題のロードは途中で終了しました。その行の長さが255以内であることをチェックして再度実行して下さい。
523 Xpress-MP cannot reach line <line.col>.
LPファイルの読みこみが内部問題により失敗しました。直ちにお近くの営業所へお問い合わせ下さい。
524 Constraints could not be read into Xpress-MP. Error found at <line.col>.
LP制約の読みこみが内部問題により失敗しました。直ちにお近くの営業所へお問い合わせ下さい。
525 Bounds could not be set into Xpress-MP. Error found at <line.col>.
LP上下界値の設定が内部問題により失敗しました。直ちにお近くの営業所へお問い合わせ下さい。
526 LP problem could not be loaded into Xpress-MP. Error found at <line.col>.
LPファイルの読みこみが内部問題により失敗しました。直ちにお近くの営業所へお問い合わせ下さい。
527 Copying of rows unsuccessful.
LP行のコピーが内部問題により失敗しました。直ちにお近くの営業所へお問い合わせ下さい。
528 Copying of columns unsuccessful.
LP列のコピーが内部問題により失敗しました。直ちにお近くの営業所へお問い合わせ下さい。
Xpress-Optimizer Reference Manual Error Messages & Return Codes 338

Error Codes 529 – 530

9529 Redefinition of constraint at <line.col>.
制約条件がLPファイルの<line>行目の<col>列目で再定義されています。繰り返し定義されたものは無視されます。
530 Name too long. Truncating it.
LPファイルに64文字以上の識別子があります。最大文字数で切り捨てされます。
Xpress-Optimizer Reference Manual Log and File Formats 339

付録 A — ログとファイル形式
A.1 ファイル形式
Optimizerは求解過程の中で様々なタイプのファイルをたくさん生成したり入力します。デフォル
トでは、これらは全て３文字の拡張子がない問題名(problem_name)でファイル名が決定されます。
Optimizerに関係するファイルタイプには次のようなものがあります。
拡張子
解説ファイル タイプ.alt
行列変更ファイル。XPRSalter (ALTER)により入力されます。
ASCII
.asc
CSV形式の解ファイル。XPRSwritesol(WRITESOL) により出力されます。ASCII.bif
バイナリインタフェイス行列ファイル。XPRSreadprob(READPROB)により入力されます。
Binary.bss
XPRSreadbasis (READBASIS)により入力され、XPRSwritebasis (WRITEBASIS)により出力される基底ファイル。
ASCII
.ctp
カットプールファイル(MIPのみ)。XPRSglobalで使われます。
Binary.dir
ディレクティブファイル(MIPのみ)。XPRSreaddirs(READDIRS) により入力されます。
ASCII
.glb
グローバルファイル(MIP のみ)。XPRSglobal (GLOBAL)で使われます。
Binary.gol
目標計画入力ファイル。XPRSgoal(GOAL)により入力されます。
ASCII

MSI 用

.grp
.hdr
.iis
.lp
.mat

目標計画出力ファイル。XPRSgoal(GOAL)で出力されます。
ASCII
解ヘッダファイル。XPRSwritesol(WRITESOL) とXPRSwriterange (WRITERANGE)により入力されますASCII
IIS 出力ファイル。XPRSiis (IIS)で出力されます。
ASCII
LP形式行列ファイル。XPRSreadprob(READPROB)により入力されます。
ASCII
MPS / XMPS形式ファイル。XPRSreadprob (READPROB) により入力されます。
ASCII

Xpress-Optimizer Reference Manual XMPS Matrix Files 340

次のセクションでは、これらのいくつかのファイル形式について説明します。 CSVはカンマ区切り
値のテキストファイル形式であることを表します。

A.2 XMPS 行列ファイル
Xpress-MP OptimizerはLP またはMPS形式とその拡張であるXMPS形式の中の行列ファイルを受入れます。後者は工業標準を若干改良したものでここに詳細を示します。
XMPS形式は次のようなフィールドを定義します:
次のようなセクションが定義されます:.prt
固定形式解ファイル。XPRSwriteprtsol (WRITEPRTSOL)で出力されます。ASCII.rng
レンジファイル。XPRSrange (RANGE)で出力されます。
Binary.rrt
固定形式レンジファイル。XPRSwriteprtrange (WRITEPRTRANGE)で出力されます。
ASCII
.rsc
CSV形式レンジファイル。XPRSwriterange(WRITERANGE)で出力されます。
ASCII
.sol
解ファイル。XPRSminim (MINIM)/ XPRSmaxim (MAXIM) と XPRSglobal (GLOBAL)で出力されます。
Binary.svf
Optimizer 状態ファイル。XPRSsave (SAVE)で出力され、XPRSrestore (RESTORE)により入力されます。
Binaryフィールド 1 2 3 4 5 6
列 2–3 5–12 15–22 25–36 40–47 50–61
NAME
行列名
ROWS
行の定義を始める
COLUMNS列の定義を始める
QUADOBJ
２次目的関数の定義を始める
SETS
SOSの定義を始める
RHS
右辺の定義を始める
拡張子

解説

Xpress-Optimizer Reference Manual Log and File Formats 341

全てのセクション定義は列１から始まります。

NAMEセ ク シ ョ ン
ROWS セクションに続いて行定義を書きます。
行タイプ (フィールド1) は次の通り:
RANGES
行範囲の定義を始める
BOUNDS
上下界値の定義を始める
RECURSE
反復定義の定義を始める
ENDATA
行列の終わりを示す

ファイル タイプ

MSI 用

形式: 列 1–4 フィールド 3
NAME model_name
形式: 列 1–4
ROWS
フィールド 1 フィールド 2
type row_name
N 制約でない (目的関数に使用)
L 以下
G 以上
E 等しい
Xpress-Optimizer Reference Manual XMPS Matrix Files 342

COLUMNSセクションに続いて行列の列を書きます。つまり、１つの列の全要素は別の列が始まるまでに終わる必要があります。そこでは、列col と行row1（col，行row2の value 2）にvalue 1を入れることを示します。
フィールド5/6の組はオプションです。

QUADOBJ / QMATRIXセクション( ２ 次 計 画 の み)
２次目的関数はQUADOBJ，QMATRIXセクションを含むMPSファイルに指定されます。
固定形式XMPS
ファイルでは、セクション形式は次の通りです:または２次の項の記述が続きます。各２次の項では以下の通りです:
col1は２次の項での最初の変数で、col2が２番目の変数で、valueはQ行列と関係のある係数です。
QMATRIXセクションでは、全ての非零Q要素は指定されます。QUADOBJセクションではQ の上（または下）三角部分にある非零要素のみが指定されます。QMATRIXセクションでは、ユーザはQ行列が対称であることを確認し、QUADOBJセクションではQの対称性が推定され、足りない部分については自動的に生成されます。
形式 列 1–7
COLUMNS
フィールド1 フィールド 2 フィールド3 フィールド4 フィールド5 フィールド6
blank col row1 value1 row2 value2
形式:列1–7
QUADOBJ
形式列1–7
QMATRIX
フィールド1 フィールド 2 フィールド3 フィールド4blank col1 col2 value
Xpress-Optimizer Reference Manual Log and File Formats 343

QUADOBJとQMATRIXセクションはCOLUMNSセクションの後のどこかに置かれる必要があり、列セクションで前もって定義された列だけを含みます。問題行列内に要素のない列はCOLUMNSセクシ
ョンで費用係数（大抵0）により指定されて定義されます。

SETSセクション (整 数 計 画 の み)
このレコードは特殊順序集合（SOS）を指定するセクションを始めます。定義があるときには、
COLUMNS セクションの後、RHS セクションの前に置かなくてはなりません。この後に、下に定義するように各集合のタイプ、名前、参照行、要素を指定するレコードが続きます。
これらは連続的である必要があり、つまり１つの集合の要素は別の集合が始まる前に終わらなくてはなりません。各集合の最初のレコードでは以下の通りです：
それ以後のレコードでは：全てのレコードにおいて、 vec2はオプションです。

MSI 用集合の最初のレコードにある参照行名を空白にした場合、参照行はその次以降のレコードに含まれなくてはなりません。
形式: 列 1–4
SETS
フィールド1 フィールド 2 フィールド3 フィールド4 フィールド5 フィールド6
type set vec1 blank vec2 blanktype S1はタイプ1の特殊順序集合です
S2はタイプ2の特殊順序集合です
set は集合名ですvec1 は参照行の名前です
vec2は集合の最初の列の名前ですtype と set は空白です
vec1 と vec2 は集合要素の名前です
typeは空白です
Xpress-Optimizer Reference Manual XMPS Matrix Files 344

ここで参照入力が含まれると、それらはスケーリングされません。

RHSセクション下で定義されるように右辺が続きます:
rhs と呼ばれ、行 row1 (と行row2のvalue2の値)のvalue1の値を持つ右辺を指定します。フィールド 5/6の組はオプションです。

RANGESセクション
次に定義するように右辺範囲が続きます:
rng と呼ばれ、行row1 (と行row2のvalue2の値)のvalue1の値を持つ右辺レンジ列を指定します。フィールド 5 / 6の組はオプションです。
bがRHSセクションで与えられる値であるとすると、RANGES セクションで与えられる値がrのとき、いかなる行についても、以下のようなアクティビティ限度が適用されます:
vec1は集合要素の名前です
vec2は参照行の要素です
形式: 列1–3
RHS
フィールド1 フィールド 2 フィールド3 フィールド4 フィールド5 フィールド6
blank rhs row1 value1 row2 value2
形式: 列1–6
RANGES
フィールド1 フィールド 2 フィールド3 フィールド4 フィールド5 フィールド6
blank rng row1 value1 row2 value2
行のタイプ rの符号 上限 下限
G +
L +
E +
b r +bb br–
b r +bXpress-Optimizer Reference Manual Log and File Formats 345

BOUNDSセクション
変数に有効な上下界値が続きます:
線形計画の上下界値タイプは:整数計画には５つの追加上下界値タイプがあります:

MSI 用指定された値はとれる値の上限で、値はUP，FR，UI，SC，SI のタイプがあります。;
下限についてはLOとLIのタイプがあります。;
固定値のタイプはFX;無視されるタイプはBV，MI，PL
PIはスイッチ変数です:
下は変数を整数とし、上は変数を連続とします。非整数値がUI かLI タイプで与えられると、値の整数部分だけが使われます。
E 形式: 列 1–6
BOUNDS
フィールド1 フィールド 2 フィールド3 フィールド4タイプ ブランク 列 値
UP
上限
LO
下限
FX
変数の固定値
FR
自由変数
MI
非正 (マイナス) 変数
PL
非負 (プラス) 変数 (デフォルト)
UI
上限のある一般の整数変数
LI下限のある一般の整数変数
BV
バイナリ変数
SC
準連続変数
SI
準連続性数変数PI
部分整数変数b br+
Xpress-Optimizer Reference Manual XMPS Matrix Files 346

整数変数
バイナリ変数
部分整数変数
準連続変数: 0から上限までの整数値をとります。1を上限とする整数変数はバイナリ変数として扱えます。
: 0と1の値をとります。0/1変数とも呼ばれます。
:ある値以下では整数、それ以上では連続変数として扱われます。
: 0かある下限値から上限値の範囲の値をとります。デフォルトでは、下限が1.0です。他の正の値は明示的な下限値として指定できます。例えば、BOUNDSx .SC. 12.3
x >= 0.8
は、x は零か0.8と12.3の間の値をとれることを表します。
準 連 続 整 数 変 数 :零か下限値から有限の上限値の範囲の整数変数をとります。

RECURSEセクション( 反 復 の み)
逐次線形計画として知られている反復法は、線型計画法によりある種の非線型計画問題を解く方法
です。ＬＰ問題の係数の一部は、ＬＰ変数の最適値の関数として定義されます。ＬＰ問題が解けると、係数を再評価して再度ＬＰを解きます。適当な条件のもとで、この過程は局所最適解（必ずしも大域的最適解ではありません）に収束します。OptimizerはXMPS行列ファイルの特定のセクショ
ンにある前もって指定された関数の独立性を前提とした上で反復をできるようにします。
反復された行列要素は、MPS形式の拡張である行列ファイルのRECURSE セクションにおいてOptimizer に指定されます。反復は、XPRSrecurse (RECURSE)を用いて問題を最小化か最大化した後で実施されます。RECURSE セクションは XMPS .mat ファイル中のENDATA の前の最後のセクションに、次のような形式で反復のための要素を定義するラインと共になくてはなりません。先MSI 用の反復でのベクトルjの最適値をv(j)とします。そして、以下のように各反復によって行列要素は変更されます。a(i,j)は行i列 jの行列要素を示します。i, j, k, l, mはベクトルの名前で、j, k , lは列を表します。
DV j i c(i,j) k l a(i,j) c(i,j)*v(k) / v(l)Xpress-Optimizer Reference Manual Log and File Formats 347

注意• CV, NE, NL, DV, MU, CL, BX, SBは列2–3に、jは列5–12に、 i (あれば)は列15–22に、c(i,j) または tol(あれば)は列25–36に、k ，m (あれば) は列40–47に、 l (あれば ) は列50–57に置かなくてはなりません。c(i,j) が存在しない場合には、値を1.0と仮定します。
• 行列と上下界値要素だけが反復できます。右辺の反復はできません。
• SBは「対称上下界値」です。ベクトルxの上下界値は -U x U の形であるとし、初期上限値 UにはBOUNDSセクション（下限があっても無視します）の xの上限を採用します。両上下界値は同時に拡大，縮小されますので、常に対称のままです。
• CV要素がなければ、以下の場合に反復は停止します。
新しい目的関数値、古い目的関数、値のところで反復は最大RECMAXPASSES回実施されます。
• NEまたはNL要素がある場合、KEEPNROWSは問題が読み込まれる前に1に設定されなければなりません。
• 事前分析機能が反復と共に使われる場合、行列は各反復の開始時に事前分析され、終了時に事後分析されます。事前処理が再度最適化する時間に比べて非常に長いのであれば、事前処理をオフにした方がよいと思われます。ニュートンバリア法が使われるときは、XPRSrecurse(RECURSE)を使う前にクロスオーバーを実施してください。
MU j i c(i,j) k l a(i,j) c(i,j)*v(k)*v(l)CL j i c(i,j) k a(i,j) c(i,j)*v(k)BX j i m a(i,j) a(i,j)*EXPAND mが基底でないとき
a(i,j) a(i,j)*SHRINK mが基底のとき
SBj mUB(j) UB(j)*EXPAND mが基底でないとき
UB(j) UB(j)*SHRINK mが基底のとき
CV j tol j 現在の変数jの値と最後の繰返しでの変数jの値だったところで収束します
NE j は反復が始まる前にNタイプ行jを等式にします
NL j は反復が始まる前にNタイプ行jを「より少ない、もしくは等しい」の式にしますvnow vold – tol vold 1.0e 6 – + ( ) ⋅ <vnow vold..
objnew objold – RECSTOP objold 1.0e 6 – + ( ) ⋅ <objnew objold
Xpress-Optimizer Reference Manual ASCII Solution Files 348

ENDATAセ ク シ ョ ン
ファイルの最後のレコードです。

A.3 ASCII解ファイル
解の情報は用途に応じて様々なファイル形式でOptimizerから利用可能です。XPRSwritesol(WRITESOL) コマンドは２つのファイルproblem_name.hdrとproblem_name.ascを作成し、その出力はカンマ区切り形式フィールドで主に他のプログラムに入力するためのものです。対照的に、
XPRSwriteprtsol (WRITEPRTSOL) コマンドは固定形式出力ファイルを作成し、プリンタに直接

MSI 用送るためのものです。ファイル名は problem_name.prtです。これら３つのファイルについて、以下に説明します。
解 ヘ ッ ダ フ ァ イ ル (.hdr)
このファイルには.ascファイル（問題の各行各列のデータが入っています）を読むのに使われる
１行の文字からなるヘッダ情報が入っているだけです。この１行には次のようなカンマで区切られた14のフィールドがあります。
形式: 列 1–6
ENDATAフィールド
タイプ 字数
説明1
文字列 10行列名
2
整数型 4
問題中の行数3
整数型 6
問題中の構造列の数
4整数型 4目的関数行の番号5
文字列 3
問題の状態（下記注意参照）
6
整数型 4
最適化の方向（０：なし，１：最小化 ２：最大化）
7
整数型 6
繰返し回数
8
整数型 4
実行不能性の最終数9
実数型 12
最終の目的関数値
Xpress-Optimizer Reference Manual Log and File Formats 349

注意• 文字フィールドは文字列を２重引用符で囲んだものです• 整数フィールドは右詰めの10進数です• 実数フィールドは小数部分６桁の10進数を右詰めにしたものです• 問題の状態（フィールド５）は以下のような１文字です
Csv 形式解ファイル (.asc)
解についての大部分の情報がこのファイルには含まれます。各行、列に１行の文字列が、行を最初に入力順に並んでいます。行には次に示すような10のフィールドがあり、カンマで区切られています。
10
実数型 12
11
文字列 1012
文字列 10
13
整数型 1
14
整数型 4
O
最適解
N
実行不能
U
無限解（非有界）
Z
未完了
フィールド
タイプ 字数1
整数型 6
2
文字列 10
3
文字列 3
4
文字列 4
5
実数型 126
実数型 127
実数型 12フィールド
タイプ 字数

実行不能性の最終和
目的行名
右辺行の名前フラグ: 整数解が見つかったとき (1), その他 0行列のバージョン番号

説明
変数の入力連続番号
変数 (行または列ベクトル) 名
変数タイプ(C=列; N, L, G, E は行)
変数状態 (LL, BS, UL, EQ または**);アクティビティの値
スラックアクティビティ(行) または入力費用 (列)下限 (なければ-1000000000)
説明MSI 用Xpress-Optimizer Reference Manual ASCII Solution Files 350

注意• フィールドタイプは.hdr ファイルに同じです• 変数タイプ (フィールド 3) は次により定義されます• 変数タイプ (フィールド 4) は次により定義されます
固定形式解ファイル( .prt)
このファイルはXPRSwriteprtsol (WRITEPRTSOL) コマンドにより出力され、コンソールにおいてPRINTSOLにより表示されるのと同様の形式のものです。この形式での表示例を以下に示します。
この例はXpress-MP Essentialsガイドで使われます。
最初のセクションでは求解過程と見つかった最適解についての概要が示されます。そこでは使われた行列（問題）名（simple）と目的関数名，右辺について示されます。そして、行と列の番号が続き、そこでは最大化が実行されました。２回の繰返し（シンプレックスピボット）で解かれた結果、最適解の値は171.428571です。
8
実数型
9
実数型
10
実数型
C
構造列
N
Nタイプ行
L
Lタイプ行
G
Gタイプ行
E
Eタイプ行
LL
下限で非基底**基底で実行不能BS
基底で実行可能UL
上限で非基底EQ
等式行
SB
変数が超基底
??
不明
フィールド
タイプ

12
12
12

上限 (なければ1000000000)
双対アクティビティ（行）または被約費用（列）右辺値(行) または空白 (列)字数

説明

Xpress-Optimizer Reference Manual Log and File Formats 351

Problem Statistics
Matrix simple
Objective *OBJ*
RHS *RHS*
Problem has 3 rows and 2 structural columns
Solution Statistics
Maximization performed
Optimal solution found after 3 iterations
Objective function value is 171.428571
次に、Rows Sectionは問題の行の結果や制約を示します。
Xpress-Optimizer Reference Manual ASCII Solution Files 352

Rows Section
Number Row At Value Slack Value Dual Value RHS
N 1 *OBJ* BS 171.428571 -171.428571 .000000 .000000
L 2 second UL 200.000000 .000000 .571429 200.000000
L 3 first UL 400.000000 .000000 .142857 400.000000
最初の列は制約のタイプを表します。
L 等しいかそれ以下の制約

MSI 用E 等式制約G 等しいかそれ以上の制約
N 非拘束制約— つまり目的関数
次の列は通し番号で、制約条件の名前が続きます。At 列は制約の状態を示します。
ULはその行は上限にあることを意味します。この場合、≦型の行の値がそれを制約している右辺の値にぶつかっています。BSは制約式が効いていないため、問題から取り除いても最適値は変わりません。もし、≧型の制約式があると、LLが示されることがあり、これは制約が下限にあることを意味します。他の値には以下があります。
RHS列は原制約式の右辺で、Slack Valueは制約式が右辺値からの離れ量を示します。制約が効いている（ULまたはLL）ときは、スラックは0になります。
Dual Valueは制約の厳しさを表します。≦型の制約が上限にあれば、条件が少し緩和されると利益の増加を期待できます。双対変数値はその感触を精確に表すことのできる数値です。一般に、行の右辺の値を１増やすと、利益は行の双対値分だけよくなります。厳密に言うと、右辺をごくわず
か増やすと、利益は（限界）双対値だけ増えます。双対変数値は時々shadow pricesとして知られています。
最後に、Columns Section は列や変数の解を与えます。
Columns Section
Number Column At Value Input Cost Reduced Cost
C 4 a BS 114.285714 1.000000 .000000
C 5 b BS 28.571429 2.000000 .000000** 基底で実行不能
EQ 等式行
?? 不明
.
.
.
.

⋅
Xpress-Optimizer Reference Manual Log and File Formats 353

最初の列には列の情報であることを示すCがあります（上記行セクションと比較）。番号は通し番号です。Column と見出しがあるところは、決定変数の名前です。At は列の状態で、BSは解の状態が上限や下限から離れていることを表し、LLは下限、ULは上限にあることを示します。他に、Value 列は変数の最適値を示します。例えば、変数ａの最適値は114.285714でｂは28.571429です。Input Cost列は目的関数での変数の係数を示します。
解の最終列には変数のReduced Cost（被約費用）が示され、これは変数が上下界値から離れている—ここでは0です。変数が0ということは、製品を作ることが引き合うには単位あたりの利益が十分でないことを意味します。被約費用はこの製品を作るとすればどれだけ単位あたりの利益が増加すればよいかを示しています。あるいは、reduced costの名前が示すように、利益を減らすことなく製造するにはどれだけ製造費用が下がればよいかを示しています。

A.4 ASCII レンジファイル
レンジ（感度分析）情報をXPRSrange(RANGE)によって作成して画面表示させたり、直接ファイル
出力させることができます。このためには２つの機能、即ちXPRSwriteprtrange(WRITEPRTRANGE)とXPRSwriterange(WRITERANGE)があります。このうち、 XPRSwriterange(WRITERANGE)は、２つのファイルproblem_name.hdr と problem_name.rsc, を作ります。これらは固定フィールドで、他のプログラムへの入力向けに作られたものです。対照的に、
XPRSwriteprtrange (WRITEPRTRANGE)コマンドはプリンタヘ直接送るために作られた形式で

MSI 用情報を出力します (problem_name.rrt)。両機能で得られる情報は基本的に同じで、単に出力する目的が違います。これらのファイルの様式は以下の通りです。
**
基底で実行不能EQ
等式行
SB
変数が超基底??
不明
Xpress-Optimizer Reference Manual ASCII Range Files 354

解 ヘ ッ ダ フ ァ イ ル (.hdr)
このファイルには文字で１行のヘッダ情報が入っているだけで、.rscファイルを読むのに使われます。様式はXPRSwritesol (WRITESOL)で作られるものと同じで、上記の解ヘッダファイル (.hdr)に説明されています。
Csv 形式解ファイル (.rsc )レンジ情報の大部分がこのファイルには含まれます。問題の各行，列に１行の文字列が、行を最初に入力順に並んでいます。行には次に示すような16のフィールドがあり、カンマで区切られています。
注意• フィールドタイプは.hdrファイルと同じですフィールド
タイプ 字数
説明
1
整数型 6
変数の番号
2
文字列 10
変数 (行または列ベクトル) 名3
文字列 3
変数タイプ(C=列; N, L, G, E は行)4
文字列 4
変数状態 (LL, BS, UL, EQ または**);5
実数型 12
アクティビティの値
6
実数型 12
スラックアクティビティ(行) または入力コスト (列)7
実数型 12
下側アクティビティ
8
実数型 12
下側単位コスト9
実数型 12
下側利益
10
文字列 12
限界処理
11
文字列 4
限界(LL, UL)における限界処理状態12
実数型 12
上側アクティビティ
13
実数型 12
上側単位コスト14
実数型 12
上側利益
15
文字列 10
限界処理
16
文字列 4
限界(LL, UL)における限界処理状態
固 定 形 式 レ ン ジ フ ァ イ ル (.rrt)
このファイルはXPRSwriteprtrange (WRITEPRTRANGE) コマンドの出力で、PRINTRANGE によりコンソールに示されるものと同じ形式です。この形式については以下の例により説明し ます。
出力は３つのセクションに、概要データ、行データ、列データが示されます。このうち概要データ
については、XPRSwriteprtsol (WRITEPRTSOL)コマンド（上記参照）で得られるのと同じ情報で、以下のようなものです。
Problem Statistics
Matrix PLAN
Objective C0______RHS R0______C 構造列
N Nタイプ列
L Lタイプ列

MSI 用G Gタイプ列E Eタイプ列LL 下限で非基底** 基底で実行不能
BS 基底で実行可能
UL 上限で非基底EQ 等式行?? 不明
LL 下限で非基底
UL 上限で非基底
Xpress-Optimizer Reference Manual ASCII Range Files 356

Problem has 7 rows and 5 structural columns
Solution Statistics
Minimization performed
Optimal solution found after 6 iterations
Objective function value is 15.000000

次のセクションは問題の行や制約条件のデータを示します。各制約ごとにデータは２行に示されます。この例では、ちょうど制約１行分のデータが示されます。
Rows Section
Vector Activity Lower actvty Unit cost DN Upper cost Limiting AT
Number Slack Upper actvty Unit cost UP Process
G C1 10.000000 9.000000 -1.000000 x4 LL
LL 2 .000000 12.000000 1.000000 C6 UL
２行のうちの１行目には、行のタイプ(N, G, L.E) が行名の前に置かれます。そして、アクティビテ
ィの値が続きます。次にLower actvty 、即ちUnit cost DN 列で与えられる減少単価で、下げられるアクティビティの下限を表します。この値を超えると減少単価が変化します。Limiting
Processは、行のアクティビティが下限アクティビティを超えて減少する場合、状態が変わる列
や行の名前です。AT列は限度に達した場合の限度過程の状態を示します。LLは下限で基底から出るか入るかを表し、ULは上限で基底から出るか入るかを表します。Lower actvtyを計算する場
合、行列のRHSセクションに指定された行の下限は無視されます。
２行目は行の現在の状況と通し番号で始まります。そして、行のスラック値が示されます。次の４つのデータは、上のデータに似ています。Upper actvty の計算においては、やはり、そのアク
ティビティの上限は無視されます。
列や変数は同様に２行に示されます。例は２つ分です。
Columns Section
Vector Activity Lower actvty Unit costDN Upper cost Limiting AT
Number Input cost Upper actvty Unit costUP Lower cost Process
C x4 1.000000 -2.000000 5.000000 6.000000 C5 LL
BS 8 1.000000 3.000000 1.000000 .000000 C1 LL
C x5 2.000000 -1.000000 2.000000 6.000000 X3 LL
Xpress-Optimizer Reference Manual Log and File Formats 357

UL 9 4.000000 3.000000 -2.000000 -very large X2 LL
ベクトルタイプは常に列を表すCです。Activityは最適値です。Lower/Upper actvtyは費用係数についてInput costからUpper/Lower cost（最小化問題として）までの間を増加／減少した場合に得られるアクティビティレベルです。この計算では、列の上下限は無視されます。Unit
cost DN/UP はアクティビティをLower/Upperアクティビティにまで減少／増加させたときの目的関数の変化量です。Limiting Processes とATの意味は行の場合と同じです。２行目には列の状態と通し番号があります。列が非基底の場合には、Unit costsは常に被約費用の（絶対）値です。

MSI 用A.5 ディレクティブファイル (.dir)
このファイルは分枝の優先順位，分枝方向，擬コストを指定する任意の並びのレコードで、
XPRSreaddirs (READDIRS)コマンドを使ってOptimizer に読まれます。これはモデルファイルのDIRECTIVESセクションで作られるか、マニュアルで作成されます。デフォルトでは、
problem_name.dir.の形で名前が付きます。
ディレクティブファイルのレコード形式は以下の通りです。
列 2–3 列 5–12 列 25–36
タイプ 要素 値
PR 優先順位を与えます (値は優先順位を0-1000の整数で与えます。 1000を超えた値については受け付けられません。また実数のときは小数点以下を切り捨てて整数にします。優先順位の値は小さい方が優先的に分枝に採用されます)
UP 要素が押し上げられます (値を使用しません)
DN 要素が押し下げられます (値を使用しません)
PU 押し上げ擬コスト入力 (値がコストを与えます)PD 押し下げ擬コスト入力 (値がコストを与えます)
MC モデルカット入力 (値が使用されません)
Xpress-Optimizer Reference Manual The Matrix Alteration (.alt) File 358

要素は離散要素名（ベクトルか特殊順序集合）かマスクです。マスクは通常、指定された文字に適合する文字で構成されます。?は１文字単位、*は文字列単位を表します。*はマスクの最後にのみ置くことができます。
valueはタイプを表す値です。
例:
PR x1* 2
名前がx1で始まる離散要素（整数変数など）の優先順位を2とします。*をマスクで使うと、x1に続くの全ての文字列が該当することになります。

A.6 行列変更ファイル (.alt)
変更ファイルは行列の修正指示を含むASCIIファイルであり、XPRSalter (ALTER) コマンドを使って読まれ、デフォルトではproblem_name.altと言う名前が付けられます。各指示はファイルに別々の行に書かれてあり、最後は空白行です。指示は変更する目的関数を指定するidentifiersと、その目的関数に適用するactionsとからなります。一般に、１行で目的関数を指定し、例えば R2というのは、そのような名前が行2に割り当てられているとして、２番目の行を指定します。係数を変更するのであれば、その変数について指定します。例えばこうです。
RRRRRRRR
CCRider
2.087
これにより、行RRRRRRRR のCCRider の係数が2.087に変更されます。actionについては以下のようなものを設定可能です。

上下限の変更列の上下限を変更する場合、特定の行における上下限について各々**UP、**LOと指定します。

右辺係数の変更
行の右辺係数を変更する場合、列の値を右辺’に変えます。
Xpress-Optimizer Reference Manual Log and File Formats 359

制約タイプの変更
制約の向きが変更できます。最初に行名を与え、次にアクションである**NTx を与えます。x は次の中の１つです。

MSI 用XPRSreadprob (READPROB)の前に制御KEEPNROWSに0が設定してあると Nタイプの行はメモリ内の行列に存在できません。

A.7 グローバルログ
分枝限定木探索の間、 (XPRSglobal (GLOBAL)をご覧ください)について６つの情報項目の概要ロ
グが、nノードごとに出力されます。このnについては値をMIPLOG で設定できます。これらの項目
は以下から成ります。
このログはまた、整数実行可能解が見つかると出力されます。星印（*）がログの両側に出力され、解が見つかったことを示します。
MIPLOGが3に設定してあると、探索木の各ノードごとに８つの項目の詳細ログが出力されます。
N
新しい行タイプを制約にする
L
新しい行タイプを「より小さいか等しい」にする
G
新しい行タイプを「より大きいか等しい」にする
E
新しい行タイプを等式にする
Node
ノードの通し番号Sols見つかった整数実行可能解の数
Best Solution 見つかった整数実行可能解の一番よい値
Best Bound 見つけられる最良の整数実行可能解の限界値
Active分枝限定木探索のアクティブノード数
Time
経過時間
Branch
ノードの通し番号
Parent
このノードの親のノード番号
Xpress-Optimizer Reference Manual The Global Log 360

全てのノードに上の情報全てがあるわけではありません。LP緩和がカットオフされたときは、
BranchとParent（多分Solution）のみを表示します。LP緩和が実行不能の場合には、BranchとParent
のみが表示されます。整数解が得られれば、ログ行の前にそのことが強調して示されます。
MIPLOGが2に設定されていると、整数実行可能解だけについての詳細ログが出力されます。MIPLOG
が0か1に設定されていると、ログは表示されず、状態メッセージのみが探索の最後に示されます。
LP繰返しログは出なくなりますが、大きな計算上の困難が発生するとLP Optimizer からのメッセージが表示されます。
Solution
そのノードにおけるLP 緩和の最適値
Estimate
このノードから得られる最適整数解の推定値
Infeas整数実行不能な数
Active
探索木中のアクティブノード数
Entity
このノードから探索を続ける必要があるとき、分割する整数要素
Value / Bound 分割のため上で選ばれる要素の現在の値。UまたはLが後につきます。U(L) ならば、新しい上限（下限）を最初に適用します。つまり、この要素からの最初の分枝として押し下げる（上げる）方向とします。
Xpress-Optimizer Reference Manual Index 361

Index
A
ACTIVENODES 302
Advanced Mode（アドバンストモード） 1, 41
algorithms（解探索法） 2
default（デフォルト） 19
Newton barrier（ニュートン・バリア）も参照ください
simplex（シンプレックス法）も参照ください

MSI 用ALTER 53, 326, 358
Archimedian model（アルキメデスモデル）37
goal programming（目標計画法）も参照ください
array numbering（配列番号付け） 267
artificial variables（人為変数） 310
AUTOPERTURB 256, 290

B
BACKTRACK 25, 256, 299
BARAASIZE 302
BARCROSSOVER 302
BARDENSECOL 302
BARDUALINF 303
BARDUALOBJ 303
BARDUALSTOP 22, 257
BARGAPSTOP 22, 257, 260
BARITER 303
BARITERLIMIT 15, 258
BARLSIZE 303
BARMEMORY 258
BARORDER 21, 259
BAROUTPUT 22, 34, 259
BARPRIMALINF 303
BARPRIMALOBJ 304
BARPRIMALSTOP 22, 260
barrier method（内点法）. Newton barrier（ニュートンバリア）も参照ください
BARSTEPSTOP 22, 260
BARSTOP 304
BARTHREADS 261
basis（基底） 11, 240, 275
inversion（反転） 274
loading（ロード） 151, 163
reading from file（ファイルからの読み込み） 182
returning basis（基底のリターン） 121
batch mode（バッチモード） 5, 235
BESTBOUND 304
BIGM 261, 289
BIGMMETHOD 262
binary variables（バイナリ変数）
probing （詳細調査）282
bitmaps（ビットマップ） 112, 230
bound tightening （上下界値強化）32
BOUNDNAME 304
bounds（限度） 59, 114, 139, 226, 358
Branch and Bound（分枝限定法） 3, 23
branching（分枝） 55, 206
directions（方向） 103, 185, 357
variable（変数） 198

MSI 用BREADTHFIRST 25, 262, 287

C
C 267
CACHESIZE 21, 263
callbacks（コールバック） 33
barrier log （バリアログ）196
branching variable（分枝変数） 198
copying between problems（問題間コピー） 72
cut manager（カットマネージャ） 204
estimate function（推定機能） 206
global log（グローバルログ） 209
initialization of cut manager （カットマネージャの初期化）213
integer solutions（整数解） 214
node cutoff （ノードカットオフ） 220
node selection （ノード選択）201
optimal node （最適ノード）211, 222
output （出力）218
preprocess node（事前処理ノード） 224
separate（分割） 226
Xpress-Optimizer Reference Manual Index 362

simplex log（シンプレックスログ） 216
terminating global search（整数探索の終了） 208
Cholesky factorization（コレスキー因子分解） 21, 259, 263, 269,303
CHOLESKYALG 263
CHOLESKYTOL 263
coefficient tightening（係数強化） 32
COLS 305
columns（列）deleting（削除） 76
density（密度） 269, 302
extra columns（追加列） 270
names（名前） 48
nonzeros（非零要素） 93
ranges（レンジ） 91
returning bounds（限度のリターン） 114, 139
returning indices（添字の返却） 108
returning names（名前の返却） 115
types（タイプ） 95
comments（コメント） 285
Console Mode（コンソールモード） 1, 41
Console Xpress（コンソールXpress） 1
batch mode（バッチモード） 5
command line options（コマンドラインのオプション） 4
errors（エラー） 317
functions（機能、関数） 41
terminating optimization（最適化の終了） 15
termination（終了） 235

MSI 用control parameter（制御パラメータ） controls（制御）を参照ください
controls（制御） 43, 255
changing values（値の変更） 255
copying between problems（問題間のコピー） 73
retrieve values（値の回復） 138
retrieving values（値の回復） 102, 112setting values（値の設定） 228, 230, 234
COVERCUTS 264, 298
CPMAXCUTS 265, 328, 334
CPMAXELEMS 265, 328, 334
CPUTIME 265
CRASH 266
CROSSOVER 22, 266
crossover（クロスオーバー） 22, 190, 266, 302
CSTYLE 267
csv（カンマ区切りデータ） 340
Curtis-Reid scaling（Curtis-Reidスケーリング） 297
cut manager（カットマネージャ） 34
initialization（初期化） 213
routines（ルーチン） 36, 204
cut pool （カットプール）35, 46, 77, 205, 226, 328
bounds（限定，限度） 236
cuts（カット） 153, 238, 265
lifted cover inequalities 264
list of cuts（カットリスト） 98
list of indices（添字リスト） 96
number of coefficients（係数の数） 265
cut strategy（カット戦略） 268
CUTDEPTH 267
CUTFREQ 267
cutoff （カットオフ，足切り）24, 26, 220, 280, 281, 283, 307
CUTS 79, 305
cuts（カット） 35, 46, 226, 325, 327
deleting（削除） 78
generation（生成） 267
Gomory cuts（Gomoryカット） 273, 299
list of active cuts（アクティブカットリスト） 100
model cuts（モデルカット） 162
CUTSTRATEGY 268
cutting planes（カット面）cutsを参照くださいDdefault algorithm（デフォルトアルゴリズム） 268
DEFAULTALG 19, 177, 268
degradation（劣化） 25, 34, 206, 269, 293, 299
DEGRADEFACTOR 269
DENSECOLLIMIT 21, 269
Devex pricing（Devexプライシング）pricingを参照ください

MSI 用

directives（ディレクティブ，指示，指令） 11, 25, 103, 165, 326, 328
loading（ロード） 154
read from file（ファイルからの読み込み） 184
dongles（ダングル） 4dual values（双対値） 11
DUALINFEAS 305
Xpress-Optimizer Reference Manual Index 363

E
ELEMS 305
ELIMTOL 269
ERRORCODE 306, 318
errors（エラー） 43, 219, 231, 285, 306, 317
checking （チェック）149
messages（メッセージ） 34
ETATOL 270
exit codes（終了コード） return codes（リターンコード）を参照ください
EXTRACOLS 30, 270, 329, 333
EXTRAELEMS 30, 54, 271, 327, 333
EXTRAMIPENTS 30, 271, 334
EXTRAPRESOLVE 31, 272, 329
EXTRAROWS 30, 272, 325, 333

F
fathoming（深さ測定） 23
feasible region（実行可能領域） 19
FEASTOL 273
files（ファイル）
alter (.alt) （変更） 53, 339
basis (.bss) （基底）182, 240, 324, 339
binary matrix (.bif) （バイナリ行列）4, 326, 339
cut pool (.ctp) （カットプール）339
directives (.dir) （ディレクティブ）25, 184, 339, 357
formats（様式） 339
global (.glb) （大域的探索）143, 191, 320, 339
goal input (.gol) （目標入力）144, 339
goal output (.grp) （目標出力）339
IIS (.iis) （既約実行不可能集合）147, 339
initialization (.ini) （初期化）4log (.log) （ログ）10
LP matrix (.lp) （LP行列）1, 187, 339
Matrix Alteration (.alt) （行列変更）358
MPS matrix (.mat) （MPS行列）187, 285, 339, 340
OMNI format （OMNI形式）242
password (.pwd) （パスワード）4, 149
range (.rng) （レンジ）92, 129, 180, 340
range output (.rrt) （レンジ出力） 180, 246, 355
range output (.rsc) （レンジ出力）250, 340, 354
save/restore (.svf) （保存）191, 193, 340

MSI 用solution (.asc) （解）252, 339, 349
solution (.prt) （解）248, 340, 350
solution (.sol) （解）4, 32, 191, 324, 340
solution header (.hdr) （解ヘッダ）250, 252, 339,348
FIXGLOBAL 83, 181
Forrest-Hirst-Tomlin Criterion（Forrest-Hirst-Tomlin基準） 25, 256
Fortran（フォートラン） 267
ftran 86G
GLOBAL 10, 11, 84, 141, 175
global entities（離散要素） 308, 315
branching（分枝） 55
extra entities （追加要素）271
fixing （固定）83
loading（ロード） 155, 167
global log（グローバルログ） 209, 359
global search（グローバル探索） 23, 24, 34, 80, 310, 335
begin search（探索開始） 141
branching variable（分枝変数） 198
callbacks（コールバック） 34
directives（ディレクティブ） 11, 184
infeasible node（実行不能コード） 211
integer solutions（整数解） 214
MIP solution status（混合型整数計画問題状態） 309
node selection（ノード選択） 201
reinitialize search（最初期化探索） 150
termination（終了） 208, 280, 283
GOAL 37, 144
goal programming（目標計画法） 37, 144, 328
using constraints（制約） 37
using objective functions（目的関数） 39
GOMCUTS 273, 299

H
Haverly Systems（Haverlyシステム） 243
HELP 146
Hessian matrix（ヘシアン行列） 65, 68, 126
Xpress-Optimizer Reference Manual Index 364

I
IIS （既約実行不可能集合） 306
IIS 16, 147, 306
infeasibility（実行不能） 16, 19, 140, 147, 291, 335
diagnosis（診断） 298
integer（整数） 17, 308
node（ノード） 211
infinity（無限） 45
initialization（初期化） 4, 88, 149, 328
integer preprocessing（整数事前分析） 27, 282

MSI 用

integer presolve（整数事前分析） 335
integer programming（整数計画） 2, 23, 32
integer solutions（整数解） 275, 278, 308, 309
begin search（探索開始） 141
branching variable（分枝変数） 198
callback（コールバック） 214
cutoff （カットオフ、足切り）220
loading quadratic problem（２次問題のロード） 167
node selection（ノード選択） 201
reinitialize search（最初期化探索） 150
retrieving information（情報の復帰） 105
terminating search（探索終了） 208
global search（整数探索）も参照くださいinterior point algorithm（内点法） Newtonbarrier（ニュートンバリア）を参照くださいinversion（反転） 20
INVERTFREQ 20, 274
INVERTMIN 20, 274
irreducible infeasible sets（可約実行不能集合） 16, 278, 306
begin search（探索開始） 147
retrieving （復帰）107
sub-IIS isolation（部分既約実行不可能集合分離）16
iteration log（繰返しログ） 276

K
KEEPALLCUTS 264
KEEPBASIS 275
KEEPMIPSOL 143, 253, 275
KEEPNROWS 276, 359

Llicense（ライセンス） 9
lifted cover inequalities 298
line length（ライン幅） 337
log file（ログファイル） 231
logical preprocessing（論理事前処理） 282
LP relaxation（LP緩和） 23, 360
LPITERLIMIT 15, 31, 276, 319
LPLOG 21, 34, 216, 276
LPOBJVAL 12, 306
LPSTATUS 307

M
Markowitz tolerance（マルコヴィッツ許容範囲） 269, 277
MARKOWITZTOL 277
matrix（行列）adding names（名前追加） 10
changing coefficients（係数変更） 53, 61, 63, 69
column bounds（列の上下界値） 59
columns（列） 29, 44, 76, 305
constraint senses（制約意味） 53

MSI 用cuts（カット） 305
deleting cuts（カット削除） 78
elements（要素） 290
extra elements（追加要素） 270, 271, 272
input （入力）10, 159, 186
modifying（改良） 29, 30
nonzeros（非零要素） 93, 130
quadratic elements（２次要素） 312
range（レンジ） 70
rows（列） 29, 71, 81, 313
scaling（スケーリング） 194
sets（集合） 314
size（サイズ） 31
space（スペース） 31
spare columns（予備列） 314
spare elements（予備要素） 314, 333
spare global entities（予備離散要素） 315
spare rows（予備行） 315
viewing（検討） 29
MATRIXNAME 307
Xpress-Optimizer Reference Manual Index 365

MATRIXTOL 277
MAXCUTTIME 277
MAXIIS 16, 107, 147, 278
MAXIM 11, 175
MAXMIPSOL 278
MAXNODE 278
MAXPAGELINES 279
MAXSLAVE 279
MAXTIME 15, 31, 279
memory （メモリ） 82, 85, 291, 319, 320, 322, 326
MINIM 11, 175
MIPABSCUTOFF 280
MIPABSSTOP 280
MIPADDCUTOFF 26, 281
MIPENTS 308
MIPINFEAS 308
MIPLOG 34, 281, 359
MIPOBJVAL 12, 308
MIPPRESOLVE 27, 282
MIPRELCUTOFF 26, 283
MIPRELSTOP 283
MIPSOLNODE 308
MIPSOLS 309
MIPSTATUS 309
MIPTARGET 25, 256, 284
MIPTOL 284
model cuts（モデルカット） 185

MSI 用MPS file format （MPSファイル形式） 285
filesも参照ください
MPSBOUNDNAME 284
MPSECHO 285
MPSERRIGNORE 285
MPSFORMAT 285
MPSNAMELENGTH 286
MPSOBJNAME 286
MPSRANGENAME 286
MPSRHSNAME 287

N
NAMELENGTH 310
Newton barrier （ニュートンバリア）21, 175
controlling performance（性能操作） 21
convergence criterion（収束基準） 22, 304
crossover（クロスオーバー） 22
log callback（ログコールバック） 196
number of iterations（繰返し回数） 15, 21, 258
number of threads（スレッド回数） 261
output（出力） 22, 34
NODEDEPTH 310
NODES 310
nodes（ノード） 24
active cuts（アクティブノード） 100, 153
cut routines（カットルーチン） 204
deleting（削除） 80
deleting cuts（カット削除） 78
depth（深さ） 310
infeasibility（実行不能） 211
maximum number （最大数）278
number solved 310
optimal （最適）222
outstanding （未検討）302
parent node （親ノード）78, 311
prior to optimization（事前処理） 224
selection（選定） 24, 34, 201, 287
separation（分離） 226
NODESELECTION 25, 262, 287
nonbinding rows（非束縛行） 276
nonlinear programming（非線型計画） 189
numerical difficulties（数値困難） 360

O
objective function（目的関数） 19, 29, 284, 286, 310,311
changing coefficients（係数変更） 67
dual value（双対値） 303
optimum value（最適値） 12, 306, 308
primal value （主値）304

MSI 用quadratic（２次問題） 29, 65, 68, 167, 171
retrieving coefficients（係数復帰） 117
OBJFIXED 67, 310
OBJNAME 311
OBJRHS 311
Xpress-Optimizer Reference Manual Index 366

OBJSENSE 311
OMNI format （OMNI形式）242
OMNIDATANAME 287
OMNIFORMAT 288
optimal basis（最適基底） 11, 22, 36
OPTIMALITYTOL 288
optimization（最適化）
standard template（標準テンプレート） 9
optimization sense（最適化意図） 311
Optimizer output（Optimizer出力） 10, 20, 22, 218
OUTPUTLOG 219, 231, 247, 249, 288
OUTPUTMASK 251, 253, 289
OUTPUTTOL 289

P
parallel MIP（並列MIP） 279
PARENTNODE 311
partial pricing（部分プライシング） pricing（プライシング）を参照ください
PENALTY 289
performance（性能） 31, 325, 327
PERTURB 256, 290
pivot （ピボット） 178, 296, 334
list of variables（変数リスト）119
order of basic variables（基底変数順序） 118
PIVOTTOL 290
postoptimal analysis（事後分析） 180
postsolve （事後分析） 31
PPFACTOR 290
pre-emptive model（先制モデル） 37
goal programming（目標計画）も参照ください
PRESOLVE 31, 54, 291, 323, 326
presolve（事前分析） 16, 29, 31, 174, 269, 272, 291,298, 326, 329
diagnosing infeasibility（実行不能診断） 16
integer（整数） 27
presolved problem（事前分析済み問題） 133
basis（基底） 121, 163
directives（ディレクティブ，指示，指令） 103, 165
PRESOLVEOPS 292
PRESOLVESTATE 29, 312
pricing（プライシング） 292
Devex 20, 292, 322
partial 20, 290, 292
PRICINGALG 20, 292, 322

MSI 用primal infeasibilities（主実行不能） 303, 312, 315
PRIMALINFEAS 312
PRINTRANGE 247
PRINTSOL 249
priorities（優先度） 103, 185, 321, 357
problem（問題）creation（作成） 75
deletion（削除） 82
file access（ファイルアクセス） 186, 244
input（入力） 10, 159
name（名前） 4, 125, 232
pointers（ポインタ） 10
solving （求解）11, 175
problem attributes（問題特性） 11, 301
prefix （接頭辞）301
retrieving values（復帰値） 101, 111, 137
problem pointers（問題ポインタ） 75
copying（コピー） 74
deletion（削除） 82
pseudo cost（擬コスト） 25, 103, 185, 293, 299, 357
PSEUDOCOST 293

Q
QELEMS 312
quadratic programming（２次計画問題） 329, 330
coefficients（係数） 65, 68, 126, 312
loading global problem（整数計画問題のロード） 167
loading problem（問題のロード） 171
QUIT 179, 235

R
RANGE 11, 84, 180, 246, 250
RANGENAME 312
ranging（レンジ） 11, 70, 71, 91, 312
information（情報） 11, 180
name（名前） 286
retrieve values（値の復帰） 128, 129
READBASIS 11, 182
Xpress-Optimizer Reference Manual Index 367

READDIRS 11, 184, 357
READPROB 10, 18, 186
RECCONVERGE 313
RECEXPAND 293
RECMAXPASSES 293, 320
RECSHRINK 294
RECSTOP 294
RECURSE 189
recursion （反復）189, 294, 313, 320, 323, 326
convergence （収束）294

MSI 用

reduced costs（被約費用） 11, 83, 282, 288
REFACTOR 295
REL10STYLE 295
relaxation（緩和）LP relaxation（LP緩和）を参照ください
RELPIVOTTOL 296
RESTORE 191
return codes（リターンコード） 43, 179, 235, 317
RHSNAME 313
right hand side（右辺） 69, 127
name（名前） 287
ranges（レンジ） 180
retrieve range values（レンジ値の復帰） 128
rounding errors（使用回エラー） 17
ROWS 313
rows（行）
addition（追加） 50
deletion（削除） 81
extra rows（追加行） 272, 315
indices 108
model cuts（モデルカット） 162
names（名前） 48, 115
nonbinding（非束縛） 276
nonzeros（非零要素） 130
number （番号）313
types（タイプ） 71, 132
running time（計算時間） 279

S
SAVE 191, 193
SBBEST 296
SBITERLIMIT 296
SCALE 18, 194
SCALING 18, 195, 297
scaling（スケーリング） 17, 194, 325, 327
Curtis-Reid 297
geometric mean（幾何平均） 297
maximum element （最大要素）297
security system（セキュリティシステム） 9, 330
sensitivity analysis（感度分析） 84
separation（分離） 23
SETMEMBERS 314
SETS 314
sets（集合） 308, 314
names（名前） 52
shadow prices（シャドウプライス） 181
simplex（シンプレックス法） 19, 22, 175
inversion（反転） 20
log callback（ログコールバック） 216

MSI 用number of iterations（繰返し回数） 15, 313
output（出力） 20, 34
perturbation （摂動）256
pivot （ピボット） pivot（ピボット）を参照ください
type of crash（クラッシュタイプ） 266
SIMPLEXITER 313
slacks（スラック） 79
slave processors（従プロセッサ） 279
solution（解） 11, 12, 15
beginning search（探索開始） 175
output（出力） 135, 248, 252
SOLUTIONFILE 32, 297
SOSREFTOL 298
SPARE
COLS 314
SPAREELEMS 314
SPAREMIPENTS 315
SPAREROWS 315
special ordered sets（特殊順序集合） 3, 155, 167
STOP 179, 235
strong branching（強力な分枝） 296
student mode（スチューデントモード） 4, 325
sub-IIS isolation（部分既約実行不可能集合分離） 16
successive linear programming（逐次線形計画）（反転）を参照ください
SUMPRIMALINF 315
Xpress-Optimizer Reference Manual Index 368

Ttightening（強化）bound（限度，上下界値） 32
coefficient（係数） 32
tolerance（許容範囲） 273, 277, 280, 284, 288, 289,290, 296
TRACE 16, 298
tracing（トレーシング） 335
tree search（木探索）global search（整数探索）を参照ください
TREECOVERCUTS 298
TREEGOMCUTS 299

Uunboundedness（非有界，無限解） 17, 23, 140Vvariables（変数）artificial（人為） 310
binary（バイナリ） 3, 155, 167, 346
dual （双対）109
infeasible（実行不能） 133
integer（整数） 3, 155, 167, 346
partial integer（部分整数） 3, 62, 155, 167, 346

MSI 用primal （主）109
selection （選択）24
semi-continuous（半連続） 3, 62, 155, 167, 346
semi-continuous integer（反連続整数） 3, 62, 155,167
slack（スラック） 11, 79
VARSELECTION 25, 299
VERSION 299
version number （バージョン番号）299

W
warning messages （警告メッセージ）34
WRITEBASIS 11, 240
WRITEOMNI 242
WRITEPROB 244
WRITEPRTRANGE 11, 246
WRITEPRTSOL 11, 248
WRITERANGE 11, 250
WRITESOL 11, 252, 348

X
Xpress-BCL 3
Xpress-Mosel 3
Xpress-MP Essentials 4, 12
XPRS_MINUSINFINITY 45, 78, 96
XPRS_PLUSINFINITY 45
XPRSaddcols 30, 44
XPRSaddcuts 35, 46
XPRSaddnames 10, 45, 48
XPRSaddrows 30, 50
XPRSaddsetnames 52
XPRSalter 53, 326, 358
XPRSbranchcut 55
XPRSbtran 57
XPRSchgbounds 30, 59
XPRSchgcoef 30, 61
XPRSchgcoltype 30, 62
XPRSchgmcoef 30, 61, 63
XPRSchgmqobj 30, 65
XPRSchgobj 30, 67, 332
XPRSchgqobj 30, 68
XPRSchgrhs 30, 69
XPRSchgrhsrange 30, 70
XPRSchgrowtype 30, 71
XPRScopycallbacks 72, 74
XPRScopycontrols 73, 74
XPRScopyprob 32, 74
XPRScreateprob 10, 75
XPRSdelcols 30, 76
XPRSdelcpcuts 36, 77
XPRSdelcuts 35, 77, 78

MSI 用XPRSdelnode 80
XPRSdelrows 30, 81
XPRSdestroyprob 10, 75, 82
XPRSetcbmessageVB 219
XPRSfixglobal 83, 181
XPRSfree 10, 85
XPRSgetbanner 88
Xpress-Optimizer Reference Manual Index 369

XPRSgetbasis 89
XPRSgetcolrange 30, 91
XPRSgetcols 30, 93
XPRSgetcoltype 30, 95
XPRSgetcpcutlist 36, 96
XPRSgetcpcuts 36, 98
XPRSgetcutlist 36, 100
XPRSgetdblattrib 12, 101, 301
XPRSgetdblcontrol 102
XPRSgetdirs 103
XPRSgetglobal 105
XPRSgetiis 16, 107
XPRSgetindex 108, 335
XPRSgetinfeas 109
XPRSgetintattrib 12, 111, 301
XPRSgetintcontrol 112, 255
XPRSgetlasterror 113
XPRSgetlb 30, 114
XPRSgetnames 29, 115
XPRSgetobj 29, 117, 332
XPRSgetpivotorder 118
XPRSgetpivots 119
XPRSgetpresolvebasis 33, 121
XPRSgetpresolvesol 123
XPRSgetprobname 125
XPRSgetqobj 29, 126
XPRSgetrhs 29, 127
XPRSgetrhsrange 29, 128
XPRSgetrowrange 29, 129
XPRSgetrows 29, 130
XPRSgetrowtype 29, 132
XPRSgetscaledinfeas 33, 133
XPRSgetsol 11, 32, 135
XPRSgetstrattrib 12, 137, 301
XPRSgetstrcontrol 138
XPRSgetub 30, 139
XPRSgetunbvec 140
XPRSglobal 10, 11, 84, 141, 150, 175
XPRSgoal 37, 144
XPRSiis 16, 107, 147
XPRSinit 9, 75, 85, 88, 149

MSI 用XPRSinitglobal 142, 150
XPRSloadbasis 11, 151
XPRSloadcuts 35, 153
XPRSloaddirs 154
XPRSloadglobal 10, 155
XPRSloadlp 10, 159
XPRSloadmodelcuts 162
XPRSloadpresolvebasis 33, 163
XPRSloadpresolvedirs 33, 165
XPRSloadqglobal 10, 167
XPRSloadqp 10, 171
XPRSloadsecurevecs 174
XPRSmaxim 11, 175
XPRSminim 11, 175
XPRSpivot 178
XPRSrange 11, 84, 91, 129, 180, 246, 250
XPRSreadbasis 11, 182
XPRSreaddirs 11, 184, 357
XPRSreadprob 10, 18, 186
XPRSrecurse 189, 313
XPRSrestore 191
XPRSsave 191, 193
XPRSscale 18, 194
XPRSsetcbbarlog 22, 34, 196
XPRSsetcbchgbranch 34, 198
XPRSsetcbchgnode 34, 201
XPRSsetcbcutlog 203
XPRSsetcbcutmgr 36, 204
XPRSsetcbestimate 34, 206
XPRSsetcbfreecutmgr 36, 208
XPRSsetcbgloballog 34, 209
XPRSsetcbinfnode 34, 211
XPRSsetcbinitcutmgr 36, 213
XPRSsetcbintsol 34, 214
XPRSsetcblplog 21, 34, 216
XPRSsetcbmessage 10, 34, 218, 231
XPRSsetcbnodecutoff 34, 220
XPRSsetcboptnode 34, 222
XPRSsetcbprenode 34, 224
XPRSsetcbsepnode 34, 55, 226
XPRSsetdblcontrol 228
XPRSsetdefaults 229
XPRSsetintcontrol 230, 255
Xpress-Optimizer Reference Manual Index 370

XPRSsetlogfile 10, 21, 22, 231
XPRSsetprobname 232
XPRSsetstrcontrol 234
XPRSstorebounds 236
XPRSstorecuts 36, 238

MSI 用XPRSwritebasis 11, 240
XPRSwriteomni 242
XPRSwriteprob 244
XPRSwriteprtrange 11, 246
XPRSwriteprtsol 11, 248
XPRSwriterange 11, 250
XPRSwritesol 11, 252, 348
XPRSwriteprtsol 11, 248
XPRSwriterange 11, 250
XPRSwritesol 11, 252, 348