2

次の形式で連立方程式を解こうとしています。

a5 + a6 + a7 + f5 + f6 + f7 = 11;
b5 + b6 + b7 + e5 + e6 + e7 = 100;
c5 + c6 + c7 + d5 + d6 + d7 = 100;

a5 + b5 + c5 + d5 + e5 + f5 = 11;
a6 + b6 + c6 + d6 + e6 + f6 = 100;
a7 + b7 + c7 + d7 + e7 + f7 = 100;

ここで、すべての変数と数字はバイナリです。

Matlabでこれを行う方法はありますか?

たとえば、2 進数を 10 進数に置き換えると、次のようになります。

a5 + a6 + a7 + f5 + f6 + f7 = 3;
b5 + b6 + b7 + e5 + e6 + e7 = 4;
c5 + c6 + c7 + d5 + d6 + d7 = 4;

a5 + b5 + c5 + d5 + e5 + f5 = 3;
a6 + b6 + c6 + d6 + e6 + f6 = 4;
a7 + b7 + c7 + d7 + e7 + f7 = 4;

未知数は整数であるべきであり、間隔[0:1]からであることをMatlabに何らかの方法で伝えますか?


A x = b 形式は次のとおりです。

A = [1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1;
0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0;
0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0;
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0;
0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0;
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1];

b = [3 4 4 3 4 4];

次のステップは何ですか?

4

1 に答える 1

0

最適化ツールボックスがある場合は、bintprog。

複数の解が存在する可能性があるため、合計が最小になる解を選択します。

>> A = [1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1;
0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0;
0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0;
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0;
0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0;
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1];

>> b = [3 4 4 3 4 4];

>> bintprog(ones(1,18),[],[],A,b)
Optimization terminated.
ans =
     0
     1
     1
     1
     1
     1
     1
     1
     1
     1
     0
     0
     0
     0
     1
     0
     1
     0
于 2012-06-10T20:46:03.317 に答える