BeeLab

Tuesday, November 14, 2023

Một Số Chiến Lược Tìm Lab, Xin Học Bổng PhD and Xin Postdoc

9:57:00 PM
Một Số Chiến Lược Tìm Lab, Xin Học Bổng PhD and Xin Postdoc
Trong cuộc sống ở bất kì ngành nghề lĩnh vực nào, ai cũng mong muốn có được 1 công việc tốt, phù hợp với mình. Thì chiến lược tốt, bạn phải dựa trên những nguyên tắc căn bản tốt. Tuỳ vào hoàn cảnh, vị trí của các bạn mà sử dụng một hay nhiều nguyên tắc để hình thành nên các chiến lược khác nhau. Cốt lõi của những chiến lược tốt để tìm lab, xin học bổng, xin postdoc, theo tôi phải dựa trên những nguyên tắc sau:

Nguyên tắc 0: Đánh giá được bản thân

Việc đánh giá được mức độ cạnh tranh của bản thân trước mọi cuộc ganh đua là một điều quan trọng bậc nhất. Muốn đánh giá tốt bản thân mình, các bạn phải biết so sánh mình với người khác một cách hợp lý. Điều này tưởng chừng đơn giản, nhưng khá khó, vì dễ bị chủ quan. Một cách khách quan là bạn nên hỏi han một số anh chị/bạn bè có kinh nghiệm, xin ý kiến về mức độ cạnh tranh của mình.
Các bạn nên nhớ khi đi xin vào bất kỳ một lab nào, điều quan trọng nữa [từ việc đánh giá tốt bản thân] là bạn phải biết cách “show off your skills”. Các GS mong muốn tìm người có kĩ năng [như viết code, scripts dùng thiết bị, lắp ráp, chế tạo dụng cụ], có khả năng tự nghiên cứu và trình bày tốt, có khả năng giao tiếp, trao đổi với đồng nghiệp và bạn bè. Cách chứng minh tốt nhất cho điều này là bạn phải có kinh nghiệm nghiên cứu (công bố trên tạp chí, hội nghị quốc tế), và thư giới thiệu từ chính người hướng dẫn của bạn. Điểm số như GRE, Toefl, hay gì đó là quan trọng đối với trường nhận bạn; còn đối với GS, họ lưu ý nhiều tới những thông tin mà cho thấy rõ ràng kĩ năng và khả năng nghiên cứu tốt.

Nguyên Tắc 1: Nghiên cứu kỹ lưỡng các lab trước khi bày tỏ ý muốn gia nhập

Nếu các bạn nghĩ càng gửi vào nhiều lab thì xác suất thành công của bạn càng cao, thì theo tôi là khá sai lầm. Điều này xuất phát từ nhiều yếu tố như thiếu kiên nhẫn, nóng lòng muốn xin được một vị trí, do đó gần như ai cũng mắc lỗi này lúc đầu. Lỗi này nhiều khi nghiêm trọng tới mức bạn được nhận vào một lab rất tệ, rất khó xin việc sau này. Vì thế việc dành thời gian tìm hiểu kĩ lưỡng về các trường, các khoa, các GS giúp bạn rất nhiều thứ:
(1) Rút gọn số lượng các trường mà bạn nghĩ là cạnh tranh được. Như tôi, tôi thường chọn 4-5 trường hay lab lúc đầu. Nếu thất bại, thì thử các lab tiếp theo, chứ không gửi đi một loạt 20 hay 50, thậm chí là 100 lab, hay công ty. Với số lượng trên 20 hồ sơ bạn gửi đi, thì chắc chắn chúng sẽ đem lại cho bạn cảm giác thất bại rất lớn. Thay vào đó, gửi từng số nhỏ (4-5) một hay thậm chí là từng lab/trường/công ty trong từng tuần. Thường các lab sẽ trả lời sớm cho bạn biết, các trường hay công ty thì lâu hơn.
(2) Cho bạn thêm thời gian để hoàn thiện các yếu tố như Cover Letter, CV, Research Statements, v.v, sau một vài lần bị từ chối. Nếu làm liên tục trong vài tháng tới con số 20 hồ sơ mà đều bị từ chối thì bạn nên dừng lại. Vì có điều gì đó không ổn trong hồ sơ của bạn.
(3) Networking. Khi các bạn tìm hiểu kĩ, bạn sẽ tìm được thêm bạn bè, hay tìm được người để hỏi han, giúp bạn đánh giá tốt hơn về hồ sơ.
(4) Không nên gửi hồ sơ cho nó có vì điều này chỉ mang lại cho bạn cảm giác thất bại nhiều hơn, buồn chán nhiều hơn mà thôi.

Nguyên Tắc 2: Tránh Ùa Theo Đám Đông

