1

私は林業で最適化を行っており、一連の企業 C が収穫エリア セット I からいくつかの品揃えセット A からいくつかの材木を差し引く可能性があります。パラメーター x[I,J,V,T,C,A ] 変数は、時間 T に車両 V を使用して、品揃え A の会社 C を使用して、収穫エリア I から製材所 J までの流れを表します。

私が抱えている問題は、各製材所が最小要件 d_minus に準拠しなければならないことです。これは次の場所で行われます。

# The total flow into a node at time period t must exceed the minimum demand.
subject to Constraint2 {j in J, t in T, p in T, c in C, a in A: p <> t}:
    sum{v in V, i in I} x[i,j,v,p,c,a] >= d_minus[j,t,c,a];

問題は、車両 V が次のようにモデル化された特定の容量を持っていることです。

# The flow must not exceed the total capacity for each vehicle and time period  
subject to Constraint6 {v in V, t in T}:
   sum{i in I, j in J, c in C, a in A} x[i,j,v,t,c,a] <= capacity[v];

ただし、これによりコンパイラは、constraint2 での不可能な境界について不平を言います。例えば

presolve: constraint Constraint2[1,1,6,1,3] cannot hold:
body >= 1000 cannot be <= 273; difference = 727

4台の車両を使用し、各車両の容量は40です(400と1000も使用してみましたが、エラーが残りました)。d_minus パラメータは 500 から 1000 の間です。

パラメータが狭すぎてはいけないと私は考えています。1000 の容量を使用すると、3 台の車両フリートのニーズを満たす必要があります。「すべての」制約がソリューションを制限し、エラーを引き起こしていると思います。Constraint2 に「for all t in T, j in J」を使用してみましたが、d_minus の添え字が見つかりません。誰にも手がかりはありますか?

よろしく

4

1 に答える 1

1

コマンドを使用して、事前解決後solexpandに制約を表示することをお勧めします。Constraint2[1,1,6,1,3]

solexpand Constraint2[1,1,6,1,3];

これにより、何が実行不可能になっているのかについての洞察が得られるかもしれません。問題は単一の制約にあるため、非常に大きな制約式がない限り、それほど難しくないはずです。その場合、データセットを可能な限り小さくして実行不可能になることをお勧めします。

于 2014-10-24T16:58:28.597 に答える