1

Ampl モデル ソフトウェアの問題を解決しました。結果を出力するには、コードを Java または C# に変換する必要があります。javaでamplモデルコードを表現するにはどうすればよいですか。ライブラリはありますか?javaとc#で目的関数を表し、関数を最大化するにはどうすればよいですか? これについて私を助けてください。

私の AMPL コード:

param i;    #Supply
param j;    #Demand
param k;    #Time

var x{1..i,1..j,1..k} binary;

maximize z_flow : sum{a in 1..k} (x[1,1,a]+x[1,5,a] +  x[2,1,a]+x[2,3,a] + x[3,2,a]+x[3,3,a] + x[4,1,a]+ x[4,2,a] + x[4,4,a] + x[5,2,a]+x[5,3,a]);

subject to supply1cons{a in 1..k} : (x[1,1,a] + x[1,5,a]) <= 1;
subject to supply2cons{a in 1..k} : (x[2,1,a] + x[2,3,a]) <= 1;
subject to supply3cons{a in 1..k} : (x[3,2,a] + x[3,3,a]) <= 1;
subject to supply4cons{a in 1..k} : (x[4,1,a] + x[4,2,a] + x[4,4,a]) <= 1;
subject to supply5cons{a in 1..k} : (x[5,2,a] + x[5,3,a]) <= 1;

subject to demand1cons{a in 1..k} : (x[1,1,a] + x[2,1,a] + x[4,1,a]) <= 1;
subject to demand2cons{a in 1..k} : (x[3,2,a] + x[4,2,a] + x[5,2,a]) <= 1;
subject to demand3cons{a in 1..k} : (x[2,3,a] + x[3,3,a] + x[5,3,a]) <= 1;
subject to demand4cons{a in 1..k} : (x[4,4,a]) <= 1;
subject to demand5cons{a in 1..k} : (x[1,5,a]) <=1;

subject to cap1 : sum{a in 1..k}(x[1,1,a]) = 2;
subject to cap2 : sum{a in 1..k}(x[1,5,a]) = 8;
subject to cap3 : sum{a in 1..k}(x[2,1,a]) = 3;
subject to cap4 : sum{a in 1..k}(x[2,3,a]) = 4;
subject to cap5 : sum{a in 1..k}(x[3,2,a]) = 1;
subject to cap6 : sum{a in 1..k}(x[3,3,a]) = 7;
subject to cap7 : sum{a in 1..k}(x[4,1,a]) = 5;
subject to cap8 : sum{a in 1..k}(x[4,2,a]) = 2;
subject to cap9 : sum{a in 1..k}(x[4,4,a]) = 6;
subject to cap10 : sum{a in 1..k}(x[5,2,a]) = 4;
subject to cap11 : sum{a in 1..k}(x[5,3,a]) = 3;
4

3 に答える 3

4

AMPL はモデリング言語であり、合理的な労力でモデルを作成できます。

次に、AMPL 環境は、実際に問題を解決するソルバー(必要に応じてバックエンド) を呼び出します。問題を解決するのは AMPL ではありません。

あなたの問題は幸いなことに単純なので、モデリング言語の部分をあきらめることができます。それでも、問題を解決してくれるソルバーが必要です。

あなたの問題は、バイナリ整数プログラミングの問題です。整数変数を処理できる線形計画法ソルバーが候補です。ソルバーは通常、C または C++ で記述されるため、Java または C# インターフェイスを備えたものが必要です。

最後に、ソルバーに付属の API を使用して問題をコーディング/ビルドします。


候補者:

こちらもご覧ください

于 2012-12-12T10:09:21.303 に答える
0

あなたの質問には、(C#) プログラムからのモデリングと呼び出しの 2 つの部分があります。他の人が指摘したように、AMPL はモデリング言語です。AMPL のようなモデリング言語を使用する場合は、プログラムから呼び出す必要があります。現在、AMPL には API がありませんが、スクリプトを使用して AMPL を呼び出すことができます。AIMMS と MPL には、他のプログラムから呼び出すことができる API がありますが、それぞれのモデリング言語でモデルを書き直す必要があります。

もう 1 つのオプションは、ソルバー API を直接呼び出すことです。CPLEX や Gurobi などの多くのソルバーには、C# プログラムから直接モデルを構築して解決できる .NET API があります。

(免責事項: 私は現在 Gurobi Optimization で働いており、以前は CPLEX を提供する ILOG で働いていました)。

于 2012-12-24T22:51:44.740 に答える
0

あなたは試すかもしれません

最適化フレームワーク

これは、モデリングを行うことができる無料のプロジェクトであり、AMPL Dat および Mod ファイルをモデルに読み込むこともできます。CPLEX、Gurobi、MOPS などで解決できます。

Optimization Frameworkは AMPL を使用せず、GNU Mathprog を使用してモデル インスタンスを構築します。MathProg は AMPL のサブセットであるため、AMPL モデルの 80% ~ 90% はそのまま実行されます。

これは学術的なプロジェクトであることを念頭に置いてください。そのため、安定して商用利用できるとは期待しないでください。

于 2013-01-08T14:27:57.177 に答える