Nếu các bạn hiểu Nguyên Tắc 1, thì các bạn cũng sẽ thấy rõ tại sao bạn không nên Ùa theo đám đông gửi hồ sơ cho một vài lab mới có tuyển dụng. Nếu bạn nghiên cứu kĩ lưỡng về lab đó, biết mình phù hợp thì gửi, còn nếu có cảm giác không hợp lắm, thì STOP. Việc “Ùa Theo Đám Đông” cũng chỉ đem lại cho bạn thêm cảm giác thất bại thôi. Phần lớn các GS làm như sau: chỉ cần 30 giây là biết bạn có thích hợp với lab không, 20 phút để biết khả năng của các bạn tới đâu, rồi sẽ rút gọn tới 3-5 candidates; dành vài ngày suy nghĩ, rồi mới quyết định gửi email tới 1-3 người tốt nhất. Nên nếu các bạn gửi hồ sơ mà không chuẩn bị kĩ lưỡng, mà Ùa theo đám đông thì xác suất bị OUT rất cao.

Nguyên Tắc 3: Viết CV thích hợp và Cover Letter thật tốt

Nếu các bạn gửi hồ sơ sang Bắc Mỹ thì CV phải theo kiểu Bắc Mỹ. Trong CV làm rõ kinh nghiệm, skills, công bố trên tạp chí nào, hay đang trong tình trạng review hay đang được viết.
Cover Letter thì phải viết rõ ràng cho từng lab, đưa ngay ra thành tựu của mình, kĩ năng của mình, cho người đọc (GS) thấy là mình phù hợp với lab. Cover Letter không được viết quá dài, nên khoảng 300-500 chữ. Nếu bạn tìm hiểu kĩ lượng về lab đó, viết cũng sẽ dễ hơn, vì bạn phải chứng minh với lượng số chữ đó, bạn là người phù hợp với lab đó, để xin phỏng vấn (qua Skype, hay được mời trực tiếp).

Nguyên Tắc 4: Be Very Nice (Dễ mến và lịch sự)

Trong bất kỳ tình huống nào, gặp mặt trực tiếp hay trao đổi qua email, bạn cũng phải biết dùng ngôn ngữ một cách Nicely. Bạn viết cho sinh viên, postdoc trong lab đó thì bạn cũng phải nice. Xin ý kiến của các anh chị có kinh nghiệm cũng phải nice. Bạn cũng nên thử để cho thấy bạn nghiêm túc khi tiếp xúc hay xin ý kiến.

Nguyên Tắc 5: Chủ Động Kết Nối

Nếu bạn tham gia hội nghị, hội thảo, thì phải chủ động kết nối, viết email thật nice, thật lịch sự, để xin gặp, xin phỏng vấn trực tiếp. Bạn nên biết nhiều anh chị (rất giỏi) mà cũng phải làm như vậy, và nhiều người xin được vào làm Postdoc hay PhD ở những lab rất tốt nhờ gặp vài lần ở hội thảo hội nghị đó.

Nguyên Tắc 6: Chuẩn bị và chuẩn bị

Nếu bạn thiếu bất kỳ kĩ năng nào như viết CV, Cover Letter, Research Statement, hay kĩ năng nghiên cứu, thì bạn phải dành đủ thời gian chuẩn bị tốt những gì bạn viết trước khi gửi hồ sơ đi. Nếu thời gian chuẩn bị là 2 năm, thì dành hẳn hai năm trước khi tin là mình cạnh tranh được. Vì một khi bạn chuẩn bị tốt, dù mất hai năm, nhưng bạn chỉ cần thành công một lần là đủ, với học bổng $20k-$30k/năm cho PhD. Hoặc là PhD thì nếu cảm thấy chưa đủ skills, thì ở lại thêm 1-2 năm nữa học thêm cái này, cái kia, rồi mới tốt nghiệp. Vì nếu bạn nhanh nhẩu tốt nghiệp và không có đủ skill, thì bạn sẽ khó xin được công việc kế tiếp ngay. Nên lúc nào cũng phải chuẩn bị sớm cho đầu ra, dành đủ thời gian chứ đừng đợi tới gần tốt nghiệp, hay hết hạn mới bắt đầu.
Luck can be only seized by being well prepared

Nguyên Tắc 7: Chấp Nhận và Hiểu Rõ Thất Bại

Đối với tôi đây là nguyên tắc quan trọng bậc nhất trong cuộc sống nói chung. Con đường mà chúng ta đi, đôi khi sẽ bị vấp ngã hay đầy rẫy sai lầm. Gần như không ai không thất bại khi tìm kiếm hướng đi, một giải pháp, một cuộc sống mới, một nghề nghiệp mới. Chính những người không thất bại lại là những người khó học được bài học của thất bại là sự khiêm tốn, sự ham học hỏi và sự kiên trì. Chấp nhận và hiểu rõ thất bại mới giúp chúng ta thành công hơn, và gặt hái được những thành quả cuối cùng, quan trọng nhất. Thất bại mới làm ta hiểu rõ tầm quan trọng của 7 Nguyên Tắc trên.
Steve Jobs nói “stay hungry, stay foolish” có nghĩa chúng ta phải ham học hỏi (vì đói kiến thức chứ không phải vì no nê), phải chấp nhận sai lầm (vì không biết trước điều gì sẽ làm chúng ta trở nên ngốc nghếch lúc ban đầu) để trở nên khôn ngoan hơn nhờ học được bài học của sự thất bại.
P/S. Anh chị hay các bạn nào có bổ sung hãy comment phía dưới để các bạn trẻ có thêm ý kiến. Thanks.

Thursday, July 6, 2023

Hành trình xin "thẻ xanh" (Visa F5-15) tại Hàn Quốc

