割り当て問題
課題質問の標準形式
代入問題の数学モデル
非標準形式の代入問題
代入問題に対するハンガリー語の解法の一般的な手順
上記の手順は理解しにくいため、理解を容易にするためにいくつかの例を示します。
ハンガリーのソリューションの例
これは比較的わかりやすい例です。手順に従ってください。
少し複雑な例をもう 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 の特定の要素の分布を示します。