提交 07647159 编写于 作者: EO-severus's avatar EO-severus

更新Others'Code/Matching Algo/DeferAccpet_alg.m, Others'Code/Matching Algo/GaleShapley.m

已删除DeferAccpet_alg.m
上级 78cbe69b
%��CSDN���ҵĸǶ��������㷨���ӳٽ��ܣ��������ο��Լ�д��Ultra dense..��2019��һ�ĵĸ��ִ���
%��Դ��https://blog.csdn.net/fancyTang/article/details/107390001
clc;clear;
%% ����ƫ�þ��󲢵���ƥ���㷨
Num = 6;
M = zeros(Num,Num);
F = zeros(Num,Num);
for i=1:Num
M(i,:) = randperm(Num);
F(i,:) = randperm(Num);
end
[pairing_vec,conv_vec,time,sta] = DAalg(M,F) %ֱ�����
%% Gale-Shapleyƥ���㷨������
function [pairing_vec,conv_vec,time,sta]=DAalg(PL_matr1,PL_matr2)
%time--��������;sta--�ȶ���
[m1,n1] = size(PL_matr1);%woman
[m2,n2] = size(PL_matr2);%man
pairing_vec = zeros(m1,m2);%��ʼ����Խ��
number_min = min(m1,m2);%�������б��еĽ�Сֵ���������ٵ�һ��
%number_max = max(m1,m2);%�������б��еĽϴ�ֵ
% man_flag = zeros(1,m2);%���mani�Ƿ����
% woman_flag = zeros(1,m1);%���womanj�Ƿ����
man_reject = ones(1,m2);%���man���ܾ�
man_rejection_list = zeros(m2,n2);%���man�ľܾ��б�
woman_proposal_list = zeros(m1,n1);%���woman�Ŀ�ѡ�б�
% index = 0;index1 = 0;index2 = 0;
num = 1;
while( number_min > nozero(pairing_vec) )%�����ٵ�һ������Ŀ��������Ծ����еķ�����Ŀʱ����ѭ�����
%index1 = 0;index2 = 0;
for i = 1:m2
mark_reject = man_reject(1,i);
index1 = 0;%index2 = 0;
if (mark_reject == 1) %&&(man_flag(1,i) == 0)) %���mani���ܾ�
for j = 1:m1
if (man_rejection_list(i,j) == 0) %&&(woman_flag(1,j) == 0))%���womanjδ�ܾ�mani
index = PL_matr2(i,j); % ͳ��mani��womanj��ϲ���̶�
if index > index1
index1 = index;
%index2 = j;
end
man_reject(1,i) = 0; %���maniΪδ�ܾ�
%break;
end
end
for j = 1:m1
%if woman_flag(1,j) == 0
if PL_matr2(i,j) == index1
woman_proposal_list(j,i) = 1;%�ҵ���maniϲ���̶�����womanj������mani����womanj�Ŀ�ѡ��
%man_reject(1,i) = 0; %���maniΪδ�ܾ�
%break;
else
continue;
end
%end
end
else
continue;
end
end %����woman_proposal_list
%index1 = 0;index2 = 0;
for j = 1:m1
woman_proposal = sum(woman_proposal_list(j,:));
index1 = 0 ;%index2 = 0 ;
if (woman_proposal ~= 0)%&&(woman_flag(1,j) == 0)) %���woman�Ŀ�ѡ�б�����0�����п�ѡ����
for i = 1:m2
%if man_flag(1,i) == 0
if (woman_proposal_list(j,i) == 1)
index = PL_matr1(j,i); % ͳ��mani��womanj��ϲ���̶�
if (index > index1) %&& (man_flag(1,i) == 0))
index1 = index;
%index2 = i;
end %�ҵ���womanjϲ���̶�����mani
end
%end
end
for i = 1:m2
%if man_flag(1,i) == 0
if (woman_proposal_list(j,i) == 1)
if (PL_matr1(j,i) ~= index1)%����womanj����ϲ���̶�����man֮�������man�����Ƴ�
woman_proposal_list(j,i) = 0; %��ѡ���б����Ƴ�
man_reject(1,i) = 1;%���Ϊ���ܾ�
man_rejection_list(i,j) = 1;%���뱻�ܾ��б�
else
continue;
end
else
continue;
end
% else
% continue;
% end
end
else
continue;
end
woman_proposal = sum(woman_proposal_list(j,:));
index3 = 0;
index4 = 0;
if(woman_proposal > 1)%Ů���Ŀ�ѡ�б���ֹ��һ�������Ǵ�ʱֻ�ܱ���һ��
for i = 1:m2
if (woman_proposal_list(j,i) == 1)
index2 = PL_matr1(j,i);
if index2 > index3
index3 = index2 ;
index4 = i;
end
else
continue;
end
end
for i = 1:m2
if(i ~= index4)
woman_proposal_list(j,i) = 0; %��ѡ���б����Ƴ�
man_reject(1,i) = 1;%���Ϊ���ܾ�
man_rejection_list(i,j) = 1;%���뱻�ܾ��б�
end
end
end
end %��֤woman_proposal_listÿһ��ֻ��һ��1
pairing_vec = woman_proposal_list;%%�������
%man_rejection_list = zeros(m2,n2);%���man�ľܾ��б�
%woman_proposal_list = zeros(m1,n1);%���woman�Ŀ�ѡ�б�
conv_vec = pairing_vec;
num = num+1;
end
time = num;
sta1 = 0;
sta2 = 0;
for i = 1:m1
for j = 1:m2
if (woman_proposal_list(i,j) == 1)
sta1 = sta1+woman_proposal_list(i,j)*PL_matr1(i,j);
end
end
end
for i = 1:m2
for j = 1:m1
if (woman_proposal_list(i,j) == 1)
sta2 = sta2+woman_proposal_list(i,j)*PL_matr2(i,j);
end
end
end
sta = sta1 + sta2;
% sta = sum(sum(PL_matr1*woman_proposal_list))+sum(sum(PL_matr2*(woman_proposal_list')));
% plot(x,y);
function result=nozero(A) %������з�������ĺ���
B = (A~=0);
result=sum(B(:));
end
end
%% ���ӻ�
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册