11:07:00 AM
Hành trình xin "thẻ xanh" (Visa F5-15) tại Hàn Quốc



F-5 là gì?

Các bạn thường hay nghe từ "thẻ xanh" của Mỹ, thì tương tự như vậy Visa F5 chính là "thẻ xanh" của Hàn Quốc. Có tổng cộng 27 lọai và F5-15 dành cho người có bằng PhD và lượt bỏ được một vài tiêu chí liên quan (mình thấy loại này có yêu cần phù hợp với mình nhất). Về quyền lợi khi có F5 và cũng như yêu cầu thì rất nhiều thông tin rồi nên ở đây mình chỉ chi sẽ lại trải nghiệm cũng như trường hợp của mình để ai tương tự thì có thể tham khảo.

Timeline

D2-4 (SV/3.5 năm) -> E3 (Postdoc/2.5 năm) -> F5-15 (xử lý 4 tháng)

Giấy tờ có gì cần lưu ý?

Mình tham khảo trên internet có rất nhiều hoặc ở đây và gọi thêm 1345 nhờ gửi về email những biểu mẫu mới nhất, sau đó cứ căn cứ vào đó và chuẩn bị từng loại theo hướng dẫn. Các yêu cầu quang trọng:

- GNI: in trên hometax + có in thêm thuế địa phương 납부내역증명 (nếu nợ thì đóng còn kg thì nó sẽ trống). Mình tốt nghiệp và làm post từ 3/2021 nên 2021 kg đủ thu nhập, nên chờ tính thu nhập từ tháng 1~12/2022, và tháng 5/2023 có tax của năm 2022. Mình tự in sao kê bảng lương + giao dịch ngân hàng (6 tháng) để họ đối chiếu.

- Thư bảo lãnh: Mình xin giáo sư bảo lãnh ghi theo thời hạn hợp đồng, tức chỉ cỡ hơn 1 năm và cũng kg xin copy ID card, dự định nếu yêu cầu thì mình bổ sung sau, nhưng họ kg yêu cầu (có nhiều người khuyên xin thời gian lâu hơn sẽ tốt hơn, và nên xin luôn copy ID card)

- Xác nhận nhân viên + giấy đăng kí kinh doanh của trường + bảo hiểm + hợp đồng: vì luật đã thay đổi chỉ yêu cầu làm việc "fulltime" nghĩa là chỉ cần có giấy xác nhận nhân viên và có đóng đủ 4 loại bảo hiểm 4대 사회보험 (trong vòng 1 năm - cái này có nhiều trường hợp là giấy xác nhận nhân viên trên 1 năm nhưng mới đóng đủ 4 loại bảo hiểm được 1,2 tháng cũng được chấp nhận, hên xuôi do người tiếp nhận hồ sơ).

*Lưu ý: Cái bảo hiểm này đối với người đi làm thông thường được cty đóng đầy đủ, nhưng ae làm postdoc thì thường chỉ được đóng 3 loại 국민연금, 건강보험, 산재보험 còn loại thứ 4 là "bảo hiểm thất nghiệp 고용보험" thì "tùy chọn" nên họ (trường, viện) sẽ chọn không đóng, vẫn có chỗ đóng đầy đủ (e.g. sejong uni.) => giải pháp là mình liên hệ phòng nhân sự để làm đơn đăng kí được đóng (tự nguyện) và tiền đó trừ thêm vào lương của mình.

- Lý lịch tư pháp + KIIP: miễn

*Gợi ý:

- Toàn bộ giấy tờ mình làm trên máy tính sau đó in ra rồi kí, (quan trọng nội dung bạn khai chứ không qtrong viết như thế nào, viết tay chữ cũng xấu sợ họ đọc không được kkk). Phần lý do nộp thì mình viết vài câu khá ngắn gọn, chủ yếu cũng chỉ nói thật về công việc đang làm, mong muốn và kết luận (mình viết song ngữ tiếng anh và có nhờ dịch sang tiếng hàn vì nếu chỉ có tiếng anh đôi khi họ không hiểu, và chỉ nếu có tiếng hàn mình không biết tiếng họ mà hỏi thì ... 😆😆).

- Lúc nộp thì visa hiện tại kg còn đủ 6 tháng nên mình chờ kí hợp đồng mới và đi gia hạn E3 trước, sau đó book lịch nộp F5 ngay sau đó. Nếu trường hợp không được gia hạn hợp đồng và phải chuyển chỗ khác thì sẽ khó khăn hơn vì hồ sơ tax và hợp đồng hiện tại không phải cùng mã số thuế, bạn có thể chuyển giữa các lab trong cùng 1 trường. Trường hợp của mình tiếp tục kg có thay đổi gì, và cũng không phạm lỗi gì liên quan xuất nhập cảnh hay vi phạm luật giao thông nên không bị yêu cầu học 준법 교육 và trong thời gian đợi thì cũng không bị yêu cầu bổ sung giấy tờ gì thêm.

