/ /指数変数による非線形整数計画法の解法 - matlab、数学的最適化、非線形最適化、整数計画法

指数変数を使用した非線形整数計画の解法 - 数学的最適化、非線形最適化、整数プログラミング

みんな。 私は自分の研究のためにいくつかの公式を作ります。私はこの問題を解決することができるどんなツールでもあるかどうか尋ねたいです。 GLPKやMATLABツールボックスなど、いくつかのツールを調査します。しかし、私の公式は非線形のようです。私はインターネット上でいくらかの情報を見つけます、それは0-1整数計画法と呼ばれる整数計画法の1つの特別な場合です。

私の疑問は: 次の式のように2進変数を指数に入れることができますか?そして、この問題を解決するときに "productπ"を使って利用できますか?いくつか例を挙げてみますが、この2つの使用法は見つかりませんでした。

変数はXc、n、m、s、iです。また、Lc、n、Tmax、Tm、Pm、s、i、Dc、n、k、Bmはすべて既知の数です。

誰かが私にこの問題についていくつか提案をすることができますか?読んでくれてありがとう!

私は絵を更新して、私の式にAMPL言語を使うことを試みます。

ここに画像の説明を入力

    #AMPL model language

#known numbers
param L{c in 0..C, n in 0..N};
param Tmax;
param T{m in 0..M};
param P{m in 0..M, s in 0..S, i in 0..I};
param D{c in 0..C, n in 0..N, k in 0..K};

#binary variable
var X{c in 0..C, n in 0..N, m in 0..M, s in 0..S, i in 0..I} binary;

#objective function
maximize answer: sum{c in 0..C} r[c];

#two subjections
subject to s1{s in 0..S, i in 0..I}:
sum{c in 0..C}sum{n in 0..N}sum{m in 0..M} X[c,n,m,s,i] <= 1;

subject to s2{c in 0..C, n in 0..N}:
L[c,n]+Tmax >= sum{m in 0..M}sum{s in 0..S}sum{i in 0..I}T[m]*X[c,n,m,s,i] >= L[c,n];

#where (I am not sure is it wright to write like this? Can somebody give me a hint?)
V[c,n]=prod{k in 0..N}(prod{m in 0..M}prod{s in 0..S}prod{i in 0..I} P[m,s,i])^X[c,n,m,s,i])^D{c,n,k};
r[c]=prod{n in 0..N}V[c,n]*(sum{m in 0..M}sum{s in 0..S}sum{i in 0..I}T[m]*X[c,n,m,s,i]);

指数関数から変数Xを削除するために論理制約を使用した修正

    ### model_c.mod ###
set C;
set N;
set M;
set S;
set I;
set K;

param Tmax;  #known numbers
param L{c in C, n in N};
param T{m in M};
param P{m in M, s in S, i in I};
param D{c in C, n in N, k in K};

var X{c in C, n in N, m in M, s in S, i in I} binary;  #binary variable
var Y{c in C, n in N};

maximize answer:
(sum{c in C}(prod{n in N}(prod{k in K}Y[c,n]^D[c,n,k])*(sum{m in M}sum{s in S}sum{i in I}T[m]*X[c,n,m,s,i]))); #objective function

subject to s1{c in C, n in N, m in M, s in S, i in I}:
Y[c,n]=Y[c,n]*((P[m,s,i]-1)*X[c,n,m,s,i]+1);

subject to s2{s in S, i in I}:
sum{c in C}sum{n in N}sum{m in M} X[c,n,m,s,i] <= 1;

subject to s3{c in C, n in N}:
L[c,n]+Tmax >= sum{m in M}sum{s in S}sum{i in I}T[m]*X[c,n,m,s,i] >= L[c,n];

### model_c.dat ###
data;
set C:= count1, count2;
set N:= frame1, frame2;
set M:= M1, M2;
set S:= sub1, sub2;
set I:= i1, i2;
set K:= k1, k2;

param Tmax:=30;


param L: frame1 frame2:=
count1     2      3
count2     4      5;


param T:=  M1 10
M2 20;


param P:=
[*,*,i1]: sub1 sub2 :=
M1   0.9 0.8
M2   0.7 0.6

[*,*,i2]: sub1 sub2 :=
M1   0.9 0.8
M2   0.7 0.6;


param D:=
[*,*,k1]: frame1 frame2 :=
count1 1 0
count2 0 1

[*,*,k2]: frame1 frame2 :=
count1 1 0
count2 1 1;

回答:

回答№1は1

私は知りませんが、おそらくSCIPや最適なツールボックス(あるいはYALMIP)を見てください(あるいはコイン)。

私の経験では、Matlabでビルドするのはかなり面倒です。たぶんそれは.lp / .mps / .whatever出力ファイルを作成し、ファイルを解析するMatlabから.exeを開始する方が簡単でしょう。


回答№2の場合は1

実際、あなたのモデルは指数項なしで再定式化できると私には思えます。項$ P ^ x $は実際には$ x = 0 $の場合$ 1 $、$ x = 1の場合$ P $に等しい論理制約に帰着します。 $。

だから私の提案は、指数項を代入するためにいくつかの補助変数$ y $を導入し、それから論理制約を設定することです。

結果のモデルはまだ巨大なMINLPです:あなたはおそらくCouenne(無料)やBaron(商業)のようなソルバーが必要です。

更新

実際には、もっと簡単です。

y_(m、s、i)=(P_(m、s、i)-1)x_(c、n、m、s、i)+ 1

それから、V_(c、n)を定義する巨大な積の中でy "を使います。ご覧のように、x = 0で1、x = 1でPとなります。

このようにすれば、条件付き制約は必要ありません。

とにかく、次回は、このような問題を数学のオーバーフローについて投稿することをお勧めします。