Anda di halaman 1dari 5

Fungsi [Matching, Biaya] = Hungaria (Perf)

%
% [MATCHING, BIAYA] = Hungarian_New (bobot)
%
% Pencocokan Fungsi untuk menemukan bobot sisi minimum yang diberikan Edge MxN
% Bobot matriks berat menggunakan Algoritma Hungaria.
%
Sebuah% berat tepi Inf menunjukkan bahwa pasangan simpul yang diberikan oleh per
usahaan
Posisi% tidak memiliki tepi yang berdekatan.
%
% MATCHING kembali matriks MxN dengan orang-orang di tempat yang matching dan
% Nol di tempat lain.
%
% BIAYA mengembalikan biaya pencocokan minimum
% Ditulis oleh: Alex Melin 30 Juni 2006
% Inisialisasi Variabel
Matching = nol (ukuran (Perf));
% Menyingkat Matrix Kinerja dengan menghapus setiap simpul tidak terhubung ke
% Meningkatkan kecepatan algoritma
% Cari nomor di setiap
num_y = sum (~ isinf
% Cari nomor di setiap
num_x = sum (~ isinf

kolom yang terhubung


(Perf), 1);
baris yang terhubung
(Perf), 2);

% Cari kolom (simpul) dan baris (simpul) yang terisolasi


x_con = find (num_x ~ = 0);
y_con = find (num_y ~ = 0);
% Merakit Publikasi Kinerja Matrix
P_size = max (panjang (x_con), panjang (y_con));
P_cond = nol (P_size);
P_cond (1: length (x_con), 1: length (y_con)) = Perf (x_con, y_con);
jika IsEmpty (P_cond)
Biaya = 0;
kembali
akhir
% Pastikan bahwa pencocokan sempurna ada
% Hitung bentuk Matrix Ujung
Tepi = P_cond;
Tepi (P_cond ~ = Inf) = 0;
% Cari kekurangan (CNUM) di Matrix Ujung
cnum = min_line_cover (Ujung);
% Proyek simpul tambahan dan tepi sehingga cocok sempurna
% ada
Pmax = max (max (P_cond (P_cond ~ = Inf)));
P_size = panjang (P_cond) + cnum;
P_cond = orang (P_size) * Pmax;
P_cond (1: length (x_con), 1: length (y_con)) = Perf (x_con, y_con);
% *************************************************
% UTAMA PROGRAM: KONTROL YANG LANGKAH YANG DILAKSANAKAN
% *************************************************

exit_flag = 1;
stepnum = 1;
sementara exit_flag
beralih stepnum
kasus 1
[P_cond, stepnum] = step1 (P_cond);
kasus 2
[r_cov, c_cov, M, stepnum] = step2 (P_cond);
kasus 3
[c_cov, stepnum] = step3 (M, P_size);
kasus 4
[M, r_cov, c_cov, Z_r, Z_c, stepnum] = step4 (P_cond, r_cov, c_cov, M);
kasus 5
[M, r_cov, c_cov, stepnum] = step5 (M, Z_r, Z_c, r_cov, c_cov);
kasus 6
[P_cond, stepnum] = step6 (P_cond, r_cov, c_cov);
kasus 7
exit_flag = 0;
akhir
akhir
% Hapus semua satelit virtual dan target dan uncondense yang
% Matching dengan ukuran kinerja matriks asli.
Matching (x_con, y_con) = M (1: length (x_con), 1: length (y_con));
Biaya = sum (sum (Perf (Matching == 1)));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%
% LANGKAH 1: Tentukan jumlah terkecil nol di setiap baris
% Dan mengurangi minimum yang dari barisnya
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%
Fungsi [P_cond, stepnum] = step1 (P_cond)
P_size = panjang (P_cond);
% Loop, melalui penerapan setiap baris
untuk ii = 1: P_size
Rmin = min (P_cond (ii, :));
P_cond (ii, :) = P_cond (ii,:) - Rmin;
akhir
stepnum = 2;
%
%
%
%

************************************************* *************************
LANGKAH 2: Cari nol di P_cond. Jika tidak ada angka nol berbintang di nya
Kolom atau baris mulai nol. Ulangi untuk setiap nol
************************************************* *************************

Fungsi [r_cov, c_cov, M, stepnum] = step2 (P_cond)