- Nếu mọi người đã nộp và đang trong quá trình chờ xử lý hồ sơ mà có vấn đề gì phát sinh ví dụ như muốn chuyển việc chẳng hạn, thì hãy đến gặp trực tiếp người nhận hồ sơ để trao đổi (1345 không có tác dụng), tốt nhất là trao đổi tiếng hàn, nếu không biết tiếng thì nhờ bạn bè (giỏi tiếng) hoặc người Hàn giải thích thắc mắc cho họ hiểu vấn đề trước sau đó nhờ họ giúp mình trao đổi với nhân viên tiếp nhận hồ sơ. Mình đã làm chuyện đó với ý định ban đầu chỉ để hỏi chính xác thông tin và chợt nhận thấy hồ sơ F5-15 xử lý rất nhanh (ở chỗ mình chỉ vài ngày nếu họ tiến hành xử lý hồ sơ đó, cộng thêm 2 người quen cũng nộp tương tự nhưng chỉ nộp trong vòng 24h đến vài ngày là có kết quả) còn chờ lâu có thể là vì họ để đó và làm việc khác vì người tiếp nhận làm chậm (người nhận hso sẽ là người xử lý luôn-người có tên trong mục 6 trên tờ biên nhận) và hồ sơ bị dồn lại họ phải làm từ từ... như mình chờ gần 4 tháng, nhưng có việc đến cục hỏi thì mới biết là người tiếp nhận xong để đó chưa xử lý vì họ có hso khác tới deadline (cái này bạn người Hàn trao đổi giúp và nói lại với mình như thế), hỏi xong thì họ bảo sẽ xử lý ngay... và kqua có ngay sau đó... Nên mình thấy có vần đề gì thì mọi người cứ mạnh dạn đến hỏi trực tiếp sẽ tốt hơn.


Chúc mọi người may mắn~

Monday, May 15, 2023

Thuật toán Alpha-Beta Pruning

10:38:00 AM
Thuật toán Alpha-Beta Pruning

Giới thiệu

Alpha-Beta Pruning là một phiên bản sửa đổi của thuật toán minimax. Nó là một kỹ thuật tối ưu hóa cho thuật toán minimax.

Như chúng ta đã thấy trong thuật toán tìm kiếm minimax rằng số lượng trạng thái trò chơi mà nó phải kiểm tra là cấp số nhân theo chiều sâu của cây. Vì chúng ta không thể loại bỏ số mũ, nhưng chúng ta có thể cắt nó thành một nửa. Do đó, có một kỹ thuật mà không cần kiểm tra từng nút của cây trò chơi, chúng ta có thể tính ra quyết định minimax chính xác và kỹ thuật này được gọi là cắt tỉa. Điều này liên quan đến hai tham số ngưỡng Alpha và beta để mở rộng trong tương lai, vì vậy nó được gọi là Alpha-Beta Pruning. Nó còn được gọi là Thuật toán Alpha-Beta.

Thuật toán Alpha-Beta Pruning

Alpha – beta pruning là một thuật toán tìm kiếm nâng cao của minimax, thuật toán này làm giảm số lượng các node cây được đánh giá bởi thuật toán minimax trong cây tìm kiếm. Thuật toán này dựa theo tìm kiếm đối nghịch trong một số trò chơi với máy (Tic-tac-toe, Cờ vua, v.v.).

Alpha-Beta Pruning có thể được áp dụng ở bất kỳ độ sâu nào của cây, và đôi khi nó không chỉ cắt tỉa lá cây mà còn cắt tỉa toàn bộ cây phụ.

Hai tham số có thể được định nghĩa là:

  • Alpha: Sự lựa chọn tốt nhất (giá trị cao nhất) mà chúng tôi đã tìm thấy cho đến nay tại bất kỳ điểm nào trên con đường của Maximizer. Giá trị ban đầu của alpha là -∞.
  • Beta: Lựa chọn tốt nhất (giá trị thấp nhất) mà chúng tôi đã tìm thấy cho đến nay tại bất kỳ điểm nào dọc theo đường dẫn của Minimizer. Giá trị ban đầu của beta là + ∞.

Việc Alpha-Beta Pruning thành một thuật toán minimax tiêu chuẩn trả lại cùng một động thái như thuật toán tiêu chuẩn, nhưng nó loại bỏ tất cả các nút không thực sự ảnh hưởng đến quyết định cuối cùng nhưng làm cho thuật toán bị chậm. Do đó, bằng cách lược bỏ các nút này, thuật toán sẽ nhanh hơn.

Lưu ý: Để hiểu rõ hơn về chủ đề này, vui lòng nghiên cứu thuật toán minimax.

Điều kiện để Alpha-Beta Pruning:

Điều kiện chính cần thiết để Alpha-Beta Pruning là:

α> = β

Những điểm chính về việc Alpha-Beta Pruning:

  • Max player sẽ chỉ cập nhật giá trị của alpha.
  • Min player sẽ chỉ cập nhật giá trị của phiên bản beta.
  • Trong khi backtracking lại cây, các giá trị của nút sẽ được chuyển đến các nút phía trên thay vì các giá trị của alpha và beta.
  • Chúng tôi sẽ chỉ chuyển các giá trị alpha, beta cho các nút con.

Làm việc của Alpha-Beta Pruning:

Hãy lấy một ví dụ về cây tìm kiếm hai người chơi để hiểu hoạt động của việc Alpha-Beta Pruning

