3

次のように定義された Rest という変数があります。

var Rest{I,J,T} >= 0;

ここで、T は期間のセットで、I と J はアークです。T = 0 の場合、I と J のすべての値が 0 でなければならないことを定義する必要があります。I は供給ノードのセットであり、J は需要ノードのセットです。

私はもう試した:

let Rest[*,*,0] default 0;

しかし、構文エラーが発生しました。:= と : の両方を使用して、.dat ファイルと .mod ファイルの両方でこれを試しました。

これも.datファイルに入れようとしました

var Rest default 0:=
[*,*,0] 1 City1 0;

しかし、それは私にエラーを与えました

Error at _cmdno 3 executing "solve" command
(file amplin, line 286, offset 11443):
error processing constraint Constraint1[1,'Leveaniemi',1]:
invalid subscript Rest[1,'City1',0]

前もって感謝します!

編集:私は今使用します:

var Rest default 0 :=
  [*,*,0] 1 Leveaniemi 0;

私にエラーを与える

Error at _cmdno 3 executing "solve" command
(file amplin, line 286, offset 11438):
error processing constraint Constprocessing commands.
Executing on neos-3.neos-server.org
Error (2) in /opt/ampl/ampl -R amplin

(NEOS サーバー、Gurobi ソルバーを使用しています)。これはどういう意味ですか?また、変数 Rest をそのように宣言すると、すべての Rest ソリューションが 0 になりますか? それとも、コンパイラはそれを開始値として解釈しますか?

編集: vitaut が提供するソリューションを実装しようとしました。ただし、その返信の下のコメントに示されているように、機能しませんでした。T を次のように定義したので、私はそれを考えました:

set T := 1 2 3 ... 15;

t = 0 で let ステートメントを実行したかったので、それを考慮して、Rest を次のように定義する必要があります。

var Rest{I,J,TimeT};

ここで、TimeU は T であり、要素が 0 のみのセットです。つまり、TimeU は次のように解釈されます。

TimeU := 0 1 2 3 ... 15;

ただし、これらを修正すると、コンパイラは、すべての変数とパラメーターが既に定義されていると不平を言います。

4

1 に答える 1

3

let コマンドの正しい構文は次のとおりです。

let {i in I, j in J} Rest[i, j, 0] := 0;

ただし、最適化プロセス中に変更される可能性のある変数に開始値が割り当てられます。Rest[i, j, 0]常にゼロに等しくしたい場合は、代わりに制約を使用する必要があります。

s.t. c{i in I, j in J} Rest[i, j, 0] = 0;
于 2015-01-17T20:00:13.223 に答える