% Tentukan variabel
P_size = panjang (P_cond);
r_cov = nol (P_size, 1); % A vektor yang menunjukkan jika berturut-turut tert
utup
c_cov = nol (P_size, 1); % A vektor yang menunjukkan jika kolom ditutupi
M = nol (P_size); % Sebuah masker yang menunjukkan jika posisi dibintangi ata
u prima
untuk ii = 1: P_size
untuk jj = 1: P_size

jika P_cond (ii, jj) == 0 && r_cov (ii) == 0 && c_cov (jj) == 0
M (ii, jj) = 1;
r_cov (ii) = 1;
c_cov (jj) = 1;
akhir
akhir
akhir
% Re-inisialisasi vektor penutup
r_cov = nol (P_size, 1); % A vektor yang menunjukkan jika berturut-turut tert
utup
c_cov = nol (P_size, 1); % A vektor yang menunjukkan jika kolom ditutupi
stepnum = 3;
%
%
%
%

************************************************* *************************
LANGKAH 3: Tutup setiap kolom dengan nol bintangnya. Jika semua kolom
Tertutup maka pencocokan maksimum
************************************************* *************************

Fungsi [c_cov, stepnum] = step3 (M, P_size)


c_cov = sum (M, 1);
jika sum (c_cov) == P_size
stepnum = 7;
lain
stepnum = 4;
akhir
% ************************************************* *************************
% LANGKAH 4: Cari nol noncovered dan perdana itu. Jika tidak ada starred
% Nol di baris yang berisi ini prima nol, Pergi ke Langkah 5.
% Jika tidak, meliputi baris ini dan mengungkap kolom yang berisi
% Yang dibintangi nol. Lanjutkan dengan cara ini sampai tidak ada
% Nol terungkap kiri. Menyimpan nilai uncovered terkecil dan
% Pergi ke Langkah 6.
% ************************************************* *************************
Fungsi [M, r_cov, c_cov, Z_r, Z_c, stepnum] = step4 (P_cond, r_cov, c_cov, M)
P_size = panjang (P_cond);
zflag = 1;
sementara zflag
% Cari nol uncovered pertama
baris = 0; col = 0; exit_flag = 1;
ii = 1; jj = 1;
sementara exit_flag
jika P_cond (ii, jj) == 0 && r_cov (ii) == 0 && c_cov (jj) == 0
row = ii;
col = jj;
exit_flag = 0;
akhir
jj = jj + 1;
jika jj> P_size; jj = 1; ii = ii + 1; akhir
jika ii> P_size; exit_flag = 0; akhir
akhir
% Jika tidak ada nol terungkap pergi ke langkah 6
jika baris == 0
stepnum = 6;
zflag = 0;

Z_r = 0;
Z_c = 0;
lain
% Perdana nol uncovered
M (baris, col) = 2;
% Jika ada nol berbintang di baris yang
% Tutup baris dan mengungkap kolom yang berisi nol
jika sum (menemukan (M (baris,:) == 1)) ~ = 0
r_cov (baris) = 1;
zcol = find (M (baris,:) == 1);
c_cov (zcol) = 0;
lain
stepnum = 5;
zflag = 0;
Z_r = baris;
Z_c = col;
akhir
akhir
akhir
% ************************************************* *************************
% LANGKAH 5: Buatlah serangkaian bolak prima dan dibintangi nol sebagai
% Berikut. Biarkan Z0 mewakili ditemukan prima nol ditemukan pada Langkah 4.
Biarkan% Z1 menyatakan membintangi nol di kolom Z0 (jika ada).
Biarkan% Z2 menyatakan prima nol dalam deretan Z1 (ada akan selalu
% Menjadi salah satu). Lanjutkan sampai seri berakhir pada nol prima
% Yang tidak memiliki membintangi nol dalam kolomnya. Redupkan setiap berbintang
% Nol dari seri, masing-masing membintangi prima nol dari seri, menghapus
% Semua bilangan prima dan mengungkap setiap baris dalam matriks. Kembali ke Lan
gkah 3.
% ************************************************* *************************
Fungsi [M, r_cov, c_cov, stepnum] = step5 (M, Z_r, Z_c, r_cov, c_cov)
zflag = 1;
ii = 1;
sementara zflag
% Cari nomor indeks yang membintangi nol dalam kolom
rindex = find (M (:, Z_c (ii)) == 1);
jika rindex> 0
Simpan% yang dibintangi nol
ii = ii + 1;
% Simpan deretan nol berbintang
Z_r (ii, 1) = rindex;
% Kolom dari membintangi nol adalah sama dengan kolom
% Prima nol
Z_c (ii, 1) = Z_c (ii-1);
lain
zflag = 0;
akhir
Lanjutkan% jika ada membintangi nol di kolom nol prima
jika zflag == 1;
% Cari kolom dari nol prima di babak berbintang nol baris
cindex = find (M (Z_r (ii),:) == 2);
ii = ii + 1;
Z_r (ii, 1) = Z_r (ii-1);
Z_c (ii, 1) = cindex;
akhir
akhir