Bước 1: Ở bước đầu tiên, người chơi Max sẽ bắt đầu di chuyển đầu tiên từ nút A nơi α = -∞ và β = + ∞, những giá trị alpha và beta này được truyền lại cho nút B nơi lại α = -∞ và β = + ∞ và Nút B chuyển cùng một giá trị cho nút con D của nó.

Bước 2: Tại nút D, giá trị của α sẽ được tính theo lượt của nó cho Max. Giá trị của α được so sánh với đầu tiên là 2 và sau đó là 3, và max (2, 3) = 3 sẽ là giá trị của α tại nút D và giá trị của nút cũng sẽ là 3.

Bước 3: Bây giờ thuật toán quay ngược lại nút B, trong đó giá trị của β sẽ thay đổi vì đây là lượt của Min, Bây giờ β = + ∞, sẽ so sánh với giá trị của các nút tiếp theo có sẵn, tức là min (∞, 3) = 3, do đó tại nút B bây giờ α = -∞ và β = 3.

Trong bước tiếp theo, thuật toán duyệt qua nút kế tiếp tiếp theo của nút B là nút E, và các giá trị của α = -∞ và β = 3 cũng sẽ được chuyển.

Bước 4: Tại nút E, Max sẽ đến lượt, và giá trị của alpha sẽ thay đổi. Giá trị hiện tại của alpha sẽ được so sánh với 5, vì vậy max (-∞, 5) = 5, do đó tại nút E α = 5 và β = 3, trong đó α> = β, vì vậy kế thừa bên phải của E sẽ bị lược bỏ, và thuật toán sẽ không đi qua nó, và giá trị tại nút E sẽ là 5.

Bước 5: Ở bước tiếp theo, thuật toán lại chiếu ngược cây, từ nút B đến nút A. Tại nút A, giá trị của alpha sẽ được thay đổi giá trị lớn nhất có sẵn là 3 như max (-∞, 3) = 3 và β = + ∞, hai giá trị này bây giờ được chuyển đến người kế nhiệm bên phải của A là Nút C.

Tại nút C, α = 3 và β = + ∞, và các giá trị tương tự sẽ được chuyển cho nút F.

Bước 6: Tại nút F, một lần nữa giá trị của α sẽ được so sánh với nút con bên trái là 0 và max (3,0) = 3, sau đó so sánh với nút con bên phải là 1 và max (3,1) = 3 vẫn còn α vẫn là 3, nhưng giá trị nút của F sẽ trở thành 1.

Bước 7: Nút F trả về giá trị nút 1 cho nút C, tại C α = 3 và β = + ∞, ở đây giá trị beta sẽ được thay đổi, nó sẽ so sánh với 1 nên min (∞, 1) = 1. Bây giờ tại C, α = 3 và β = 1, và một lần nữa nó thỏa mãn điều kiện α> = β, vì vậy con tiếp theo của C là G sẽ bị lược bớt, và thuật toán sẽ không tính toàn bộ cây con G.

Bước 8: C bây giờ trả về giá trị từ 1 đến A ở đây giá trị tốt nhất cho A là max (3, 1) = 3. Sau đây là cây trò chơi cuối cùng là hiển thị các nút được tính toán và các nút chưa bao giờ tính toán. Do đó, giá trị tối ưu cho bộ cực đại là 3 cho ví dụ này.

Di chuyển thứ tự trong Alpha-Beta Pruning:

Hiệu quả của việc Alpha-Beta Pruning phụ thuộc nhiều vào thứ tự mà mỗi nút được kiểm tra. Thứ tự di chuyển là một khía cạnh quan trọng của việc Alpha-Beta Pruning.

Nó có thể có hai loại:

Worst ordering: Trong một số trường hợp, thuật toán Alpha-Beta Pruning không cắt tỉa bất kỳ lá nào của cây và hoạt động chính xác như thuật toán minimax. Trong trường hợp này, nó cũng tiêu tốn nhiều thời gian hơn vì các yếu tố alpha-beta, động thái cắt tỉa như vậy được gọi là thứ tự tồi tệ nhất. Trong trường hợp này, chuyển động tốt nhất xảy ra ở phía bên phải của cây. Độ phức tạp về thời gian cho một lệnh như vậy là O (bm).

Ideal ordering: Thứ tự lý tưởng để Alpha-Beta Pruning xảy ra khi nhiều lần cắt tỉa diễn ra trên cây và các động thái tốt nhất xảy ra ở phía bên trái của cây. Chúng tôi áp dụng DFS do đó nó tìm kiếm đầu tiên bên trái của cây và đi sâu gấp đôi so với thuật toán minimax trong cùng một khoảng thời gian. Độ phức tạp trong thứ tự lý tưởng là O (bm / 2).

Các quy tắc để tìm thứ tự tốt:

Sau đây là một số quy tắc để tìm thứ tự tốt trong việc Alpha-Beta Pruning:

  • Xảy ra nước đi tốt nhất từ ​​nút nông nhất.
  • Thứ tự các nút trong cây sao cho các nút tốt nhất được kiểm tra trước.
  • Sử dụng kiến ​​thức miền trong khi tìm ra nước đi tốt nhất. Ví dụ: đối với Cờ vua, hãy thử thứ tự: bắt trước, sau đó đe dọa, sau đó tiến lên, lùi lại.
  • Chúng tôi có thể ghi sổ các trạng thái, vì có khả năng các trạng thái đó có thể lặp lại.

