1

この時点までのアプリケーションは、GLPSOL バージョン 3.1を使用して動作します。これは、MIP 問題が提供されると、 Status (St)列とMarginal列を含む解を出力します。

新しいバージョンにアップグレードする必要がありましたが、現在、同じ問題により、ソリューション ファイルにこれらの列が欠けているだけでなく、これらの違いが示されています。

元のソリューション ファイル:

Problem:    _jx1
Rows:       43
Columns:    27 (27 integer, 27 binary)
Non-zeros:  96
Status:     INTEGER OPTIMAL
Objective:  31 (MAXimization)

新しいソリューション ファイル:

Problem:    _jx1
Rows:       42
Columns:    27
Non-zeros:  87
Status:     OPTIMAL
Objective:  C0 = 31 (MAXimum)

さらに、ソルバーはいくつかのデータ行を切り取っているようです。

問題の解決に最も近いのは、ソルバーを--nompsパラメータで実行することです。これにより、前述のデータ列が得られますが、異なる結果が得られます。

問題は、ソリューションがパーサーに渡されることであり、パーサーをいじる必要があるのは最後の手段です (いずれにせよ、データ列がないということは、必要なすべての情報が得られないことを意味します)。解析用)。

だから私の質問は2つあります:

  1. なぜこうなった?
  2. 以前と同じ結果が得られるようにソルバーを設定するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

1. これは基本的に、混合整数問題に限界値がないために発生しています。バージョン 4.9 では、開発者は MIP ソルバーを変更しましたが、新しいソルバーは自動的に「限界」を計算しないと思います。

2. 一般的な方法は、MIP アルゴリズムを使用して整数変数の最適値を計算し、MIP ソリューションに固定された整数変数で同じ問題の周辺を使用することです。

これは、glpsol とコマンド ライン オプションだけでは実行できません。コードで独自に機能を実装する必要があります。GLPK ソースコードにはglp_mpl_postsolve関数が存在し、ソリューションの後処理のために問題のソリューションも処理します。おそらく同様の方法で計算を実装できます。

于 2015-04-27T08:05:23.480 に答える