Tải bản đầy đủ (.pdf) (14 trang)

thiết kế đánh giá thuật toán đề tài thuật toán chấp nhận trì hoãn daa và bài toán hôn nhân bền vững

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (849.23 KB, 14 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>ĐẠI HỌC QUỐC GIA HÀ NỘITRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN</b>

TIỂU LUẬN MÔN HỌC

<b>THIẾT KẾ & </b>

<b>ĐÁNH GIÁ THUẬT TOÁN</b>

ĐỀ TÀI: THUẬT TOÁN CHẤP NHẬN TRÌ HỖN ( DAA) VÀBÀI TỐN HƠN NHÂN BỀN VỮNG

Giảng viênLê Trọng Vĩnh Sinh viên thực hiện

Nguyễn Văn HuyTrần Văn ĐôngNguyễn Quang Khải

<small>1</small>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>MỤC LỤC</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>I. Lời mở đầu</b>

Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu và có nhiều ứng dụng hiện đại.Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất từ những năm đầu của thế kỷ18 bởi nhà toán học lỗi lạc người Thụy Sĩ Leonhard Euler. Chính ơng là người đã sửdụng đồ thị để giải bài toán nổi tiếng về các cái cầu ở thành phố Konigsberg. Từ đó lýthuyết đồ thị ngày càng khẳng định được vị trí quan trọng trong việc áp dụng để giải quyếtcác bài toán thực tế nhờ vào việc tìm ra ngày càng nhiều các định lý, cơng thức và thuậttoán. Các bài toán, thuật toán trong lý thuyết đồ thị khơng những có nhiều ứng dụngtrong thực tế mà nó cịn giúp cho chúng ta mơ tả một cách dễ dàng các bài toán phức tạpcụ thể, để từ đó có thể mã hóa các bài tốn đó vào máy tính.

Thuật tốn ghép cặp trong lý thuyết đồ thị là một ví dụ cụ thể: Thuật tốn ghép cặp đạtđược những thành cơng nhất định và được áp dụng tại nhiều nước châu Âu là thuật toánđược nghiên cứu bởi hai nhà khoa học David Gale và Lloyd Shapley. Thuật toán này đãđược giới thiệu và đăng tải trên một tạp chí tốn học vào năm 1962. Sau này, thuật tốncịn được biết đến với tên gọi thuật toán Gale-Shapley

Thực tế các lĩnh vực trong cuộc sống có liên quan đến giao dịch có yêu cầu ghép cặp là rất nhiều như: ghép cặp giữa các cặp đôi trong trung tâm môi giới hôn nhân, ghép cặp trong trường hợp hiến và ghép tạng; phân công công tác cho các sinh viên tốt nghiệp ngành y tới các bệnh viện, công tác tuyển sinh đại học…

Trong các lĩnh vực nêu trên, ở nước ta việc áp dụng thuật toán ghép cặp vào các lĩnh vực đó là chưa nhiều và chưa phổ biến mặc dù có rất nhiều lĩnh vực giao dịch có yêu cầu. Tuyển sinh đại học cũng là một trong nhiều lĩnh vực có yêu cầu giao dịch ghép cặp, đặc biệt là trong khâu tuyển sinh Đại học.

Vì vậy sau đây nhóm em xin trình bày về thuật tốn Gale-Shapley hay được gọi là thuật tốn chấp nhận trì hỗn (DAA) và bài tốn hơn nhân bền vững. Bên cạnh đó cịn là một số bài tốn ứng dụng liên quan như phân bổ học sinh, tuyển sinh đại học, …

<small>3</small>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>II. Lời cảm ơn</b>

Đầu tiên, nhóm chúng em xin gửi lời cảm ơn chân thành đến khoa Cơ-Tin, trường Đại học Khoa học Tự nhiên đã tạo điều kiện thuận lợi chochúng em học tập và hoàn thành đề tài này.

Toán-Đặc biệt, chúng em xin chân thành cảm ơn thầy Lê Trọng Vĩnh, người đãgiúp đỡ và hướng dẫn tận tình chúng em suốt thời gian học tập trong tình hìnhkhó khăn của bệnh dịch vừa qua, bên cạnh đó cũng cung cấp cho chúng emnhững kiến thức để tiếp cận, phân tích, và giải quyết vấn đề. Nhờ đó mà chúngem hồn thành được cơng việc của mình một cách tốt hơn. Chúng em cũng xincảm ơn những người bạn đã tận tình chỉ bảo, giúp đỡ trong q trình hồnthành học phần.

Chúng em đã vận dụng tối đa những kiến thức mà mình có được trong kìhọc vừa qua để hồn thành đề tài của nhóm. Nhưng do kiến thức vấn cịn hạnchế và chưa có nhiều kinh nghiệm nên khó có thể tránh được những thiếu sóttrong q trình thực hiện đề tài. Chúng em mong nhận được những góp ý, phêbình của thày để đề tài của nhóm chúng em được hồn thiện hơn.

Chúng em xin chân thành cảm ơn thầy !

<small>4</small>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>II.Giới thiệu bài tốn </b>

<b>1. Bài tốn hơn nhân bền vững là gì ? </b>

Trong tốn học và khoa học máy tính <b>bài tốn hơn nhân bền vững SMP</b> ( ) yêu cầutìm một <b>cặp ghép bền vững</b> giữa các phần tử của hai tập hợp theo thứ tự ưu tiên của mỗiphần tử. Một cặp ghép là một ánh xạ từ các phần tử của tập hợp này tới các phần tử của tậphợp kia. Một cặp ghép là bền vững nếu hai điều kiện sau không đồng thời xảy ra:

a. Một phần tử của tập hợp thứ nhất thích phần tử của tập hợp thứ hai hơn phần tửA Bđược ghép với A, và

b. B cũng thích hơn phần tử được ghép với A B

Nói cách khác, một tổ hợp ghép là bền vững nếu không tồn tại cặp (A, B) trong đó cảA và B đều thích phần tử kia hơn phần tử được ghép với chúng.

Bài toán hơn nhân bền vững thường được phát biểu như sau:

Có người đàn ông và phụ nữ, trong đó mỗi người xếp hạng tất các mọi người khácn ngiới từ 1 đến theo thứ tự ưu tiên, cần tìm cách tổ chức hơn nhân sao cho không tồn tại hainngười khác giới yêu nhau hơn vợ/chồng của họ. Nếu không tồn tại những người như vậythì tất cả các cuộc hơn nhân được xem là "bền vững."

<b>2. Lịch sử bài toán </b>

Hai người đầu tiên nghiên cứu về bài tốn Hơn nhân bền vững (Stable Marriage Problem) là Lloyd Stowell Shapley (2/6/1923 – 12/3/2016) – nhà Toán học người Mỹ với nhiều cống hiến quan trọng trong lĩnh vực Lý thuyết trò chơi, giải Nobel Kinh tế 2012- và David Gale (13/12/1921 – 7/3/2008) – nhà Toán học, Kinh tế học người Mỹ, giáo sư danh dự tại University of California, Berkeley. Những năm 1960, Shapley và Gale quan sátthực tiễn và nhận thấy: rất nhiều hành vi của loài người liên quan đến việc ghép đơi, tạo mối quan hệ, ví dụ như đưa gặp gỡ kí kết hợp đồng giữa người mua và người bán hay tuyển sinh. Họ bắt đầu nghiên cứu của mình từ trường hợp đơn giản nhất: ghép đơi 1 – 1.

Từ trường hợp ghép đôi 1 – 1, họ tìm ra thuật tốn DAA (Deferred Acceptance Algorithm-tạm dịch là “Thuật tốn Chấp nhận trì hỗn”) và cơng bố vào năm 1962. Đến những năm 1980, Alvin Elliot Roth (18/12/1951) – nhà Kinh tế học người Mỹ, hiện đang giảng dạy tại Đại học Harvard – đã không ngừng nỗ lực tìm ra các giải pháp từ thuật tốn này để giải quyết các vấn đề thực tiễn. “Có cơng mài sắc, có ngày nên kim”, hơn 40 năm sau, Giải thưởng Nobel Kinh tế đã được trao cho Roth và Shapley cho những cống hiến về “Lý thuyết phân phối ổn định và thực tiễn về tạo lập thị trường” (“the theory of stable allocations and the practice of market design”)

<small>5</small>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>III. Tìm hiều bài toán </b>

<b>1. Cơ sở lý thuyết a. Một số khái niệm </b>

<b>Khái niệm 1: Một cách ghép cặp được gọi là khơng bền vững nếu có hai cặp vợ chồng </b>

(Y ,X<small>11</small>) và (Y<small>2</small>,X<small>2</small>) sao cho Y thích X hơn X , đồng thời X cũng thích Y hơn Y<small>1 2 12 12</small>

<b>Định nghĩa 2: Một cách ghép cặp bền vững được gọi tối ưu nếu mỗi chàng trai đều lấy </b>

được người vợ ưng ý hơn so với bất kì một cách phân bố bền vững nào khác.

<b>b. Một số bài tốn</b>

<b>Bài tốn 1: Có tồn tại hay không cách ghép cặp N cô gái với N chàng trai sao cho ai cũng </b>

lấy được người mình có cảm tình. Ở đây một người có thể có cảm tình với nhiều người khác giới.

<b>Bài tốn 2:</b> Hãy chỉ ra cách ghép cặp N cô gái với N chàng trai sao cho ai cũng lấy đượcngười mình có cảm tình (nếu có)

<b>Lời giải: </b>

Gọi tập hợp các cơ gái là S, tập hợp các lời chàng trai là S’. Các quan hệ, kí hiệu sửdụng như lời giải bài toán 1.

Dựa vào cách chứng minh quy nạp của định lý Hall ở trên, ta có thuật tốn:

Đầu tiên, ta xác định N cô gái và N chàng trai có thỏa điều kiện của định lý Hallbằng cách duyệt từng tập con của S. Nếu không thỏa, hiển nhiên không tồn tạicách ghép, kết thúc. Nếu thỏa, ta thực hiện bước hai.

Xác định có tồn tại tập con X của S sao cho hay không. Nếu tồn tại,ta thực hiện thuật toán với các cặp tập hợp X và N(X), S\X và S’\N(X). Nếukhông, ghép đôi một cơ gái x bất kì với một chàng trai y bất kì mà cơ ấy đượcnối. Ta thực hiện thuật tốn với S\{x} và S’\{y}.

Nhược điểm của việc ghép đơi kiểu này là sự không ổn định nếu ta xét đến việc cơgái (chàng trai) có cảm tình với người này hơn người kia. Giả sử tồn tại cặp a – b và cặp x

<small>6</small>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

– y mà a thích y hơn b và y thích a hơn x, khi đó có khả năng dẫn đến hiện tượng ngoạitình, cách ghép đơi khơng cịn hiệu quả. Ta xét đến thứ tự cảm tình của các cơ gái và chàngtrai.

<b>Bài toán 3 (Stable Marriage Theorem):</b> Một cách ghép cặp bền vững luôn luôn tồn tại, với mọi đồ thị lưỡng phân và mọi bộ sắp thứ tự ưa thích.

Mỗi chàng trai bị từ chối trong lần lặp này xóa tên cơ gái từ chối họ trong danh sách.Mỗi chàng trai bị hủy hơn ước xóa tên cơ gái đã hủy hơn ước trong danh sách.Vịng lặp được thực hiện cho đến khi nào khơng cịn chàng trai nào chưa đính hơn. Khi đó ta ghép đơi mỗi chàng trai với cơ gái mà họ đính hơn. Kết thúc thuật toán.

<b>Bài toán 5: </b>Chứng minh với thuật toán trên, mọi người đều được ghép đôi.

<b>Lời giải:</b>

Dễ thấy rằng mọi người chỉ đính hơn với tối đa một người khác giới.

Ta xét một cơ gái bất kì. Dễ thấy rằng sau khi được cầu hôn, vào mọi thời điểm kết thúcvịng lặp sau này, cơ gái đó ln được đính hơn. Ngồi ra, đối với một cơ gái bất kì, do các chàng trai duyệt danh sách của họ từ trên xuống nên sau một số hữu hạn vòng lặp, cơ gái đó sẽ được cầu hơn.

<b>Bài tốn 6: Chứng minh với cách ghép đôi nhận được từ thuật tốn, khơng xuất hiện sự </b>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

Giả sử phản chứng: sau khi thực hiện thuật toán, tồn tại hai cặp cô gái – chàng trai là A – B và C – D mà D xếp hạng cao hơn B trong danh sách của A và A xếp hạng cao hơn C trong danh sách của D (A và D ngoại tình).

Do A xếp trước C trong danh sách của D nên khi thực hiện thuật toán, D cầu hơn A trước C. Sau đó D cầu hôn C chứng tỏ A đã từ chối hoặc hủy hơn với D. Khi kết thúc thuật tốn, A kết hơn với B chứng tỏ B có thứ hạng cao hơn D trong danh sách của A, mâu thuẫn!

Vậy giả thiết phản chứng sai, mệnh đề được chứng minh.

Thuật toán này có thể được mơ tả bởi vịng lặp sau:

<b>• Bước 1: Các chàng trai và cả các cô gái cùng lên một danh sách sắp thứ tự các cô </b>

gái và các chàng trai mà mình muốn lấy (theo thứ tự thích nhất, thích nhì, thích ba,...).

<b>• Bước 2: Lần lượt các chàng trai sẽ cầu hôn các cô gái đứng đầu trong danh sách </b>

của mình. Cơ gái nào nhận được nhiều lời cầu hơn thì sẽ chọn người mà mình thích nhất (dựa theo danh sách của mình).

o Nếu người được chọn là người đứng đầu trong danh sách thì cơ gái sẽ kết hơn với người này và từ chối mọi lời cầu hôn khác ở những lượt tiếptheo.

o Cịn nếu như khơng phải thì cơ gái sẽ tìm cách “trì hỗn” bằng việc tạm nhận lời, coi như mình đang có một “hôn phu tạm thời” và chờ đợi lờicầu hôn từ một người có thứ hạng cao hơn. Nếu người này xuất hiện và cầu hôn cô gái (ở những lượt sau) thì dĩ nhiên cơ ấy sẽ chia tay người "hơn phu tạm thời" của mình mà chọn người này.

<b>• Bước 3: Các chàng trai sẽ xóa tên cơ gái đã từ chối mình hoặc đã chia tay với mình</b>

khỏi danh sách.

<b>• Bước 4: Lặp lại bước 2.</b>

Vịng lặp sẽ kết thúc khi khơng cịn chàng trai nào phải đi cầu hơn nữa. Khi đó cơ gái nào chưa kết hơn thì sẽ kết hơn với người “hơn phu tạm thời” hiện tại của mình.

Thuật tốn DAA vẫn có thể áp dụng trong trường hợp số chàng trai không bằng số cơ gái.Cụ thể:

<small>8</small>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

• Nếu n < m thì thuật tốn sẽ dừng khi n cơ gái được cầu hơn.

• Nếu m < n thì thuật toán sẽ dừng khi mỗi chàng trai rơi vào một trong hai trạng thái sau:

◦ Là hôn phu tạm thời của một cơ gái nào đó.◦ Bị tất cả các cơ gái từ chối.

<b>3. Tính tối ưu</b>

Thuật tốn Gale – Shapley luôn mang lại kết quả với độ phức tạp . Ngồi ra, ta cóthể định hướng được chiều hướng của kết quả sẽ có lợi cho bên nào. Ví dụ, ta hãy xét nhóm 3 cơ gái A, B, C và nhóm 3 chàng trai X, Y, Z. Giả sử, thứ tự cảm tình của họ là:

A: XYZ ; B: YZX ; C: ZXYvà

X: BCA ; Y: CAB ; Z: ABC

Nếu ta chạy thuật tốn với X, Y và Z “cầu hơn”, ta sẽ được kết quả là cách ghép cặp bền vững X-B, Y-C và Z-A. Cách này có lợi cho các chàng trai, các chàng sẽ được lấy người mình yêu nhất nhưng những cô gái sẽ phải lấy người xếp chót trong danh sách.

Nếu ta chạy thuật tốn với A, B và C “cầu hôn”, ta sẽ được kết quả là cách ghép cặp bền vững A-X, B-Y và C-Z. Ngược lại với trường hợp bên trên, ở đây các cô gái được lợi nhiều nhất.

Ta được kết quả này có thể do những người “cầu hơn” duyệt danh sách của họ từ trên xuống, trong khi những người được cầu hôn chỉ được chọn người tốt nhất trong danh sách những người cầu hôn họ. Vậy bây giờ ta sẽ xem xét, chứng minh bên nào hưởng lợi nhiều nhất trong trường hợp các chàng trai cầu hôn các cô gái.

Trong các cách ghép cặp bền vững, kết quả của thuật toán DAA là tối ưu nhất, tức là các chàng trai sẽ lấy được người vợ mà mình ưng ý nhất, so với các cách ghép bền vững khác.Chứng minh:

Xét tất cả các cách ghép cặp bền vững. Đối với mỗi chàng trai, gọi vùng khả thi là tập hợp tất cả các cô gái mà anh ta có thể cưới trong các cách ghép đơi bền vững. Định nghĩa tương tự với các cô gái. Ta sẽ chứng minh bằng phản chứng.

Gọi B là chàng trai đầu tiên bị cô gái G mà anh ta thích nhất trong vùng khả thi của mình từ chối. Điều này chứng tỏ G đã có hơn phu tạm thời là B’ và G thích B’ hơn B.

Gọi G” là cơ gái mà B’ thích nhất trong vùng khả thi của mình.• TH1: G khác G”.

Xét trong danh sách (lập ở bước 1 của thuật toán) của B’, ta thấy G phải có thứ hạng cao hơn G” , nếu khơng thì B’ phải cầu hơn G” trước G và bị từ chối, tức là B’ sẽ bị

<small>9</small>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

người thích nhất trong vùng khả thi của mình từ chối. Điều này vơ lý do sự kiện B’ bịG” từ chối xảy ra trước sự kiện B bị G từ chối, hay B không phải là chàng trai đầu tiên bị từ chối bởi người mình thích nhất trong vùng khả thi của minh (trình tự cụ thể:B’ cầu hôn G” và từ chối, tiếp theo B’ cầu hôn G, được G cho làm hôn phu tạm thời, sau đó B mới cầu hơn G và bị G từ chối). Tóm lại, trong danh sách của B’ thì G có thứ hạng cao hơn G”

Mặt khác, ta xét một cách ghép cặp bền vững mà ở đó B và G kết hơn với nhau, cịn B’ sẽ kết hơn với cơ gái G” nào đó. Tuy nhiên B’ lại thích G hơn G” và G cũng thích B’ hơn B nên mâu thuẫn với tính bền vững.

• TH2: G chính là G” Tương tự TH1.Nhận xét.

1. Các cô gái sẽ lấy chàng trai có thứ hạng thấp nhất trong vùng khả thi của mình. Như vậy, bên cầu hơn sẽ được lợi hơn bên được cầu hôn.

Chứng minh. Giả sử tồn tại cô gái G nào đó kết hơn với chàng trai B không phải là chàng trai xếp cuối vùng khả thi của cơ ta. Theo định lý 2, ta có G chính là cơgái đứng đầu vùng khả thi của B. Xét cách ghép cặp bền vững mà G kết hôn với B’ là chàng trai xếp cuối vùng khả thi của cơ ta. Khi đó ta thấy G thích B hơn B’ , trong khi B phải kết hôn với cơ gái có xếp hạng thấp hơn G, mâu thuẫn với tính bền vững.2. Nếu chỉ có một cách ghép cặp bền vững duy nhất thì tính tối ưu của các chàng trai và các cô gái là như nhau.

Chứng minh. Vì vùng khả thi của mỗi người lúc này chỉ có một người.

<b>4. Mơ hình và Codea.Mơ hình: </b>

• Tập các chàng trai B = {b1, b2, . . . , bn}• Tập các cơ gái G = {g1, g2, . . . , gn}

• Danh sách xếp hạng u thích của mỗi người, trong đó gọi P (g ) (P (b )) là <small>bijgij</small>

thứ hạng mà bạn nam (nữ) thứ i đánh giá bạn nữ (nam) thứ j trong danh sách xếp hạng yêu thích của mình.

OUTPUT: Tập hơn nhân bền vững S B ì Gã

ã (b,g) S: ((b,g) S ) ((b’,g) S) (P (g) < P (b’)) (P (b) < P<small>b ggg</small>(b’))<small>10</small>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>b. Code</b>

<small>defd_a_a(man_pref woman_pref, , ) :</small>

<small> # Ngi mà hi n t i woman đang h n hò: fall_in_love[w] = m</small>

<small> # N u woman đang đ c thân: fall_in_love[w] = -1</small>

<small> fall_in_love = [- ] * 1n </small>

<small> ữ# Nh ng người đàn ông đ c thânộ free_man = list(range(n)) </small>

<small> #t tình b t đ u</small>

<small> whilefree_man: </small>

<small> # xét m t man đ c thânộộ m = free_man[0] </small>

<small> # t tình v i woman mà hi n t i man thích nh t</small>

<small> w = man_pref[m].pop(0) </small>

<small> ế# n u woman ch a h n hòưẹ iffall_in_love w[] == -1: </small>

<small> # h n hị cùng man, man khơng cịn đ c thân</small>

<small> fall_in_love[w] = m free_man.pop(0) else:</small>

<small> </small>

<small> ế# n u woman thích man h n man'ơ</small>

<small> ifranking w[][m] < ranking w[][fall_in_love[w]]: </small>

<small> ế# man h t đ c thân, man' đ c thânộộ free_man.pop(0)</small>

<small> free_man.append(fall_in_love[w]) </small>

<small> # man và woman h n hòẹ fall_in_love[w] = m </small>

<small> # Danh sách [(m,w),...] hôn nhân b n v ngềữ stable_marriage = [(fall_in_love[], i) for iinrange(n)] </small>

</div>

×