Code:

function minimax(node, depth, alpha, beta, maximizingPlayer) is  
if depth ==0 or node is a terminal node then  
return static evaluation of node  
  
if MaximizingPlayer then      // for Maximizer Player  
   maxEva= -infinity            
   for each child of node do  
   eva= minimax(child, depth-1, alpha, beta, False)  
  maxEva= max(maxEva, eva)   
  alpha= max(alpha, maxEva)      
   if beta<=alpha  
 break  
 return maxEva  
    
else                         // for Minimizer player  
   minEva= +infinity   
   for each child of node do  
   eva= minimax(child, depth-1, alpha, beta, true)  
   minEva= min(minEva, eva)   
   beta= min(beta, eva)  
    if beta<=alpha  
  break          
 return minEva  

Tuesday, May 9, 2023

Thuật toán Mini-Max

8:10:00 AM
Thuật toán Mini-Max

 Giới thiệu:

  • Thuật toán mini-max là một thuật toán recursive hoặc backtrack được sử dụng trong việc ra quyết định và lý thuyết trò chơi. Nó cung cấp một nước đi tối ưu cho người chơi giả sử rằng đối thủ cũng đang chơi một cách tối ưu.
  • Thuật toán Mini-Max sử dụng recursive để tìm kiếm thông qua Game Tree.
  • Thuật toán Min-Max chủ yếu được sử dụng để chơi trò chơi trong AI. Chẳng hạn như Cờ vua, Cờ caro, tic-tac-toe, cờ vây và các trò chơi kéo xe khác nhau. Thuật toán này tính toán quyết định minimax cho trạng thái hiện tại.
  • Trong thuật toán này, hai người chơi trò chơi, một người được gọi là MAX và người kia được gọi là MIN.
  • Cả hai người chơi chiến đấu với nó vì người chơi đối phương nhận được lợi ích tối thiểu trong khi họ nhận được lợi ích tối đa.
  • Cả hai Người chơi của trò chơi là đối thủ của nhau, trong đó MAX sẽ chọn giá trị tối đa và MIN sẽ chọn giá trị nhỏ nhất.
  • Thuật toán minimax thực hiện thuật toán tìm kiếm theo chiều sâu để khám phá Game Tree hoàn chỉnh.
  • Thuật toán minimax tiến hành tất cả các cách xuống nút đầu cuối của cây, sau đó quay ngược lại cây dưới dạng recursive.

Hoạt động của thuật toán Min-Max:

  • Có thể dễ dàng mô tả hoạt động của thuật toán minimax bằng cách sử dụng một ví dụ. Dưới đây chúng tôi đã lấy một ví dụ về Game Tree đại diện cho trò chơi hai người chơi.
  • Trong ví dụ này, có hai người chơi, một người được gọi là Maximizer và người khác được gọi là Minimizer.
  • Maximizer sẽ cố gắng đạt được số điểm Tối đa có thể, và Minimizer sẽ cố gắng đạt được số điểm tối thiểu có thể.
  • Thuật toán này áp dụng DFS, vì vậy trong Game Tree này, chúng ta phải đi hết các lá để đến được các nút đầu cuối.
  • Tại nút đầu cuối, các giá trị đầu cuối được đưa ra vì vậy chúng tôi sẽ so sánh các giá trị đó và điều chỉnh lại cây cho đến khi trạng thái ban đầu xảy ra. Sau đây là các bước chính liên quan đến việc giải quyết Game Tree hai người chơi:

Bước 1: Trong bước đầu tiên, thuật toán tạo ra Game Tree và áp dụng hàm tiện ích để nhận các giá trị và các trạng thái kết thúc. 

Trong sơ đồ cây dưới đây, hãy lấy A là trạng thái bắt đầu của Tree. Giả sử bộ tối đa hóa thực hiện lượt đi đầu tiên có giá trị ban đầu trong trường hợp xấu nhất = – infinite và minimizer sẽ thực hiện lượt tiếp theo có giá trị ban đầu trong trường hợp xấu nhất = + infinity.

Bước 2: Bây giờ, đầu tiên chúng ta tìm giá trị tiện ích cho Maximizer, giá trị ban đầu của nó là -∞, vì vậy chúng ta sẽ so sánh từng giá trị ở trạng thái đầu cuối với giá trị ban đầu của Maximizer và xác định các giá trị nút cao hơn. Nó sẽ tìm thấy mức tối đa trong số tất cả.

Đối với nút D max (-1, – -∞) => max (-1,4) = 4

Đối với nút E max (2, -∞) => max (2, 6) = 6

Đối với nút F max (-3, -∞) => max (-3, -5) = -3

Đối với nút G max (0, -∞) = max (0, 7) = 7

Bước 3: Trong bước tiếp theo, đến lượt trình thu nhỏ, vì vậy nó sẽ so sánh giá trị tất cả các nút với + ∞ và sẽ tìm giá trị nút lớp thứ 3.

Đối với nút B = min (4,6) = 4

Đối với nút C = min (-3, 7) = -3

