Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 76 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
76
Dung lượng
1,17 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC ĐÀ NẴNG NGUYỄN MẠNH HUY ÁP DỤNG KỸ THUẬT QUY HOẠCH ĐỘNG GIẢI CÁC BÀI TOÁN TỐI ƢU LUẬN VĂN THẠC SĨ KHOA HỌC Đà Nẵng – Năm 2015 BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC ĐÀ NẴNG NGUYỄN MẠNH HUY ÁP DỤNG KỸ THUẬT QUY HOẠCH ĐỘNG GIẢI CÁC BÀI TỐN TỐI ƢU Chun ngành: Phƣơng pháp Tốn sơ cấp Mã số: 60.46.40 LUẬN VĂN THẠC SĨ KHOA HỌC Ngƣời hƣớng dẫn khoa học: PGS.TSKH Trần Quốc Chiến Đà Nẵng – Năm 2015 LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu riêng tơi Các số liệu, kết nêu luận văn trung thực chƣa đƣợc công bố cơng trình khác Tác giả luận văn Nguyễn Mạnh Huy MỤC LỤC MỞ ĐẦU 1.Lý chọn đề tài 2.Mục đích nghiên cứu 3.Phƣơng pháp nghiên cứu 4.Đối tƣợng phạm vi nghiên cứu 5.Bố cục đề tài CHƢƠNG 1:KỸ THUẬT QUY HOẠCH ĐỘNG 1.1 TỔNG QUAN VÀ MỘT SỐ KHÁI NIỆM CHUNG 1.2 KỸ THUẬT QUY HOẠCH ĐỘNG 1.3 MỘT SỐ BÀI TỐN VÍ DỤ 1.3.1 Bài toán dãy Fibonacci 1.3.2 Bài tốn tính hệ số khai triển nhị thức newtơn (a+b)n 10 KẾT LUẬN CHƢƠNG 13 CHƢƠNG 2:CÁC BÀI TOÁN TỐI ƢU TỔ HỢP 14 2.1 BÀI TỐN BA LƠ (DẠNG 0-1) 14 2.1.1 Bài toán 14 2.1.2 Phân tích tốn 14 2.1.3 Thuật toán 16 2.2 BÀI TOÁN BA LÔ (DẠNG 0-n) 18 2.2.1 Bài toán 18 2.2.2 Phân tích toán 19 2.2.3 Thuật toán 19 2.3 BÀI TOÁN NHÂN TỔ HỢP MA TRẬN 23 2.3.1 Bài toán 23 2.3.2 Phân tích tốn 23 2.3.3 Thuật toán 25 2.4 DÃY CON ĐƠN ĐIỆU DÀI NHẤT 30 2.4.1 Bài toán 30 2.4.2 Phân tích tốn 31 2.4.3 Thuật toán 32 2.5 CHUỖI CON CHUNG DÀI NHẤT CỦA CHUỖI 35 2.5.1 Bài toán 35 2.5.2 Phân tích tốn 35 2.5.3 Thuật toán 36 2.6 BÀI TOÁN CON KIẾN 38 2.6.1 Bài toán 38 2.6.2 Phân tích tốn 39 2.6.3 Thuật toán 39 CHƢƠNG 3:CÀI ĐẶT CHƢƠNG TRÌNH 42 3.1 NGƠN NGỮ LẬP TRÌNH PASCAL 42 3.2 CÀI ĐẶT CHƢƠNG TRÌNH VÀ KẾT QUẢ THỰC HIỆN 42 3.2.1 Bài toán “khai triển nhị thức newtơn” 43 3.2.2 Bài toán ba lô 44 3.2.3 Bài toán nhân tổ hợp dãy ma trận 45 3.2.4 Dãy đơn điệu tăng dài 46 3.2.5 Chuỗi chung dài hai chuỗi 46 3.2.6 Bài toán kiến 48 PHỤLỤC 50 KẾT LUẬN 68 TÀI LIỆU THAM KHẢO 70 DANH MỤC CÁC HÌNH Số hiệu hình Tên hình Trang 1.1 Tính số hạng thứ dãy Fibonacci 3.1 Giao diện chƣơng trình 43 MỞ ĐẦU Lý chọn đề tài Trong trình học tập, gặp nhiều tập ToánTin Các tập dạng phong phú đa dạng Thực tế chƣa có thuật tốn hồn chỉnh áp dụng cho toán Tuy nhiên ngƣời ta tìm số thuật tốn chung nhƣ chia để trị, tham lam, quay lui, Các thuật tốn áp dụng để giải lớp rộng toán hay gặp thực tế Quy hoạch động có nét giống nhƣ phƣơng pháp “Chia để trị”, địi hỏi việc chia tốn thành tốn kích thƣớc nhỏ hơn, phƣơng pháp chia để trị chia toán cần giải thành tốn độc lập, sau toán đƣợc giải cách đệ quy, cuối tổng hợp lời giải toán ta thu đƣợc lời giải toán đặt Điểm khác quy hoạch động với phƣơng pháp chia để trị tốn khơng độc lập với nhau, nghĩa tốn có chung tốn nhỏ Trong tình đó, phƣơng pháp chia để trị tỏ khơng hiệu quả, phải lặp lặp lại việc giải toán chung Quy hoạch động giải toán lần lời giải toán đƣợc ghi nhận, để tránh việc giải lại toán ta gọi lại lời giải Quy hoạch động thƣờng đƣợc áp dụng để giải toán tối ƣu Trong tốn tối ƣu, ta có tập lời giải, mà lời giải nhƣ đƣợc gán với giá trị số Ta cần tìm lời giải với giá trị số tối ƣu (nhỏ lớn nhất) Lời giải nhƣ ta gọi lời giải tối ƣu Vì lý tơi xin chọn đề tài “ÁP DỤNG KỸ THUẬT QUY HOẠCH ĐỘNG GIẢI CÁC BÀI TỐN TỐI ƢU” 2 Mục đích nghiên cứu Nghiên cứu, tổng hợp lý thuyết Quy hoạch động Phân tích tốn tối ƣu tổ hợp Áp dụng kỹ thuật Quy hoạch động giải toán tối ƣu Phƣơng pháp nghiên cứu Thu thập, phân tích tài liệu thơng tin liên quan đến quy hoạch động Lựa chọn số thuật toán quy hoạch động để giải vấn đề Trao đổi, thảo luận với giáo viên hƣớng dẫn để thực đề tài Đối tƣợng phạm vi nghiên cứu Đối tƣợng nghiên cứu: Kỹ thuật quy hoạch động toán ứng dụng Quy hoạch động Phạm vi nghiên cứu: Các tốn tối ƣu giải đƣợc kỹ thuật quy hoạch động Bố cục đề tài Ngoài phần lời cảm ơn, mục lục, bảng biểu tài liệu tham khảo đề tài gồm có chƣơng: Chƣơng 1: Kỹ thuật Quy hoạch động Chƣơng 2: Các toán tối ƣu tổ hợp Chƣơng 3: Cài đặt chƣơng trình CHƢƠNG KỸ THUẬT QUY HOẠCH ĐỘNG 1.1 TỔNG QUAN VÀ MỘT SỐ KHÁI NIỆM CHUNG Có tốn mà định bƣớc thứ i phụ thuộc vào định bƣớc trƣớc Nếu ta xác định đƣợc hệ thức diễn đạt mối tƣơng quan định bƣớc thứ i với định bƣớc trƣớc ta triển khai chƣơng trình theo hệ thức tìm đƣợc Khi việc giải tốn có kích thƣớc lớn đƣợc chuyển việc giải tốn kiểu có kích thƣớc nhỏ hơn.Các thuật tốn thƣờng đƣợc thể chƣơng trình đệ quy Tuy nhiên, với kỹ thuật chia để trị nhiều tốn phải tính lại nhiều lần Vậy ý tƣởng quy hoạch động là: Tránh tính tốn lại tốn nhiều lần, mà lƣu giữ kết tìm kiếm đƣợc vào bảng làm giá trị giả thiết cho việc tìm kết trƣờng hợp sau Chúng ta lấp đầy dần giá trị bảng kết trƣờng hợp trƣớc đƣợc giải Kết cuối kết toán cần giải Phƣơng pháp quy hoạch động nguyên lý tối ƣu đƣợc nhà toán học Mỹ R.Bellman đề xuất vào năm 50 kỷ 20 Phƣơng pháp đƣợc áp dụng để giải hàng loạt tốn thực tế q trình kỹ thuật công nghệ, tổ chức sản xuất, kế hoạch hoá kinh tế… Tuy nhiên cần lƣu ý có số tốn giải quy hoạch động tỏ khơng thích hợp Trong thực tế, ta thƣờng gặp số tốn tối ƣu loại sau: Có đại lƣợng g hình thành trình gồm nhiều giai đoạn ta quan tâm đến kết cuối giá trị g phải lớn nhỏ nhất, ta gọi chung giá trị tối ƣu g Giá trị g phụ thuộc vào đại lƣợng xuất toán mà giá trị chúng đƣợc gọi trạng thái hệ thống phụ thuộc vào cách thức đạt đƣợc giá trị g giai đoạn mà cách thức đƣợc gọi điều khiển Đại lƣợng g thƣờng đƣợc gọi hàm mục tiêu trình đạt đƣợc giá trị tối ƣu g đƣợc gọi trình điều khiển tối ƣu Bellman phát biểu nguyên lý tối ƣu (cũng gọi nguyên lý Bellman) mà ý tƣởng nhƣ sau: "Với trình điều khiển tối ƣu, trạng thái ban đầu A0, với trạng thái A q trình đó, phần q trình kể từ trạng thái A xem nhƣ trạng thái bắt đầu tối ƣu" Chú ý nguyên lý đƣợc thừa nhận mà không chứng minh Phƣơng pháp tìm điều khiển tối ƣu theo nguyên lý Bellman thƣờng đƣợc gọi quy hoạch động Thuật ngữ nói lên thực chất q trình điều khiển động:Có thể số bƣớc lựa chọn điều khiển tối ƣu dƣờng nhƣ không tốt nhƣng chung trình lại tốt Vậ ý tưởng quy hoạch động thật đơn giản: tránh tính tốn lại thứ hai lần, mà lƣu giữ kết tìm kiếm đƣợc vào bảng làm giá trị giả thiết cho việc tìm kết trƣờng hợp sau Chúng ta lấp đầy giá trị bảng kết trƣờng hợp trƣớc đƣợc giải Kết cuối kết tốn cần giải Nói cách khác kỹ thuật quy hoạch động thể sức mạnh nguyên lý chia để trị đến cao độ Ta giải thích ý qua tốn sau: Cho dãy số ngun A1,A2,….An Hãy tìm cách xóa số số hạng để dãy cịn lại dãy đơn điệu hay nói cách khác chọn số nhiều số cho dãy B gồm số hạng theo trình tự xuất dãy A đơn điệu Quá trình chọn dãy B đƣợc điều khiển qua i giai đoạn để đạt đƣợc mục tiêu số lƣợng số hạng dãy B nhiều nhất, điều khiển giai đoạn i thể việc chọn hay không chọn dãy Ai vào dãy B 56 writeln('Nhan Enter de tro ve chuong trinh chinh!'); readln; end; { BAI TOAN NHAN TO HOP MA TRAN -} procedure nhan_ma_tran; const max=100; var d:array[1 max+1] of integer; m:array[1 max,1 max] of longint; g:array[1 max,1 max] of integer; n:integer; f:text; procedure read_file; var i:integer; begin assign(f,inpm); reset(f); readln(f,n); gotoxy(7,7); writeln('Co ',n,' ma tran voi kich thuoc tuong ung'); for i:=1 to n+1 read(f,d[i]); for i:=1 to n begin gotoxy(10,8+i); writeln('Ma tran M',i,d[i]:7,'x',d[i+1]); end; close(f); 57 end; procedure optimize; var i,j,k:integer; x,p,q,r,s:integer; begin {Dien co so quy hoach dong vao bang phuong an} for i:=1 to n for j:=1 to n if i>=j then m[i,j]:=0 else m[i,j]:=high(integer); {giai cong thuc truy hoi} for s:=2 to n {thu voi cac dai doan tu toi n} for i:=1 to n-s+1 {Tinh cac m[i,j]+s-1} begin j:=i+s-1; for k:=i to j-1 {thu cac vi tri phan hoach k} begin p:=d[i]; q:=d[k+1]; r:=d[j+1]; x:=m[i,k]+m[k+1,j]+p*q*r; if x a[i] chi so jmax co L[jmax] lon nhat} jmax:= n+1; for j:=i+1 to n+1 if (a[j] > a[i]) and (L[j] > L[jmax]) then jmax:=j; {Luu dai day tang dai nhat bat dau tai a[i]} L[i]:=L[jmax] + 1; {Luu vet: phan tu dung lien sau a[i] day tang dai nhat la a[jmax]} T[i]:= jmax; end; end; procedure Result; var f: text; i: integer; begin Assign(f,outlss); Rewrite(f); writeln(f,L[0] - 2); {Chieu dai day tang dai nhat} i:=T[0]; {Bat dau truy vet tim nghiem} while i n+1 begin writeln(f,'a[',i,'] = ',a[i]); i:=T[i]; 61 end; close(f); end; BEGIN Enter; Optimeze; Result; End; { -BAI TOAN XAU CON CHUNG DAI NHAT } procedure xau_con_chung; var c:array[0 250,0 250] of byte; x,y,s:string; f:text; m,n,i,j:byte; function max(var a,b:byte):byte; begin if a>b then max:=a else max:=b; end; procedure read_file; begin assign(f,inpss); reset(f); readln(f,x); gotoxy(10,10); writeln('Xau thu : ',x); 62 readln(f,y); gotoxy(10,12); writeln('Xau thu : ',y); close(f); end; procedure process; var i,j:byte; f:text; begin assign(f,outss);rewrite(f); fillchar(c,sizeof(c),0); m:=length(x); n:=length(y); for i:=1 to m for j:=1 to n if x[i]=y[j] then c[i,j]:=1+c[i-1,j-1] else c[i,j]:=max(c[i,j-1],c[i-1,j]); s[0]:=chr(c[m,n]); i:=m; j:=n; repeat if x[i]=y[j] then begin insert(x[i],s,1); dec(i); 63 dec(j); end else begin if c[i,j]=c[i-1,j] then dec(i) else dec(j); end; until (i=0) or (j=0); gotoxy(10,14); writeln(f,'Xau chung dai nhat : ',s); gotoxy(10,16); writeln(f,'Do dai cua xau chung : ',c[m,n]); close(f); end; begin clrscr; gotoxy(20,7); writeln('*****BAI TOAN XAU CON CHUNG DAI NHAT*****'); read_file; process; gotoxy(15,20); writeln('Nhan Enter de tro ve chuong trinh chinh!'); readln; end; { BAI TOAN CON KIEN -} Procedure Ant; var 64 kq,m,n:integer; a,t:array[0 10000,0 10000]of integer; procedure read_file; var f:text; i,j:integer; begin assign(f,inpa);reset(f); readln(f,m,n); for i:=1 to m begin for j:=1 to n read(f,a[i,j]); readln(f); end; close(f); end; function max(x,y:integer):integer; begin if x>y then max:=x else max:=y; end; procedure xuli; var i,j:integer; begin for i:=1 to m for j:=1 to n t[i,j]:=0; 65 t[1,1]:=a[1,1]; for j:=1 to m t[1,j]:=a[1,j]; for i:=2 to n t[i,1]:=t[i-1,1]+a[i,1]; for i:=2 to n for j:=2 to m t[i,j]:=max(t[i-1,j],t[i,j-1])+a[i,j]; for j:=1 to m t[n,j]:=t[n-1,j]+a[n,j]; for j:=1 to m if kq