% Redupkan semua nol berbintang di jalan dan STAR semua nol prima
untuk ii = 1: length (Z_r)
jika M (Z_r (ii), Z_c (ii)) == 1
M (Z_r (ii), Z_c (ii)) = 0;
lain
M (Z_r (ii), Z_c (ii)) = 1;
akhir
akhir
Batal% selimut
r_cov = r_cov * 0.;
c_cov = c_cov * 0.;
% Hapus semua bilangan prima
M (M == 2) = 0;
stepnum = 3;
% ************************************************* ************************
% LANGKAH 6: Tambah nilai uncovered minimum untuk setiap elemen masing-masing te
rtutup
% Baris, dan kurangi dari setiap elemen setiap kolom ditemukan.
% Kembali ke Langkah 4 tanpa mengubah apapun bintang, bilangan prima, atau garis
tertutup.
% ************************************************* *************************
Fungsi [P_cond, stepnum] = step6 (P_cond, r_cov, c_cov)
a = find (r_cov == 0);
b = find (c_cov == 0);
minval = min (min (P_cond (a, b)));
P_cond (menemukan (r_cov == 1), :) = P_cond (menemukan (r_cov == 1), :) + minval
;
P_cond (:, menemukan (c_cov == 0)) = P_cond (:, menemukan (c_cov == 0)) - minval
;
stepnum = 4;
Fungsi cnum = min_line_cover (Ujung)
Langkah 2%
[r_cov, c_cov, M, stepnum] = step2 (Ujung);
Langkah 3%
[c_cov, stepnum] = step3 (M, panjang (Ujung));
Langkah 4%
[M, r_cov, c_cov, Z_r, Z_c, stepnum] = step4 (Edge, r_cov, c_cov, M);
% Hitung kekurangan
cnum = panjang (Ujung) -sum (r_cov) -sum (c_cov);
Google Terjemahan untuk Bisnis:Perangkat PenerjemahPenerjemah Situs WebPeluang P
asar Global

Anda mungkin juga menyukai

  • MH
    MH
    Dokumen5 halaman
    MH
    MohammadMuchtarMahfudz
    Belum ada peringkat
  • Deret Fourier Revisi
    Deret Fourier Revisi
    Dokumen8 halaman
    Deret Fourier Revisi
    MohammadMuchtarMahfudz
    Belum ada peringkat
  • Tinjauan Pustaka M-File
    Tinjauan Pustaka M-File
    Dokumen4 halaman
    Tinjauan Pustaka M-File
    MohammadMuchtarMahfudz
    Belum ada peringkat
  • Translate Munkres
    Translate Munkres
    Dokumen4 halaman
    Translate Munkres
    MohammadMuchtarMahfudz
    Belum ada peringkat
  • Daftar Pustaka
    Daftar Pustaka
    Dokumen1 halaman
    Daftar Pustaka
    MohammadMuchtarMahfudz
    Belum ada peringkat
  • Daftar Isi
    Daftar Isi
    Dokumen4 halaman
    Daftar Isi
    MohammadMuchtarMahfudz
    Belum ada peringkat
  • Cover PKL
    Cover PKL
    Dokumen2 halaman
    Cover PKL
    MohammadMuchtarMahfudz
    Belum ada peringkat
  • Bab I Bingung
    Bab I Bingung
    Dokumen2 halaman
    Bab I Bingung
    MohammadMuchtarMahfudz
    Belum ada peringkat