Bước 4: Bây giờ đến lượt Maximizer, nó sẽ lại chọn giá trị lớn nhất của tất cả các nút và tìm giá trị lớn nhất cho nút gốc. Trong Game Tree này, chỉ có 4 lớp, do đó chúng tôi truy cập ngay đến nút gốc, nhưng trong trò chơi thực, sẽ có nhiều hơn 4 lớp.

Đối với nút A max (4, -3) = 4

Đó là toàn bộ quy trình làm việc của trò chơi minimax hai người chơi.

Các thuộc tính của thuật toán Mini-Max:

Complete– Thuật toán Min-Max đã hoàn thành. Nó chắc chắn sẽ tìm thấy một giải pháp (nếu tồn tại), trong cây tìm kiếm hữu hạn.

Optimal– Min-Max là tối ưu nếu cả hai đối thủ đều chơi tối ưu.

Time complexity– Vì nó thực hiện DFS cho Game Tree, do đó độ phức tạp thời gian của thuật toán Min-Max là O (bm), trong đó b là hệ số phân nhánh của Game Tree và m là độ sâu tối đa của cây.

Space Complexity – Độ phức tạp không gian của thuật toán Mini-max cũng tương tự như DFS là O (bm).

Giới hạn của thuật toán minimax:

Hạn chế chính của thuật toán minimax là nó thực sự chậm đối với các trò chơi phức tạp như Cờ vua, cờ vây, v.v. Loại trò chơi này có hệ số phân nhánh rất lớn và người chơi có rất nhiều lựa chọn recursive. Hạn chế này của thuật toán minimax có thể được cải thiện từ việc lược bớt alpha-beta mà chúng ta đã thảo luận trong chủ đề tiếp theo.

Xem thêm Thuật toán Alpha-Beta Pruning

Một số câu hỏi phổ biến về thuật toán minimax

  1. Thuật toán minimax là gì?

Thuật toán minimax là một thuật toán đánh giá giá trị của các nút trong cây trò chơi, để tìm ra nước đi tối ưu cho một người chơi. Thuật toán này được sử dụng rộng rãi trong trò chơi có hai người, như cờ vua, cờ tướng và tic-tac-toe.

  1. Làm thế nào để sử dụng thuật toán minimax trong trò chơi?

Để sử dụng thuật toán minimax trong trò chơi, cần xây dựng một cây trò chơi, trong đó mỗi nút đại diện cho một trạng thái của trò chơi và mỗi cạnh đại diện cho một nước đi. Các nút ở độ sâu chẵn đại diện cho các nước đi của người chơi đang chơi, trong khi các nút ở độ sâu lẻ đại diện cho các nước đi của đối thủ.

Thuật toán minimax duyệt cây trò chơi và đánh giá giá trị của các nút lá. Nếu nút lá đại diện cho một trạng thái kết thúc của trò chơi, giá trị của nó được tính bằng cách xem ai đã thắng hoặc thua trò chơi. Nếu nút lá đại diện cho một trạng thái không kết thúc, giá trị của nó được tính bằng cách sử dụng một hàm đánh giá, đại diện cho khả năng thắng của người chơi đang chơi.

  1. Thuật toán minimax có thể giải quyết được trò chơi nào?

Thuật toán minimax có thể được sử dụng để giải quyết các trò chơi có hai người chơi, có hữu hạn số lượng nước đi và không có yếu tố ngẫu nhiên, ví dụ như cờ vua, cờ tướng, tic-tac-toe và Connect Four.

  1. Làm thế nào để tối ưu hóa thuật toán minimax?

Để tối ưu hóa thuật toán minimax, có thể sử dụng một số kỹ thuật như cắt tỉa alpha-beta hoặc sử dụng các phương pháp đánh giá khác nhau để tăng độ chính xác của giá trị đánh giá của các nút. Ngoài ra, việc sử dụng các cấu trúc dữ liệu hiệu quả để lưu trữ cây trò chơi cũng có thể giúp tăng tốc

  1. Alpha-beta pruning là gì và nó được sử dụng như thế nào trong thuật toán minimax?

Alpha-beta pruning là một kỹ thuật cắt tỉa được sử dụng để tối ưu hóa thuật toán minimax bằng cách loại bỏ các nút không cần thiết trong cây trò chơi. Kỹ thuật này hoạt động bằng cách sử dụng hai giá trị alpha và beta để giới hạn khoảng giá trị đánh giá của các nút con của một nút cha trong cây trò chơi. Khi giá trị đánh giá của một nút con vượt quá giới hạn này, các nút con còn lại của nút cha đó không cần được kiểm tra nữa.

  1. Thuật toán minimax có nhược điểm gì?

Thuật toán minimax có thể có nhược điểm là thời gian tính toán và không gian lưu trữ tăng lên nhanh chóng với số lượng nút trong cây trò chơi. Điều này đặc biệt đúng đối với các trò chơi lớn và phức tạp như cờ vua, khi số lượng nút có thể lên đến hàng tỷ. Ngoài ra, thuật toán minimax không thể xử lý các trò chơi có yếu tố ngẫu nhiên, ví dụ như poker hoặc blackjack.

  1. Có những phương pháp thay thế nào cho thuật toán minimax?

