代入問題を解くためのハンガリー語アルゴリズムを学習する

割り当て問題

ここに画像の説明を挿入

課題質問の標準形式

ここに画像の説明を挿入

代入問題の数学モデル

ここに画像の説明を挿入

非標準形式の代入問題

ここに画像の説明を挿入

代入問題に対するハンガリー語の解法の一般的な手順

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
上記の手順は理解しにくいため、理解を容易にするためにいくつかの例を示します。

ハンガリーのソリューションの例

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
これは比較的わかりやすい例です。手順に従ってください。
少し複雑な例をもう 1 つ示します。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

割り当て問題に対するコンピュータによる解決策

整数計画問題は、Lingo などの特別なソフトウェアを使用して解決できます。一般的な整数計画問題の場合、Matlab 関数を直接使用することはできず、分枝限定解と切断面解を実装するには Matlab プログラミングを使用する必要があります。ただし、代入問題などの特殊な整数計画問題の場合は、Matlab の関数 linprog を直接使用できる場合があります。
MATLAB を使用して次の代入行列を解きます。
ここに画像の説明を挿入

c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5; 8 4 2 3 5;9 10 6 9 10];
c=c(:);
 %把矩阵c转化为25维列向量
a=zeros(10,25);
%10表示有5行5列的共10个约束(行列xij的和=1)25表示有25种xij类型
for i=1:5
    a(i,(i-1)*5+1:5*i)=1;
    a(5+i,i:5:25)=1;%每行每列相加等于一
end     
%此循环把指派问题转化为线性规划问题
b=ones(10,1);
[x,y]=linprog(c,[],[],a,b,zeros(25,1),ones(25,1));
%zeros(25,1),ones(25,1)指的是取值要么是0要么去1
X=reshape(x,5,5)
%把x变成5*5的矩阵
opt=y

実行結果
ここに画像の説明を挿入
: コードをよりよく理解するために、行列 a の特定の要素の分布を示します。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Luohuasheng_/article/details/128511087