0

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

私の疑問は、次の式のようにバイナリ変数を指数に入れることはできますか? また、この問題を解決するときに「product(pi)」を使用して利用できますか? いくつかの例を調査しましたが、この 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;
4

2 に答える 2

1

わかりませんが、SCIP や opti ツールボックスを調べてみてください。(またはYALMIP)。(またはコイン。)

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

于 2014-05-14T15:04:34.020 に答える