Có nhiều phương pháp thay thế cho thuật toán minimax, trong đó phương pháp Monte Carlo là một trong những phương pháp phổ biến nhất. Phương pháp này sử dụng một số lượng lớn các trận đấu mô phỏng để đánh giá giá trị của một nút, thay vì duyệt toàn bộ cây trò chơi. Phương pháp Monte Carlo có thể được sử dụng để giải quyết các trò chơi có yếu tố ngẫu nhiên, như poker hoặc blackjack, và có thể được tối ưu hóa để tăng độ chính xác của kết quả.

  1. Làm thế nào để áp dụng thuật toán minimax vào các trò chơi phức tạp hơn?

Các trò chơi phức tạp hơn, ví dụ như cờ vua, thường có số lượng nút lớn hơn rất nhiều so với các trò chơi đơn giản hơn như tic-tac-toe. Để áp dụng thuật toán minimax vào các trò chơi phức tạp hơn, ta cần sử dụng các kỹ thuật cải tiến để giảm số lượng nút trong cây trò chơi, và tối ưu hóa thời gian tính toán.

Một trong những kỹ thuật cải tiến phổ biến là sử dụng bảng tra cứu đánh giá, trong đó các giá trị đánh giá cho các trường hợp đặc biệt đã được tính toán trước và lưu trữ trong bảng. Khi thực hiện thuật toán minimax, ta có thể sử dụng bảng này để tránh tính toán lại các giá trị đánh giá đã được tính toán trước đó.

Ngoài ra, ta cũng có thể sử dụng các kỹ thuật thay thế cho thuật toán minimax, như phương pháp Monte Carlo, để giảm thời gian tính toán và tối ưu hóa thuật toán cho các trò chơi phức tạp hơn.

  1. Thuật toán minimax có thể được sử dụng cho những mục đích nào ngoài các trò chơi?

Mặc dù thuật toán minimax thường được sử dụng để giải quyết các trò chơi, nó cũng có thể được áp dụng cho các bài toán tối ưu hóa và quyết định trong các lĩnh vực khác. Ví dụ, thuật toán minimax có thể được sử dụng để tìm kiếm chiến lược tối ưu trong quản lý tài sản và quản lý rủi ro. Thuật toán minimax cũng có thể được sử dụng trong các bài toán tìm kiếm con đường tối ưu trong đường đi tối ưu hoá, tối ưu hóa mạng và tối ưu hóa vận hành của hệ thống.

Code C++

function minimax(node, depth, maximizingPlayer) is  
if depth ==0 or node is a terminal node then  
return static evaluation of node  
  
if MaximizingPlayer then      // for Maximizer Player  
maxEva= -infinity            
 for each child of node do  
 eva= minimax(child, depth-1, false)  
maxEva= max(maxEva,eva)        //gives Maximum of the values  
return maxEva  
  
else                         // for Minimizer player  
 minEva= +infinity   
 for each child of node do  
 eva= minimax(child, depth-1, true)  
 minEva= min(minEva, eva)         //gives minimum of the values  
 return minEva  


Tuesday, August 30, 2022

[RL series] Thuật toán Q-Learning

10:02:00 AM
[RL series] Thuật toán Q-Learning

Bài trước tôi đã giới thiệu về RL và bây giờ tôi sẽ nói về phương pháp đơn giản để chúng ta dễ dàng tiếp cập với RL.



Q-learning là gì?

Q-learning là một thuật toán học tăng cường không có mô hình (Model-free). Nó học tập dựa trên các giá trị (values-based). Các thuật toán dựa trên giá trị cập nhật hàm giá trị dựa trên một phương trình (đặc biệt là phương trình Bellman). Trong khi loại còn lại, dựa trên chính sách (policy-based) ước tính hàm giá trị với một chính sách tham lam có được từ lần cải tiến chính sách cuối cùng.

Q-learning is an off-policy learner 

Có nghĩa là nó học được giá trị của chính sách (policy) tối ưu một cách độc lập với các hành động của chủ thể (agent). Mặt khác, on-policy learner tìm hiểu giá trị của chính sách đang được thực hiện bởi chủ thể, bao gồm các bước thăm dò và họ sẽ tìm ra một chính sách tối ưu, có tính đến việc khám phá (exploration) vốn có trong chính sách.


"Q" ở đây là gì?

Chữ ‘Q’ trong Q-learning là viết tắt của "quality" chất lượng. Chất lượng ở đây thể hiện mức độ hữu ích của một hành động (action) nhất định trong việc đạt được một số phần thưởng (reward) trong tương lai.


Yếu tố chính của Q-learning

  • Q*(s, a) là giá trị kỳ vọng (phần thưởng chiết khấu tích lũy) của việc thực hiện hành động (action) a ở trạng thái (state) s và sau đó tuân theo chính sách tối ưu (optimal policy).
  • Q-learning sử dụng "Sự khác biệt theo thời gian" Temporal Differences (TD) để ước tính giá trị của Q*(s, a). TD là một chủ thể (agent) có khả năng học hỏi từ môi trường thông qua các giai đoạn (episodes) mà không có kiến ​​thức trước về môi trường.
  • Chủ thể (agent) duy trì một bảng Q[S, A], trong đó S là tập các trạng thái và A là tập các hành động.
  • Q[ssđại diện cho ước tính hiện tại của nó là Q*(s, a).