BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC XÂY DỰNG HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌCNGÀNH KHOA HỌC MÁY TÍNHLẬP TRÌNH ĐỘNG TRONG LÝ THUYẾT TRÒ CHƠISinh viên thực hiện Lê
TỔNG QUAN VỀ LẬP TRÌNH ĐỘNG
Giới thiệu chung
1.1.1 Kháiniệmvềquyhoạchđộng
Lậptrìnhđộng(DynamicProgramming)làmộtphươngphápđượcsửdụngtrong toánhọcvàkhoahọcmáytínhđểgiảiquyếtcácvấnđềphứctạpbằngcáchchia chúngthànhnhữngbàitoánconđơngiảnhơn.Bằngcáchgiảimỗibàitoánconchỉ mộtlầnvàlưutrữkếtquả,nótránhđượccácphéptínhdưthừa,dẫnđếngiảipháp hiệuquảhơnchonhiềubàitoán.
1.1.2 Lậptrìnhđộnghoạtđộngnhưthếnào?
Xácđịnhcácvấnđềphụ:chiavấnđềchínhthànhcácvấnđềphụnhỏhơn,độc lập.
Lưutrữgiảipháp:giảiquyếttừngbàitoánconvàlưutrữgiảiphpastrongmột bảnghoặcmảng.
Xâydựnggiảipháp:sửdụngcácgiảiphápđượclưutrữđểxâydựnggiảiphápcho vấnđềchính.
Tránhdưthừa:bằngcáchlưutrữlờigiải,quyhoạchđộngđảmbảorằngmỗibài toánconchỉđượcgiảimộtlần,giảmthờigiantínhtoán.
Ví dụ về lập trình động:XétbàitoántìmdãyFibonacci
ChuỗiFibonaccisửdụnglậptrìnhđộng:
Giảipháplưutrữ:TạomộtbảngđểlưutrữcácgiátrịcủaF(n)khichúng đượctínhtoán.
Xâydựnglờigiải:ĐốivớiF(n),hãytracứuF(n-1)vàF(n-2)trongbảngvà cộngchúnglại.
Tránhdưthừa:Bảngđảmbảorằngmỗibàitoáncon(vídụF(2))chỉđược giảimộtlần.
Bằngcáchsửdụnglậptrìnhđộng,chúngtacóthểtínhtoándãyFibonaccimột cáchhiệuquảmàkhôngcầnphảitínhtoánlạicácbàitoáncon.
1.1.3 Khinàosửdụnglậptrìnhđộng
Lậptrìnhđộnglàmộtkỹthuậttốiưuhóađượcsửdụngkhigiảiquyếtcácvấnđề baogồmđặcđiểmsau:
Cấutrúctốiưucónghĩalàchúngtakếthợpcáckếtquảtốiưucủacácbàitoán conđểđạtđượckếtquảtốiưucủabàitoánlớnhơn.
Xétvấnđềtìmđườngdẫnchiphítốithiểutrongbiểuđồcótrọngsốtừnút nguồnđếnnútđích.Chúngtachiabàitoánnàythànhcácbàitoánconnhỏ hơn:
Tìmđườngđicóchiphítốithiểutừnútnguồnđếnmỗinúttrung gian.
Tìmđườngđicóchiphítốithiểutừmỗinúttrunggianđếnnútđích. 1.1.3.2 Cácbàitoánconchồngchéo
Cácbàitoáncongiốngnhauđượcgiảilặpđilặplạiởcácphầnkhácnhaucủa bàitoán.
Vídụ:XétbàitoántínhdãyFibonacci.ĐểtínhsốFibonaccitạichỉsốn,chúng tacầntínhsốFibonaccitạichỉsốn-1vàn-2.Điềunàycónghĩalàbàitoáncon tínhsốFibonaccitạichỉsốn-1đượcsửdụnghailầntronglờigiảichobàitoán lớnhơnlàtínhsốFibonaccitạichỉsốn
1.1.4 Cácphươngpháplậptrìnhđộng
Lậptrìnhđộngcóthểđạtđượcbằnghaicáchtiếpcận:
1.1.4.1 Cáchtiếpcậntừtrênxuống(Top-Down)
Trongcáchtiếpcậntừtrênxuống,cònđượcgọilàghinhớ(memoization), chúngtabắtđầuvớilờigiảicuốicùngvàchianóthànhcácbàitoánconnhỏ hơnmộtcáchđệquy.Đểtránhtínhtoándưthừa,chúngtôilưutrữkếtquả củacácbàitoánconđãgiảitrongbảngghinhớ.
Phântíchcáchtiếpcậntừtrênxuống:
Bắtđầuvớilờigiảicuốicùngvàchiathànhcácbàitoánconnhỏhơn. Lưutrữlờigiảicủacácbàitoáncontrongmộtbảngđểtránhtínhtoán dưthừa.
Thíchhợpkhisốlượngbàitoánconlớnvànhiềubàitoánconđượcsử dụnglại.
1.1.4.2 Cáchtiếpcậntừdướilên(Bottom-Up)
Trongcáchtiếpcậntừdướilên,cònđượcgọilàlậpbảng(tabulation),chúng tabắtđầuvớicácbàitoánnhỏnhấtvàdầndầnxâydựngđếnlờigiảicuối cùng.Chúngtalưutrữukếtquảcủacácbàitoánconđãgiảitrongmộtbảngđể tránhtínhtoándưthừa.
Phântíchcáchtiếpcậntừdướilên:
Bắtđầuvớinhữngbàitoánnhỏnhấtvàdẫndầnxâydựnglờigiảicuối cùng. Điềnvàibảngcácgiảiphápchocácbàitoáncontheocáchtừdướilên. Thíchhợpkhisốlượngbàitoánconnhỏvàlờigiảitốiưucóthểđược tínhtrựctiếptừlờigiảicủabàitoánconnhỏhơn.
1.1.5 Ứngdụngcủalậptrìnhđộng
Lậptrìnhđộngcónhiềuứngdụng,baogồm:
Tốiưuhóa:bàitoánbalo,đườngđingắnnhất,mảngcontốiđa.
Khoahọcmáytính:dãyconchungdàinhất,chỉnhsửakhoảngcách,khớp chuỗi.
Nghiêncứuhoạtđộng:quảnlýhàngtồnkho,lậpkếhoạch,phânbổnguồn lực.
Đặc điểm của lập trình động
Lậptrìnhđộnglàmộttrongnhữngkỹthuậtmạnhmẽnhấtđểgiảiquyếtmộtloạivấn đềnhấtđịnh.
Cómộtcáchhayđểhìnhthànhcáchtiếpcậnvàquytrìnhtưduyrấtđơngiản,đồng thờiphầnmãhóacũngrấtdễdàng.
Vềcơbản,đólàmộtlýtưởngđơngiản,saukhigiảiquyếtmộtvấnđềvớimộtđầu vàonhấtđịnh,lưujeetsquảlàmtàiliệuthamkhảođểsửdụngchotươnglai. Lờigiảicủacácbàitoánconđượclưutrữutrongmộtbảnghoặcmảng(ghinhớ)hoặc theocáchtừdướilên(lậpbảng)đểtránhtínhtoándưthừa.
Lờigiảibàitoáncóthểđượcxâydựngtừlờigiảicủacácbàitoáncon.
Lậptrìnhđộngcóthểđượctriểnkhaibằngthuậttoánđệquy,trongđógiảiphápcho cácbàitoánconđượctìmthấyđệquyhoặcsửdụngthuậttoánlặp,giảiphápđược tìmthấybằngcáchgiảiquyếtcácbàitoáncontheomộtthứutựcụthể.
Lập trình động dựa trên các nguyên tắc
Đặctrungcấutrúccủalờigiảitốiưu,tứclàxâydựngmôhìnhtoánhọccủalờigiải. Xácđịnhđệquygiátrịcủagiảipháptốiưu.
Sửdụngphươngpháptiếpcậntừdướilên,tínhtoángiátrịcủalờigiảitốiưucho từngbàitoánconcóthểxảyra.
Xâydựnggiảipháptốiưuchobàitoánbanđầubằngcáchsửdụngthôngtinđược tínhtoánởbướctrước.
1.4 Cácbướcgiảibàitoánbằnglậptrìnhđộng
Các bước giải bIi toán bằng lập trình động
Bước2:Xácđịnhhệthứctruyhồichobàitoántốiưu.
Bước3:TìmnghiệmtốiưucủabàitoánbằnghaiphươngphápTop-Downhoặc Bottom-Up.
Xácđịnhxembàitoáncóthểchiathànhcácbàitoánconnhỏhơnkhông,cóthể giảiquyếtđộclậpvớinhau.
KiểmtraxembàitoáncóthỏamãnnguyênlýBellmanhoặccácđặcđiểmcủaquy hoạchđộnghaykhông.Nhữngđặcđiểmbaogồmbàitoánconchồngchéovàcấu trúctốiưuphụthuộc.
1.4.2 Xácđịnhhệthứcxãhội
Xâydựngmộthệthốngtruyhồiđểtínhtoángiátrịtốiưucủabàitoántừcácbài toánconnhỏhơn. Địnhnghãicáchbiểudiễncáctrạngtháivàcáchchuyểnđổigiữachúng. Xácđịnhcôngthứchoặcquytắcđểtínhtoángiátrịtốiưudựatrêncácgiátrịcủa cáctrạngtháicon.
Cóhaiphươngphápchínhđểtìmnghiệmtốiưucủabàitoán:Top-Down(Đệquy vớighinhớ)vàBottom-Up(Lậpbảng).
TrongphươngphápTop-Down,chúngtasửdụngđệquyvàlưutrữcácgiátrịđã tínhtoántrướcđóđểkhôngphảitínhlại.
TrongphươngphápBottom-Up,chúngtasửdụngmộtbảngđểlưutrữcácgiátrị tốiưuvàđiềnvàobảngtheothứtựcáctrườnghợpcơbảnđếnphứctạp.
1.5 Mộtsốkỹthuậtgiảibàitoánlậptrìnhđộng
Cóhaihướngtiếpcậnđểgiảiquyếtmộtbàitoánbằnglậptrìnhđộng
1.5.1Top-Down(Từtrênxuống–Ghinhớ)
TheohướngtiếpcậnTop-Downchúngtasẽbắtđầubằngbàitoánlớnnhấthaybài toánởmứctrêncùngsauđódùngphươngphápđệquyđểgọilờigiảichocácbài toánconởmứcthấphơntiếptheo.Quátrìnhtiếptụcchođếnkhigặpbàitoánnhỏ nhất.Đệquysẽtựđộngtổhợpkếtquảcácbàitoánconđểđượckếtquảbàitoánban đầu.Cáchnàyđòihỏitốnnhiềuthờinguyênđểghinhớtấtcảkếtquảcủacácbài toáncon.
Việcthựchiệncácloạighinhớphụthuộcvàocácthamsốthayđổichịutráchnhiệm giảiquyếtvấnđề.Cónhiềukíchthuốckhácnhaucủabộnhớđệmđượcsửdụng trongkỹthuậtghinhớ.Dướiđâylàmộttrongsốđó:
Ghinhớ1D:Hàmđệquychỉcómộtđốisốcógiátrịkhôngđổisaumỗilầngọihàm. Ghinhớ2D:Hàmđệquychỉcóhaiđốisốcógiátrịkhôngđổisaumỗilầngọihàm. Ghinhớ3D:Hàmđệquychỉcóbađốisốcógiátrịkhôngđổisaumỗilệnhgọihàm. Kếtluận:Ghinhớlàmộtkháiniệmlậptrìnhvàcóthểđượcápdụngchobấtkỳngôn ngữnào.Mụctiêutuyệtđốicủanólàtốiưuhóachươngtrình.Thôngthườngvấnđề nàyxuấthiệnkhicácchươngtrìnhthựchiệncácphéptínhnặng.Kỹthuậtnàyđược lưutrữtátcảkếtquảđượctínhtoántrướcđóđểkhôngphảitínhtoánlạichocùng mộtvấnđề.
1.5.2Bottom-Up(Từdướilên–Lậpbảng)
HướngtiếpcậnBottom-Upđầutiênchúngtagiảicácbàitoánconởmứcthấpnhất sauđódùngcáckếtquảnàyđểtínhbàitoánởmứctrên.Quátrìnhtiếptụcchođến khichúngtatìmđượckếtquảbàitoánmứccaonhất.Hướngnàykhôngđòihỏiphải lưulạikếtquảcủatấtcảcácbàitoáncon.
Chiếnlượctừdướilêntronglậptrìnhđộnglàlậpbảng
Kếtquảcủacácbàitoánconđượclưutrữtrongmộtbảng,thườnglàmộtmảng Sosánhviệclậpbảngvớiviệcghinhớvềđộphứctạpvềthờigian,việclậpbảng thườngsẽhiệuquảhơn.
Việclậpbảngđượcthựchiệntheocácbướcsau:
Xácđịnhcácyếutốcầntốiưuvàxácđịnhrõràngvấnđềcầngiảiquyết. Tạomộtbảngđểchứakếtquảcủacácbàitoáncon(thườnglàmộtmảng).Sự cốxácđịnhkíchthướccủabảng.
Tạotrườnghợpcơsởhoặcgiátrịbanđầuchobảng.Nhữngconsốnàyđại diệnchocâutrảlờichocácbàitoánconnhỏnhất. Điềnvàobảngtừcácbàitoánconnhỏnhấtđếnbàitoánlớnnhấtbằngcáchsử dụngphéplặp(thườnglàcácvònglặp).Dựatrêncácbàitoánconđãtínhtoán trướcđó,hãyxácđịnhlờigiảichotừngbàitoáncon.
Khibảngđượcđiềnđầyđủ,kếtquảcuốicùngthườngđượctìmthấyởmục cuốicùngcủabảng.
Kếtluận:Lậpbảnglàmộtkỹthuâthmạnhmẽtrongquyhoạchđộngđểgiảiquyết cácvấnđềphứctạpmộtcáchhiệuquảbằngcáchlưutrữkếtquảcácbàitoáncon trongmảng.
1.5.2 Sosánhlậpbảngvàghinhớ
Ghinhớ:Cáchtiếpcậntừtrênxuống
Lưutrữkếtquảcủalệnhgọi
Hàmtriểnkhaiđệquy
Rấtphùhợpchocácbàitoáncótậphợpđầuvàotươngđốinhỏ Đượcsửdụngkhicácbàitoánconcócácbàitoánconchồngchéo.
Lậpbảng:Cáchtiếpcậntừdướilên
Lưutrữkếtquảcủacácbàitoáncontrongmộtbảng
Phùhợpchoáccbàitoáncótậphợpđầuvàolớn Đượcsửdụngkhicácbàitoánconkhôngtrùngnhau.
Tìnhtrạng Quan hệ chuyển trnagj thái rất Quanhệchuyểntrạngtháidễnghĩ
Một số kỹ thuật giải bIi toán lập trình động
Mãsố Mã trở nên phứuc tạp khi yêu cầunhiềuđiềukiện
Mãdễdàngvàítphứctạphơn
Tốcđộ Nhanh chóng, vì truy cập trực tiếpvàocáctrạngtháitrướcđó từbảng
Chậmdocónhiềulệnhgọiđệquy vàbáocáotrảvề
Giảiquyếtvấn đềphụ
Nếu một số bài toán con trong khônggianbài
Tiếpcận Lậpbảng là mộtcách tiếp cận lặpđilặplại
Ghinhớlàmộtcáchtiếpcậnđệ quy
Bảng1:Sosánhlậpbảngvàghinhớ
TÌM HIỂU VỀ LÝ THUYẾT TRÒ CHƠI
Trạng thái trò chơi
3 3 TrạngtháiW-Lcủađồthịtrạngthái
2 2 Trạngtháicủatròchơitrênđồthịtrạngthái
4 4 ĐồthịtrạngtháicócácsốGrundy
5 5 Trạngtháikhởiđầucủatròchơimêcung
6 6 TrạngtháikhởiđầucủatròchơimêcungcósốGrundy
7 7 Trạngtháikhởiđầutròchơiphụ
8 8 TrạngtháikhởiđầucủatròchơiphụcósốGrundy
1 Tínhcấpthiếtcủađềtài
Trongcuộcsống,tấtcảchúngtađềucólýdocánhânchosựlựachọncủamình. Chúngtalựachọndựatheotìnhhuốnghoặcnhữnggìchúngtanghĩlàphùhợp vớibảnthânmìnhhoặccảvớinhữngngườikhác.Mụcđíchchínhcủacácsựlựa chọnnàylàlàmnhữnggìtốtnhất(haycólợinhất)chobảnthân.Lý thuyết trò chơi (Game theory)đãrađờitừđó,làmôhìnhđểnghiêncứucáctìnhhuống mangtínhmâuthuẫnmàtrongđócácbênthamgiasẽlựachọncáchànhđộng khácnhauđểcốgắnglàmtốiưuhóacáckếtquảnhậnđược.Ngàynay,nóđượcáp dụngrộngrãitrongmọikhíacạnhcủađờisống,đặcbiệtlàtrongkinhtế,chínhtrị, lýluận,khoahọcmáytính, Vìthế,ngườinàonắmrõđượccácquytắcvàáp dụnghiệuquảLýthuyếttròchơisẽcónhiềukhảnăngnângcaođượcquyềnlực, địavịtrongxãhội,cũngnhưkiếmvàtiếtkiệmđượcnhiềutiềnhơn.
LýthuyếttròchơilàmộtcôngcụthuộcToánhọcứngdụng,vìthếnócóthểđược biểudiễndướidạngtoán.Tuynhiênởbàiviếtnày,tôichỉmuốngiảithíchmột cáchđơngiảnvàchỉramộtsốcácứngdụngcủaLýthuyếttròchơitrongthựctế. Nhìnchung,“Tròchơi”(Game)ởđâychínhlàcáctìnhhuốngđòihỏinhững ngườithamgia(hayngườichơi)phảiđưaracácquyếtđịnh,vídụnhưliệusẽra đấm,kéohaylákhioẳntùtì;quyếtđịnhsẽmuahaybánkhiđầutưchứngkhoán; quyếtđịnhsẽtấncônghayphòngngựtrongtrậnbóng; Điềuquantrọnglàkết quảvàlợiíchđạtđượcsẽphụthuộcvàoquyếtđịnhcủatấtcảcácbênthamgia,ví dụtôirađấmthìđốiphươngphảirakéothìtôimớithắng;hoặckhitôimuachứng khoánthìnhữngngườikháccũngphảimuatheothìtôimớicólãi.Dođó,xây dựngmôhìnhLýthuyếttròchơisẽgiúpchúngtađưarađượcphươngántốtnhất khibịbuộcphảilựachọn.
Các dạng cơ bản của Lý thuyết trò chơi có thể bao gồm dạng đối xứng(Symmetric), tổng bằng không (Zero-sum), đồng thời (Simultaneous), Tuy nhiên,nhìnchungthìnógiúptathấyđượcbảnchấtcủacáctìnhhuốngđượctạora vàcáclựachọncóthểgiúpgiảiquyếttìnhhuốngđómộtcáchtốtnhấtchochính mìnhcũngnhưnhữngngườikhác.Lýthuyếttròchơicóthểđượcápdụngvàorất nhiềutrườnghợpthựctếtrongcuộcsốngmộtcáchtươngtự.Dođóđềtài“Lập trìnhđộngtronglýthuyếttròchơi”đượcchọnđểthựchiệnđồántốtnghiệp.Lý thuyếttròchơivàlậptrìnhđộnglàhailĩnhvựccósựquanđiểmrấtmạnhmẽ trongkhoahọcmáytính.Sựkếthợpgiữachúngcungcấpcáccôngcụhữuíchđể nghiêncứu,phântíchvàgiảiquyếtcácvấnđềphứctạpliênquanđếntốiưuhóa chiếnlượcvàđưaraquyếtđịnhtrongcáctròchơivàứngdụngthựctế.Lậptrình độngtronglýthuyếttròchơicungcấpmộtloạtcácbàitoánphongphúvàđa dạng.TừviệctínhtoángiátrịGrundychocáctròchơiphứctạpnhưNim,đếntìm kiếmchiếnlượctốiưutrongcáctròchơibàncờnhưtic-tac-toe,chess,haytốiưu hóacácchiếnlượctrongcácmôhìnhthựctế,nhữngbàitoánnàythúvịvàmang tínhthửtháchcao.Nghiêncứuvàthựchiệncácbàitoánlậptrìnhđộngtronglý thuyếttròchơimanglạitrảinghiệmthúvịvàhấpdẫn.Việctìmhiểucáchmáy tính"suynghĩ"vàđưaraquyếtđịnhtrongcáctìnhhuốngđốikhángnhưtrongtrò chơimanglạisựhứngthúvàkhámpháliêntục.Tómlại,lựachọnđềtài"Lập trìnhđộngtronglýthuyếttròchơi"làmộtsựkếthợptuyệtvờigiữalýthuyếtvà thựctiễn,giúppháttriểnkỹnăngnghiêncứuvàlậptrìnhtronglĩnhvựclýthuyết tròchơivàkhoahọcmáytính.
Mụcđíchchínhcủanghiêncứunàylànângcaohiểubiếtvềlýthuyếttròchơivà cácphươngpháptínhtoántronglýthuyếtnày.Lýthuyếttròchơilàmộtlĩnhvực quantrọngtrongkhoahọcmáytính,vàviệcnghiêncứuvềlậptrìnhđộngtrong ngữcảnhnàygiúpcủngcốkiến thứcvềcácthuậttoánvàkỹthuậtquantrọng.Nghiêncứuvềlậptrìnhđộngtronglýthuyếttròchơicungcấpcơhộiápdụngcác kiếnthứcvàkỹnăngvàogiảiquyếtcácvấnđềthựctế.Vídụ,ápdụngcácthuật toánlậptrìnhđộngđểtốiưuhóachiếnlượctrongcácứngdụnggame,hoặctrong cáclĩnhvựckhácnhưtrítuệnhântạovàtốiưuhóa.Tăngcườngkỹnănglậptrình vàkhảnănggiảiquyếtcácbàitoánphứctạp.Việcthựchiệncácthuậttoánlập trìnhđộngtrongcáctròchơicạnhtranh(competitiveprogramming)cũnggiúprèn luyệntưduylogicvàsángtạo.
3 Kếtcấucủađềtài
Chương1:Tổngquankiếnthứcvềlậptrìnhđộng.
Chương2:Tìmhiểuvềlýthuyếttròchơi.
Chương3:Tìmhiểutròchơinđồngxu.
CHƯƠNG 1: TỔNG QUAN VỀ LẬP TRÌNH ĐỘNG
1.1.1 Kháiniệmvềquyhoạchđộng
Lậptrìnhđộng(DynamicProgramming)làmộtphươngphápđượcsửdụngtrong toánhọcvàkhoahọcmáytínhđểgiảiquyếtcácvấnđềphứctạpbằngcáchchia chúngthànhnhữngbàitoánconđơngiảnhơn.Bằngcáchgiảimỗibàitoánconchỉ mộtlầnvàlưutrữkếtquả,nótránhđượccácphéptínhdưthừa,dẫnđếngiảipháp hiệuquảhơnchonhiềubàitoán.
1.1.2 Lậptrìnhđộnghoạtđộngnhưthếnào?
Xácđịnhcácvấnđềphụ:chiavấnđềchínhthànhcácvấnđềphụnhỏhơn,độc lập.
Lưutrữgiảipháp:giảiquyếttừngbàitoánconvàlưutrữgiảiphpastrongmột bảnghoặcmảng.
Xâydựnggiảipháp:sửdụngcácgiảiphápđượclưutrữđểxâydựnggiảiphápcho vấnđềchính.
Tránhdưthừa:bằngcáchlưutrữlờigiải,quyhoạchđộngđảmbảorằngmỗibài toánconchỉđượcgiảimộtlần,giảmthờigiantínhtoán.
Ví dụ về lập trình động:XétbàitoántìmdãyFibonacci
ChuỗiFibonaccisửdụnglậptrìnhđộng:
Giảipháplưutrữ:TạomộtbảngđểlưutrữcácgiátrịcủaF(n)khichúng đượctínhtoán.
Xâydựnglờigiải:ĐốivớiF(n),hãytracứuF(n-1)vàF(n-2)trongbảngvà cộngchúnglại.
Tránhdưthừa:Bảngđảmbảorằngmỗibàitoáncon(vídụF(2))chỉđược giảimộtlần.
Bằngcáchsửdụnglậptrìnhđộng,chúngtacóthểtínhtoándãyFibonaccimột cáchhiệuquảmàkhôngcầnphảitínhtoánlạicácbàitoáncon.
1.1.3 Khinàosửdụnglậptrìnhđộng
Lậptrìnhđộnglàmộtkỹthuậttốiưuhóađượcsửdụngkhigiảiquyếtcácvấnđề baogồmđặcđiểmsau:
Cấutrúctốiưucónghĩalàchúngtakếthợpcáckếtquảtốiưucủacácbàitoán conđểđạtđượckếtquảtốiưucủabàitoánlớnhơn.
Xétvấnđềtìmđườngdẫnchiphítốithiểutrongbiểuđồcótrọngsốtừnút nguồnđếnnútđích.Chúngtachiabàitoánnàythànhcácbàitoánconnhỏ hơn:
Tìmđườngđicóchiphítốithiểutừnútnguồnđếnmỗinúttrung gian.
Tìmđườngđicóchiphítốithiểutừmỗinúttrunggianđếnnútđích. 1.1.3.2 Cácbàitoánconchồngchéo
Cácbàitoáncongiốngnhauđượcgiảilặpđilặplạiởcácphầnkhácnhaucủa bàitoán.
Vídụ:XétbàitoántínhdãyFibonacci.ĐểtínhsốFibonaccitạichỉsốn,chúng tacầntínhsốFibonaccitạichỉsốn-1vàn-2.Điềunàycónghĩalàbàitoáncon tínhsốFibonaccitạichỉsốn-1đượcsửdụnghailầntronglờigiảichobàitoán lớnhơnlàtínhsốFibonaccitạichỉsốn
1.1.4 Cácphươngpháplậptrìnhđộng
Lậptrìnhđộngcóthểđạtđượcbằnghaicáchtiếpcận:
1.1.4.1 Cáchtiếpcậntừtrênxuống(Top-Down)
Trongcáchtiếpcậntừtrênxuống,cònđượcgọilàghinhớ(memoization), chúngtabắtđầuvớilờigiảicuốicùngvàchianóthànhcácbàitoánconnhỏ hơnmộtcáchđệquy.Đểtránhtínhtoándưthừa,chúngtôilưutrữkếtquả củacácbàitoánconđãgiảitrongbảngghinhớ.
Phântíchcáchtiếpcậntừtrênxuống:
Bắtđầuvớilờigiảicuốicùngvàchiathànhcácbàitoánconnhỏhơn. Lưutrữlờigiảicủacácbàitoáncontrongmộtbảngđểtránhtínhtoán dưthừa.
Thíchhợpkhisốlượngbàitoánconlớnvànhiềubàitoánconđượcsử dụnglại.
1.1.4.2 Cáchtiếpcậntừdướilên(Bottom-Up)
Trongcáchtiếpcậntừdướilên,cònđượcgọilàlậpbảng(tabulation),chúng tabắtđầuvớicácbàitoánnhỏnhấtvàdầndầnxâydựngđếnlờigiảicuối cùng.Chúngtalưutrữukếtquảcủacácbàitoánconđãgiảitrongmộtbảngđể tránhtínhtoándưthừa.
Phântíchcáchtiếpcậntừdướilên:
Bắtđầuvớinhữngbàitoánnhỏnhấtvàdẫndầnxâydựnglờigiảicuối cùng. Điềnvàibảngcácgiảiphápchocácbàitoáncontheocáchtừdướilên. Thíchhợpkhisốlượngbàitoánconnhỏvàlờigiảitốiưucóthểđược tínhtrựctiếptừlờigiảicủabàitoánconnhỏhơn.
1.1.5 Ứngdụngcủalậptrìnhđộng
Lậptrìnhđộngcónhiềuứngdụng,baogồm:
Tốiưuhóa:bàitoánbalo,đườngđingắnnhất,mảngcontốiđa.
Khoahọcmáytính:dãyconchungdàinhất,chỉnhsửakhoảngcách,khớp chuỗi.
Nghiêncứuhoạtđộng:quảnlýhàngtồnkho,lậpkếhoạch,phânbổnguồn lực.
1.2 Đặcđiểmcủalậptrìnhđộng
Lậptrìnhđộnglàmộttrongnhữngkỹthuậtmạnhmẽnhấtđểgiảiquyếtmộtloạivấn đềnhấtđịnh.
Cómộtcáchhayđểhìnhthànhcáchtiếpcậnvàquytrìnhtưduyrấtđơngiản,đồng thờiphầnmãhóacũngrấtdễdàng.
Vềcơbản,đólàmộtlýtưởngđơngiản,saukhigiảiquyếtmộtvấnđềvớimộtđầu vàonhấtđịnh,lưujeetsquảlàmtàiliệuthamkhảođểsửdụngchotươnglai. Lờigiảicủacácbàitoánconđượclưutrữutrongmộtbảnghoặcmảng(ghinhớ)hoặc theocáchtừdướilên(lậpbảng)đểtránhtínhtoándưthừa.
Lờigiảibàitoáncóthểđượcxâydựngtừlờigiảicủacácbàitoáncon.
Lậptrìnhđộngcóthểđượctriểnkhaibằngthuậttoánđệquy,trongđógiảiphápcho cácbàitoánconđượctìmthấyđệquyhoặcsửdụngthuậttoánlặp,giảiphápđược tìmthấybằngcáchgiảiquyếtcácbàitoáncontheomộtthứutựcụthể.
Đồ thị trạng thái của trò chơi (State graph)
Xétmộttròchơigậykhác,khitrongmỗitrạngtháik,tađượcphéploạibỏsốlượngx gậybấtkỳnàosaochoxnhỏhơnkvàchiahếtchok
Vídụtrongtrạngthái8chúngtacóthểbỏ1,2hoặc4gậy,nhưngtrongtrạngthái7 chúngtachỉđượcloạibỏ1gậy.
Hìnhsauchỉracáctrạngthái1…9củatròchơibằngđồthịtrạngthái,khimỗiđỉnhlà mộttrạngtháivàcáccạnhlàcácđườngđigiữachúng.
Hình2:Trạngtháicủatròchơitrênđồthịtrạngthái
Trạngtháicuốicùngtrongtròchơinàyluônlàtrạngthái1,làtrạngtháithuavìkhông cónướcđihợplệ.Việcphânloạicáctrạngthái1…9nhưsau:
Bảng3:TrạngtháiL-Wcủađồthịtrạngthái
Trongtròchơinày,tấtcảcáctrạngtháisỗchẵnlàcáctrạngtháisốchẵnđềulàtrạng tháithắngvàtấtcảcáctrạngtháisốlẻlàtrạngtháithua.
Trò chơi tổ hợp cân bằng
Trò chơi tổ hợplàtròchơigồm:hai người chơi (ở đây gọi người chơi trước là và𝐴 người chơi sau là 𝐵),mộttập hữu hạn các trạng thái𝑆(viếttắtcủaState)cóthểđạt đượccủatròchơi.Mỗingườichơicómộttập các bước di chuyển hợp lệ𝑄 đểdi chuyểntừtrạngtháinàysangtrạngtháikhác(gọilàluậtchơi)vàmộttậpcáctrạng tháikếtthúcgọilà𝑇⊂𝑆(viếttắtcủaTerminal).Haingườichơisẽluânphiêndi chuyểntừtrạngtháinàysangtrạngtháikhác.Ngườiđếnđượctrạngtháikếtthúc trướcsẽlàngườichiếnthắng.
Tròchơitổhợpcânbằnglàtròchơiđốikhángthỏamãnnhữngđiềukiệnsau:
Cómộttậphữuhạncácvịtrícóthểxảyra(cáctrạngthái)củatròchơi Cóquyluậtchơiápdụngchohaingườichơilàcânbằng,nghĩalàmỗi ngườichơiđếnlượtmìnhđềucóquyềnchọnmộtphépdichuyểnhợplệtùy ý
Haingườichơilầnlượt,mỗilầnthựchiệnmộtphépdichuyểnhợplệ Tròchơikếtthúckhiđạttớivịtríkếtthúc.Thôngthườngquyđịnhngười chơidichuyểnđượccuốicùnglàngườichiếnthắng,ngườinàođếnlượtmà kdichuyểnđượcnữathìthua
Nếutròchơikhôngbaogiờkếtthúcsẽcómộtthôngbáorútthăm.Cóthể bổsungthêmđiềukiệnnàođóđểtròchơikếtthúckhoongcângthôngbáo rútthămnhưPtròchơisẽkếtthúckhiđãcóđủsốlầndichuyểnnhấtđịnh màkhôngaithắngthìhaiđấuthủhòa.
2.4.2TậpP,tậpNvàcáchtìm Đểthuậntiệnchoviệcxâydựngthuậttoán(giànhthắng)củatròchơi,ngườitađưara kháiniệmtậpPvàtậpN.Đólàhaitậpthỏamãncáctínhchấtsau:
N:tậpcáctrạngtháix Ssaochonếutrạngtháibanđầucủatròchơilà xthìngười chơi trướcluônchiếnthắng
P:tậpcáctrạngtháix Ssaochonếutrạngtháibanđầucủatròchơilà xthìngười chơi sauluônởtrạngtháithắng.
Từđịnhnghĩatrên,NvàPsẽthỏamãnbatínhchấtsau:
TậpPphảichứatoànbộtrạngtháikếtthúc
VớimỗitrạngtháisthuộctậpN,tồntạiítnhấtmộttrạngtháis’đếnđượctừsmà thuộctậpP
VớimỗitrạngtháisthuộctậpP,tấtcảcáctrạngtháis’đếnđượctừsphảithuộcN Ràngbuộcđầutiênxácđịnhtrườnghợpcơbảnnhất.Hairàngbuộcsausẽgiúpchúng taliêntụcđệquytừtrườnghợpcơbảnđểxâydựngđượctậpPvàNhoànchỉnh.Ta sẽthấyrõđiềunàyởphầnThuật toán xác định tập vI NP
KhixâydựngđượctậpPvàNtheocácràngbuộctrên,tacóthểdễdàngxâydựng chiếnthuậtthắngchongườichơiAnhưsau(dođâylàtròchơitổhợpcânbằngnên chiếnthuậtthắngcủaBcũngsẽtươngtự):
1 Nếu𝐴bắt đầu ở trạng thái thuộc N,luôn đi tới trạng thái thuộc Pđể épBđivàotrạngtháithuộcN.Dongườithắnglàngườiđivàotrạngtháikết thúc,màtrạngtháikếtthúclạithuộcPnênchắcchắnAsẽthắng.
2 NếuAbắtđầuởtrạngtháithuộcP,Achỉcóthểkéodàivánđấuvàđợisơ hởcủaB(BđivàovịtríthuộcN)vàdùngchiếnthuậtthắngởtrườnghợp đầu.TuynhiênnếuBcũngchơitốiưuthìchắcchắnAsẽthua.
2.4.3TổngNimvàtròchơiNim
TổngNimcủahaisốnguyênkhôngâmlàkếtquảcủaphépcộngkhôngnhớcủahai sốđótronghệcơsố2(còngọilàcộngtheomodun2).
Số3hệthậpphânviếtdướidạng cơsố2là
Số5hệthậpphânviếtdướidạng cơsố2là
Số8hệthậpphânviếtdướidạng cơsố2là
TổngNimcủachúnglà: 1110(là14tronghệthậpphân)
Phéptoán (tínhtổngNim)làxorcótínhchấtkếthợp,giaohoán.Đặcbiệt: 0 a=a,a a=0,dođónếua b=a cthìb=c
TròchơiNimlàmộttròchơiđơngiảnnhưngcómộtvaitròquantrọngtronglý thuyếttròchơi,vìnhiềutròchơikháccóthểđượcchơibằngchiếnlượctươngtự. Đầutiênchúngtasẽtậpchungvàonim,sauđóchúngtasẽtạorachiếnlượcchocác tròchơikhác.
Cónđốnggậytrongnim,vàmỗiđốngbaogồmmộtsốcâygậy.
Ngườichơilầnlượtdichuyểnvàởmỗilượt,ngườichơichọnmộtđốngcònchứa gậyvàloạibỏsốlượnggậybấtkỳkhỏiđó
Ngườichiếnthắnglàngườiloạibỏcâygậycuốicùng.
Chúngtacóthểdễdàngphânloạibấtkỳtrạngtháinimnàobằngcáchtínhtổngnims
=x1 x2 … xn,trongđó làphéptoánxor.
Cáctrạngtháicótổngnim=0làtrạngtháithuavàtấtcảcáctrạngtháikháclàtrạng tháithắng.
Trạng thái thua:trạngtháicuốicùng[0,0,…0]làtrạngtháithua,vàtổngnimcủa nólà0.
Trongcáctrạngtháithuakhác,baogồmbấtkỳnướcđinàodẫnđếntrạngtháithắng, vìkhigiátrịxkthayđổi,tổngnimcũngthayđổi,dođótổngnimkhác0saunướcđi.
Trạng thái thắng:chúngtacóthểdichuyểnđếntrạngtháithuanếucómộtđốngbất kỳmàxk s0nênnólàvịtríN
Trạngthái[4,12,8]tươngứngvới4 12 8=0nênnólàvịtríP
TừđịnhlýsuyrachiếnthuậtgiànhthắngtrongtròchơiNimchuẩnnhưsau: Giảsửhiệntạilà(x1,x2,…,xn)tươngứngvớitổngNimlà: g=x1 x2 … xn>0
Cóthểchứngminhsẽtồntạithànhphầnximàxi’=g xi xi.Cáchđểgiànhchiến thắnglàgiảmxithànhx’i.
Trạngtháimới(x1,x2,…,x(i-1),x’i,x(i+1),…,xn)cótổngNimlàg’=0vì: g’=x1 x2 … x(i-1) x(i+1) … xn
QuađịnhlýBouton,chúngtacómộtcáchxácđịnhPvàNdựatrêntổngNim,vàtừ việcchứngminhđịnhlýBouton,takhôngchỉbiếtđượctrạngtháithắng–thuacủa tròchơimàcòncóthểxâydựngđượcmộtchiếnthuậtthắngcụthể.
2.4.6Tròchơitrênđồthị
Mộtsốđồchơicóthểmôtảbằngđồthịcóhướng.Mỗivịtrícủatròchơiđượccoi nhưmộtđỉnhcủađồthịvàmỗiphépdichuyểnhợplệđượcxemnhưmộtcũngdẫntừ đỉnhnàysangđỉnhkhác.ChúngtasẽđinhjnghĩahàmSprague–Grundy(SG)đểxác địnhđượccácvịtríPhoặcNcủatròchơitrênđồthị. ĐồthịtròchơilàđồthịcóhướngG=(X,F)vớiXlàtậpđỉnhkhôngrỗng–làtậpcác vịtrícủatròchơivàFlàhàmtrêntậpXsaochovớimỗix XthìF(x)làmộttập conthuộcXtứclàx X F(x) X.CácđỉnhthuộcF(x)đượcgọilàcácđỉnhcó thểtớitừđỉnhx.NếuF(x)rỗngthìxlàđỉnhkếtthúc.Mộtphépdichuyểnhợplệlàđi từđỉnhxtớimộtđỉnhthuộcF(x).
Tròchơitổhợpcânbằngcó2ngườiđượcmôphỏngtrênđồthịG=(X,F)vớiđỉnh xuấtphátx0 Xvàtuântheocácquytắcsau:
(1) Ngườichơithứunhấtđitrướcvàbắtđầutừđỉnhx0
(2) Haingườichơilầnlượtthựchiệnphépdichuyểntrênđồthị (3) Tạivịtríx,ngườichơiđượcdichuyểnđếnbấtkìy F(x)
(4) Ngườichơinàođếnlượtphảinhậnđỉnhkếtthúclàngườithua.
2.4.7ĐịnhlýSprague–Grundy ĐịnhlýSprague–Grundyphátbiểurằng:mọitròchơitổhợpcânbằngkếtthúctrong hữuhạnbướcđềutươngđươngvớitròchơiNimmộtcột,trongđótrạngtháixcủatrò chơihiệntạitươngứngvớitrạngtháitròchơiNimmộtcộtcóg(x)viênsỏi,trongđó g(x)làgiátrịcủaSprague–Grundycủax.
Trò chơi hai người có tổng điểm bằng 0
2.5.1ĐịnhlýMinimax ĐịnhlýMinimaxlàmộtlýthuyếtcơbảntronglĩnhvựctròchơivàtrítuệnhân tạo,đặcbiệtlàtrongcáctròchơihaingườicótínhcạnhtranhvàcóthôngtinhoàn toàn(zero-sumgames).Địnhlýnàynóivềmốiquanhệgiữahaingườichơitrong tròchơinàyvàmôtảcáchtốiưuhóachiếnlượccủamỗingườichơi.
Các yếu tố chính của định lý Minimax lI:
Zero-sum game (trò chơi tổng điểm bằng 0):ĐịnhlýMinimaxápdụngchocác tròchơizero-sum,nghĩalàtổngsốđiểmcủacácngườichơilàkhôngđổisaumỗi nướcđi.Nếumộtngườichơiđạtđượclợiích,thìngườichơicònlạisẽchịuthiệt hạitươngứng.
Tối ưu hóa chiến lược:ĐịnhlýMinimaxchobiếtcáchmỗingườichơinênlựa chọnnướcđitốiưunhấtdựatrêncáclựachọncósẵncủađốiphương.Mụctiêulà tốiđahóalợiíchcủangườichơihiệntại,đồngthờitốithiểuhóalợiíchtốiđacủa đốiphương.
Cây quyết định (game tree):ĐịnhlýMinimaxđượcápdụngtrêncâyquyếtđịnh củatròchơi,trongđómỗinútđạidiệnchomộttìnhhuốngtròchơisaumỗinước đi.Cácnútláđạidiệnchocáctrạngtháikếtthúccủatròchơi. ĐịnhlýMinimaxlàmộtkháiniệmquantrọngtronglýthuyếttròchơi,đặcbiệtlà trongcáctròchơitổng-không(zero-sumgame)giữahaingườichơi,nơilợiích củamộtngườichínhlàtổnthấtcủangườikia.Địnhlýnàyđượcpháttriểnbởi JohnvonNeumann,vànóđặtnềntảngchohiểubiếtvềchiếnlượctốiưutrongcác tìnhhuốngcạnhtranh.
Giải thích Định lý Minimax: ĐịnhlýMinimaxkhẳngđịnhrằngtrongmộttròchơitổng-khôngvớithôngtin hoànchỉnh,cómộtgiátrịcụthể(gọilàgiátrịMinimax)màtạiđó:
Ngườichơithứnhất(gọilà"Maximizer")cóthểđảmbảorằng,vớichiếnlượctối ưucủamình,ítnhấtsẽthuđượcgiátrịnàybấtkểchiếnlượccủangườichơithứ hai.
Ngườichơithứhai(gọilà"Minimizer")cóthểngănchặnngườichơithứnhấtthu đượcnhiềuhơngiátrịnàyvớichiếnlượctốiưucủamình.
Công thức: maxx∈X miny∈Y f x y( , )=miny∈Y maxx∈X f x y( , )
Trongđó: xvà làcácchiếnlượccủahaingườichơi.y f x y( , )làhàmchitrả,đolườngkếtquảcủatròchơidựatrênsựlựachọnchiếnlược củacảhaingườichơi.
Ngườichơi"Maximizer"tìmcáchtốiđahóagiátrịtốithiểumàhọcóthểbịép nhận.
Ngườichơi"Minimizer"tìmcáchtốithiểuhóagiátrịtốiđamàđốithủcóthểđạt được. Ý nghĩa: Địnhlýnàycungcấpcơsởchochiếnlượctốiưukhicácngườichơiđốiđầunhau vớimụctiêuhoàntoànđốilập.Nóchophépmỗingườichơixácđịnhcáclựachọn tốiưucủahọkhibiếtđốithủcũngsẽchơimộtcáchtốiưu.Điềunàyđặcbiệtquan trọngtronglậpkếhoạchchiếnlượcvàraquyếtđịnh,từtròchơicờtớiđàmphán kinhdoanh,vàthậmchílàtronglĩnhvựcquânsự.
Trongcáctròchơithực tếnhưtròchơichọnđồngxu, việcápdụngđịnhlý Minimaxgiúpngườichơixácđịnhnhữnglựachọnmanglạilợiíchtốithiểuan toànnhấttrongkịchbảnxấunhất,từđóđảmbảokếtquảtốtnhấtcóthểkhicảhai bêncạnhtranhđềuchơitốiưu.
Cách áp dụng công thức Minimax trong bIi toán:
Công thức cập nhật dp[i][j]: dp i j[ ][ ]=max(min(A,B),min(C,D))
A =coins[i dp i]+ [ +2][ ]:Điểmsốkhingườichơichọnđồngxui,vàsauđój đốithủchọnđồngxui+1.
B =coins[i dp i]+ [ +1][ −1]:Điểmsốkhingườichơichọnđồngxui,vàđốij thủchọnđồngxu j
C =coins[j dp i]+ [ +1][ −1]:Điểmsốkhingườichơichọnđồngxuj,vàđốij thủchọnđồngxu i
D =coins[j dp i j]+ [ ][ −2]:Điểmsốkhingườichơichọnđồngxuj,vàsauđó đốithủchọnđồngxuj-1.
Maximization:Ngườichơichọngiữahailựachọn(chọnđồngxu hoặcj)i đểtốiđahóađiểmsốtốithiểumàhọcóthểthuđược.Điềunàythểhiệnvai tròcủa"Maximizer"trongMinimax.
Minimization:Đốithủsẽcốgắngtốithiểuhóađiểmsốmàngườichơicó thểthuđượctronglượttiếptheobằngcáchchọnđồngxutốiưucủahọ. Điềunàythểhiệnvaitròcủa"Minimizer".
Chiến lược tối ưu:Chiếnlượcnàyđảmbảorằngdùđốithủcólựachọnnhưthế nào,ngườichơicũngđãchọnđượclựachọntốtnhấtcóthểdựatrêngiảđịnhđối thủchơitốiưu.
Cân bằng Nash:Trạngtháitrongđókhôngcóngườichơinàocóđộngcơđểthay đổichiếnlượccủamìnhmộtcáchđơnphương.
Cân bằng Nashlàmộtkháiniệmquantrọngtronglý thuyết trò chơi mang lại kết quả tối ưutrongtrườnghợpngườichơikhông đi chệchkhỏichiếnlượcban đầucủahọ.Điềunàyđượcthựchiệnđểđáplạiviệckhôngcóđộngcơnàocung cấpchongườichơivềsựsailệchnhưvậy.TròchơinàyđượcđặttheotêncủaNhà toánhọcJohnNash,ngườixácđịnhlờigiảicủamộttròchơikhônghợptáccósự thamgiacủahaingườichơitrởlên.
Bởivìchiếnlượcvẫntốiưuvàngườidùngkhôngnhậnđượcbấtkỳưuđãinào cũngbiểuthịrằngnhữngngườichơiđãbiếtvềchiếnlượccủanhauvàdođósẽ khôngđichệchhướngchútnào.
Vìngườichơikhácvẫnkhôngthayđổichiếnlượccủamìnhnênmộtcánhân khôngthểnhậnđượclợiíchgiatăngnàotừsựsailệchđó.Một trò chơi có thể có nhiều hoặc không có điểm cân bằng Nash.
CânbằngNashcungcấpmộtgiải pháp tối ưuđểđạtđượckếtquảmong muốnbằngcáchkhôngđichệchkhỏichiếnlượcbanđầucủahọ.
ỨNG DỤNG LẬP TRÌNH ĐỘNG TRONG LÝ THUYẾT TRÒ CHƠI N ĐỒNG XU
Giới thiệu về trò chơi n đồng xu
Bốicảnh:cónđồngxutrênbàn,mỗiđồngxucógiátrịkhácnhau.Haingườichơi thaynhauchọnmộtđồngxutừmộttronghaiđầucủadãyxu
Mụctiêu:mỗingườicốgắngthuthậpsốtiềnnhiềunhấtcóthể.Ngườichiếnthắng làngườicótổngsốtiềnnhiềuhơnkhitấtcảcácđồngxuđềuđãđượcchọn.
Chiếnlược:sửdụnglậptrìnhđộngđẻxácđịnhchiếnlượctốiưucủamỗingười chơi.Mỗiquyếtđịnhsedựavàotrạngtháihiệntạicủatròchơivàgiátrịdựkiến củacácnướcđitươnglai.
Các khía cạnh của lý thuyết trò chơi trong bIi toán nIy
Chiến lược Tối ưu:Trongbàitoánnày,mỗingườichơicầnphảixemxétchiến lượctốiưukhôngchỉdựatrêngiátrịhiệntạimàcòndựatrêncáclựachọntiếp theocủađốithủ.Chiếnlượcnàydựatrênviệcdựđoánvàphảnứnglạihànhđộng củađốithủ,điểnhìnhcholýthuyếttròchơi.
Dự đoán hInh động của đối thủ:Ngườichơikhôngchỉtínhtoánlựachọndựa trêngiátrịtrựctiếpcủađồngxumàcòncầnphảidựđoánlựachọntốiưucủađối thủđểtốiđahóakếtquảcủamìnhtrongtươnglai.Điềunàyđòihỏiviệcxemxét tấtcảcáckhảnăngvàlựachọnphảnứngtốtnhất.
Minimax Algorithm:Côngthứctínhgiátrịdp[i][j]trongtròchơichọnđồngxu phảnánhthuậttoánMinimax,nơimỗingườichơicốgắngtốiđahóalợiíchtối thiểumàhọcóthểnhậnđượcdựatrênsựlựachọntốiưucủađốithủ.Trongđó, ngườichơisẽchọnđộngtháimàtốiđahóalợiíchtốithiểucóthểđạtđược,dựa trêngiảđịnhrằngđốithủcũngchơitốiưu.
Nash Equilibrium:Trongbốicảnhnày,mỗingườichơichọnđồngxusaocho khôngcólựachọntốthơnnếubiếttrướclựachọncủađốithủ,đạtđếnđiểmcân bằngNash,nơikhôngaicóthểcảithiệnvịthếcủamìnhbằngcáchthayđổiđơn phươnglựachọncủahọ.
BIi toán
VớitròchơiNđồngxu,chúngtacóthểmôphỏngchiếnlượcsửdụnglậptrình độngthôngquamộtvídụcụthể.Giảsửcó4đồngxucógiátrịlầnlượtlà2,4, 6và8.Chúngtasẽtìmchiếnlượctốiưuchongườichơiđầutiên,ngườicố gắngthuthậpsốtiềnnhiềunhất.
Bước 1: Xác định các trạng thái vI giá trị
Mỗitrạngtháicủatròchơiđượcbiểudiễnbởicácđồngxucònlạitrênbàn.Chúng tasẽxâydựngmộtmatrậndptrongđódp[i][j]làsốtiềntốiđamàngườichơiđầu tiêncóthểthuđượckhichỉcòncácđồngxutừvịtríiđếnj.
Bước 2: Xây dựng bảng lập trình động
Cáchtínhtoándp[i][j]sẽdựatrênviệcngườichơiđólựachọnđồngxuởđầui hoặccuốij
Nếungườichơichọnđồngxui,đốithủsẽtốiưuhóasốtiềnmàhọcóthểthuđược từđoạn[i+1,j],vìvậysốtiềnngườichơinàythuđượcsẽlàcoins[i]+(tổngđoạn -dp[i+1][j]).
Tươngtự,nếuchọnđồngxuj,sốtiềnsẽlàcoins[j]+(tổngđoạn-dp[i][j-1]).Trongđótổngđoạnlàtổnggiátrịcủađồngxutừiđếnj.
Bước 3: Tính toán bảng giá trị
Giảsửcácđồngxucógiátrịnhưđãđềcập:[1,2,3,4].Tasẽxâydựngbảngdp dựatrêncáctrườnghợpcơbản:
Khii==j,tứcchỉcómộtđồngxu,dp[i][j]=coins[i]vìngườichơisẽchọnđồng xuđó.
1 Biến a:Đâylàtrườnghợpsaukhingườichơihiệntạichọnđồngxuởvịtrí ,đốii thủcóthểchọnđồngxutiếptheoởi+1.Nếuđiềunàyxảyra,lựachọntiếptheo củangườichơihiệntạisẽlàtrongphạmvitừi+2đến Biến lưugiátrịcủaj a dp[i+2][j],tứcsốtiềntốiđamàngườichơihiệntạicóthểthuđượctừđoạncònlại nếuđốithủchọnđồngxuởi+1.Nếui+2lớnhơn ,tứclàkhôngcònđồngxunàoj đểchọn,giátrịcủa sẽlà0,vìkhôngcònlựachọnnàokhảthi.a
2 Biến b:Đâylàtrườnghợpngườichơihiệntạichọnđồngxuở vàđốithủchọni đồngxuở hoặcngượclại.Sauđó,lựachọntiếptheocủangườichơihiệntạisẽlàj trongphạmvitừi+1đếnj-1.Biến lưugiátrịcủab dp[i+1][j-1],tứcsốtiềntốiđa màngườichơihiệntạicóthểthuđượctừđoạncònlại.Nếui+1lớnhơnj-1,không cònđồngxunàogiữahaivịtrínày,giátrịcủa sẽlà0.b
3 Biến c:Đâylàtrườnghợpsaukhingườichơihiệntạichọnđồngxuởvịtrí ,đốij thủcóthểchọnđồngxutiếptheoởj-1.Sauđó,lựachọntiếptheocủangườichơi hiệntạisẽlàtrongphạmvitừ đếni j-2.Biến lưugiátrịcủac dp[i][j-2],tứcsố tiềntốiđamàngườichơihiệntạicóthểthuđượctừđoạncònlạinếuđốithủchọn đồngxuởj-1.Nếu lớnhơni j-2,tứclàkhôngcònđồngxunàođểchọn,giátrịcủa csẽlà0.
Khởi tạo vI Định nghĩa
3.4.1Khởitạomatrậndp
Mộtmatrậnkíchthước4x4vớitấtcảcácgiátrịkhởitạolà0.
Các trường hợp cơ bản:Đốivớidp[i][i] vớimọi ,giátrịsẽbằnggiátrịcủai đồngxutạivịtríđó,vìchỉcómộtđồngxuđểchọn. dp[0][0]=2,dp[1][1]=4,dp[2][2]=6,dp[3][3]=8
Khitínhdp[i][j],chúngtađangcốgắngtìmsốtiềntốiđamàngườichơihiệntại cóthểthuđượcnếuhọbắtđầuchơitrongphạmvitừđồngxu đếnđồngxu i j
Trongcôngthứcnày: dp[i][j]=max(coins[i]+min(dp[i+2][j],dp[i+1][j-1]),coins[j]+min(dp[i+1][j- 1],dp[i][j-2]))
Ngườichơiđầutiên(lượtchọn ):i
Chọnđồngxu ,sauđóđốithủsẽchọntốiưu(nghĩalà i min(dp[i+2][j], dp[i+1][j-1])).
Ngườichơithứhai(lượtchọn ):j
Chọnđồngxu ,sauđóđốithủsẽchọntốiưu(nghĩalàj min(dp[i+1][j-1], dp[i][j-2])).
Cácgiátrị , ,và đượcsửdụngđểtínhcáctrườnghợpkhácnhaumàđốithủcóa b c thểchọnsaulượtcủangườichơihiệntại: a=dp[i+2][j]:Đâylàsốtiềntốiđamàngườichơihiệntạicóthểthuđượcsaukhi họchọnđồngxuởvịtríivàđốithủchọnđồngxuởvịtríi+1.
Vídụ,nếui=0vàj=3,vàngườichơichọnđồngxuởvịtrí0(i),đốithủchọnđồng xuởvịtrí1(i+1),thìasẽlàgiátrịcủadp[2][3],làsốtiềntốiđamàngườichơicó thểthuđượctừhaiđồngxucònlại(6và8). b=dp[i+1][j-1]:Đâylàsốtiềntốiđamàngườichơihiệntạicóthểthuđượcnếu ngườichơichọnđồngxuởvịtríivàđốithủchọnđồngxuởvịtríj(hoặcngược lại).
Vídụ,bsẽlàgiátrịcủadp[1][2]nếungườichơichọnđồngxuởvịtrí0vàđốithủ chọnđồngxuởvịtrí3. c=dp[i][j-2]:Đâylàsốtiềntốiđamàngườichơihiệntạicóthểthuđượcnếuhọ chọnđồngxuởvịtríjvàđốithủchọnđồngxuởvịtríj-1.
Vídụ,csẽlàgiátrịcủadp[0][1]nếungườichơichọnđồngxuởvịtrí3vàđốithủ chọnđồngxuởvịtrí2.
3.4.3Tínhgiátrịtốiưuchocácđoạnđồngxucóđộdàilớnhơn1
Xétcáckhoảngcó2đồngxu(length=2)
Vớii=0,j=1 a=dp[2][1]=0(vìkhôngtồntại) b=dp[1][0]=0(vìkhôngtồntại) c=0 dp[0][1]=max(coins[0]+min(a,b),coins[1]+min(b,c))=max(2+0,4+0) 4
Xétcáckhoảngcó3đồngxu(length=3)
Vớii=0,j=2 a=dp[2][2]=6 b=dp[1][1]=4 c=dp[0][0]=2 dp[0][2]=max(coins[0]+min(a,b),coins[2]+min(b,c))=max(2+4,6+2) 8
Vớii=1,j=3 a=dp[3][3]=8 b=dp[2][2]=6 c=dp[1][1]=4 dp[1][3]=max(coins[1]+min(a,b),coins[3]+min(b,c))=max(4+6,8+4) 12
Xétkhoảngtừ0đến3(length=4)
Vớii=0,j=3 a=dp[2][3]=8 b=dp[1][2]=6 c=dp[0][1]=4 dp[0][3]=max(coins[0]+min(a,b),coins[3]+min(b,c))=max(2+6,8+4) 12
Giátrịtốiưucủatròchơilàdp[0][3]=12.
Giảibàitoántròchơinđồngxubằngphươngphápđệquy
Sosánhlậptrìnhđộngvàđệquy
Dễhiểuvàtriểnkhai Giảipháptrựctiếpdựatrênđịnhnghĩacủabàitoán Phùhợpvớicácbàitoáncókíchthướcnhỏhoặcgiảithuật đơngiản
Cóthểgặphiệntượngtrùnglặptínhtoánvìmộtsốtrượng hợpconđượctínhtoánnhiềulần
Hiệusuấtkhôngtốtđốivớicácbàitoáncókíchthướclớn. 3.4.2 Lậptrìnhđộng Ưuđiểm:
Loạibỏhiệntượngtrùnglặpbằngcáchlưutrữcáckếtquả củacácbàitoánconđãđượctínhtoán
Cảithiệnhiệusuấtnhờbộnhớlưutrữ Phùhợpvớicácbàicókíchthướclớn Nhượcđiểm:
PhứctạphơnsovớitriểnkhaiđệquyđơnthuầnYêucầunhiềubộnhớhơn.