CHUYEN DE 2 THUAT TOAN DUYET p2

18 116 0
CHUYEN DE 2 THUAT TOAN DUYET p2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Các PP thiết kế thuật toán Trường THPT Chuyên Trà Vinh Một toán đặt thực tế việc tìm nghiệm thoả mãn số điều kiện đó, nghiệm tốt theo tiêu cụ thể, nghiên cứu lời giải lớp toán tối ưu thuộc lĩnh vực quy hoạch toán học Tuy nhiên cần phải nói nhiều trường hợp chưa thể xây dựng thuật toán thực hữu hiệu để giải tốn, mà việc tìm nghiệm chúng phải dựa mơ hình liệt kê tồn cấu hình đánh giá, tìm cấu hình tốt Việc liệt kê cấu hình cài đặt phương pháp liệt kê: Sinh tìm kiếm quay lui Dưới ta tìm hiểu phương pháp liệt kê thuật tốn quay lui để tìm nghiệm toán tối ưu Phương pháp nhánh cận dạng cải tiến phương pháp quay lui, áp dụng để tìm nghiệm tốn tối ưu Bài tốn tối ưu tổng quát phát biểu sau: Cho tập D khác rỗng hàm f : DR gọi hàm mục tiêu Cần tìm phần tử x thuộc D cho f(x) đạt giá trị nhỏ lớn Phần tử x nghiệm tốn cịn gọi phương án tối ưu Bài tốn tối ưu tổ hợp tốn tìm phương án tối ưu tập cấu hình tổ hợp Nghiệm toán vector x gồm n thành phần cho: x = (x1,x2,…xn) xi lấy giá trị tập Si x thoả mãn ràng buộc cho hàm F(x) F(x)  min/max Khi x gọi phương án tối ưu, f(x) giá trị tối ưu Thuật tốn nhánh cận mơ tả mơ hình đệ qui sau: procedure try(i); {xây dựng thành phần thứ i} begin ; end; {Thủ tục thử chọn cho xi tất giá trị nhận} procedure Try(i: Integer); begin for (Mọi giá trị V gán cho xi) begin ; if then if then else begin ; Try(i + 1); {Gọi đệ quy, chọn tiếp xi+1 } ; end; end; end; begin end Init; Try(1); ; Kỹ thuật nhánh cận thêm vào cho thuật toán quay lui khả đánh giá theo bước, bước thứ i, giá trị thử gán cho xi khơng có hi vọng tìm thấy cấu hình tốt cấu hình BESTCONFIG thử giá trị Trang Các PP thiết kế thuật toán Trường THPT Chuyên Trà Vinh khác mà không cần phải gọi đệ quy tìm tiếp hay ghi nhận kết làm Nghiệm tốn làm tốt dần, tìm cấu hình (tốt BESTCONFIG - tất nhiên), ta không in kết mà cập nhật BESTCONFIG cấu hình vừa tìm IV BÀI TỐN NGƯỜI DU LỊCH Bài toán Cho n thành phố đánh số từ đến n m tuyến đường giao thông hai chiều chúng, mạng lưới giao thông cho bảng C cấp nxn, C ij = Cji = Chi phí đoạn đường trực tiếp từ thành phố i đến thành phố j Giả thiết C ii = với i, Cij = + đường trực tiếp từ thành phố i đến thành phố j Các số m, n chi phí đoạn đường trực tiếp nhập từ bàn phím (hoặc từ file) Một người du lịch xuất phát từ thành phố 1, muốn thăm tất thành phố lại thành phố lần cuối quay lại thành phố Hãy cho người hành trình với chi phí Bài tốn gọi tốn người du lịch hay tốn hành trình thương gia (Travelling Salesman) Cách giải 1) Hành trình cần tìm có dạng (x1 = 1, x2, , xn, xn+1 = 1) xi xi+1: hai thành phố liên tiếp hành trình phải có đường trực tiếp (C ij  +) ngoại trừ thành phố 1, khơng thành phố lặp lại hai lần Có nghĩa dãy (x1, x2, , xn) lập thành hoán vị (1, 2, , n) 2) Duyệt quay lui: x2 chọn thành phố mà x1 có đường tới (trực tiếp), với cách thử chọn x2 x3 chọn thành phố mà x có đường tới (ngồi x1) Tổng qt: xi chọn thành phố chưa qua mà từ xi-1 có đường trực tiếp tới.(1  i  n) 3) Nhánh cận: Khởi tạo cấu hình BestConfig có chi phí = + Với bước thử chọn x i xem chi phí đường lúc có < Chi phí cấu hình BestConfig?, khơng nhỏ thử giá trị khác có tiếp tốn thêm Khi thử giá trị x n ta kiểm tra xem xn có đường trực tiếp khơng ? Nếu có đánh giá chi phí từ thành phố đến thành phố x n cộng với chi phí từ x n trực tiếp 1, nhỏ chi phí đường BestConfig cập nhật lại BestConfig cách 4) Sau thủ tục tìm kiếm quay lui mà chi phí BestConfig + có nghĩa khơng tìm thấy hành trình thoả mãn điều kiện đề để cập nhật BestConfig, tốn khơng có lời giải, cịn chi phí BestConfig < + in cấu hình BestConfig - hành trình tốn tìm PROG4_1.PAS * Kỹ thuật nhánh cận dùng cho toán người du lịch program TravellingSalesman; const max = 20; var C: array[1 max, max] of Integer; X, BestWay: array[1 max + 1] of Integer; T: array[1 max + 1] of Integer; Free: array[1 max] of Boolean; {Ma trận chi phí} {X để thử khả năng, BestWay để ghi nhận nghiệm} {Ti để lưu chi phí từ X1 đến Xi} {Free để đánh dấu, Freei= True chưa qua i} m, n: Integer; Trang Các PP thiết kế thuật toán Trường THPT Chuyên Trà Vinh MinSpending: Integer; {Độ dài hành trình ngắn nhất} procedure Enter; {Nhập liệu} var i, j, k: Integer; begin Write('So pho: '); Readln(n); Write('So tuyen duong: '); Readln(m); for i := to n {Khởi tạo bảng độ dài ban đầu} for j := to n if i = j then C[i, j] := else C[i, j] := 10000; {+ = 10000} for k := to m begin Write('Cho hai va chi phi '); Readln(i, j, C[i, j]); C[j, i] := C[i, j]; {Đường chiều} end; end; procedure Init; {Khởi tạo} begin FillChar(Free, n, True); Free[1] := False; X[1] := 1; T[1] := 0; MinSpending := 10000; end; {Các thành phố chưa qua ngoại trừ thành phố 1} {Xuất phát từ thành phố 1} {Chi phí thành phố xuất phát 0} {+ = 10000 } procedure Try(i: Integer); {Thử cách chọn xi} var j: Integer; begin for j := to n {Thử thành phố từ đến n} if Free[j] then {Nếu gặp thành phố chưa qua} begin X[i] := j; {Thử đi} T[i] := T[i - 1] + C[x[i - 1], j]; {Chi phí := Chi phí bước trước + độ dài đường trực tiếp} if T[i] < MinSpending then {Hiển nhiên có điều C[x[i - 1], j] < + rồi} if i < n then {Nếu chưa đến xn} begin Free[j] := False; {Đánh dấu thành phố vừa thử} Try(i + 1); {Tìm khả chọn xi+1} Free[j] := True; {Bỏ đánh dấu} end else if T[n] + C[x[n], 1] < MinSpending then {Từ xn quay lại tốn chi phí trước} begin {Cập nhật BestConfig} BestWay := X; MinSpending := T[n] + C[x[n], 1]; end; end; end; procedure PrintResult; {In cấu hình BestConfig} var i: Integer; begin if MinSpending = 10000 then Writeln('Khong co cach di') Trang Các PP thiết kế thuật toán Trường THPT Chuyên Trà Vinh else for i := to n Write(BestWay[i], '->'); Writeln(1); Writeln('Chi phi: ', MinSpending); end; begin Enter; Init; Try(2); PrintResult; end Trên giải pháp nhánh cận cịn thơ sơ giải toán người du lịch, thực tế người ta cịn có nhiều cách đánh giá nhánh cận chặt Hãy tham khảo tài liệu khác để tìm hiểu phương pháp III Kỹ thuật nhánh cận: PHƯƠNG PHÁP DUYỆT GIẢI BÀI TOÁN TỐI ƯU: Tư tưởng chủ đạo: Lần lượt duyệt cấu hình tốn Đối với cấu hình thỏa mãn điều kiện toán (mỗi phương án toán) ta tính giá phương án So sánh giá tất phương án với để tìm phương án tối ưu giá trị tối ưu Trong q trình duyệt ta ln giữ lại phương án tốt Phương án tốt thời điểm duyệt gọi phương án mẫu Giá trị phương án mẫu gọi kỷ lục tạm thời Khi duyệt xong tất phương án tìm phương án tối ưu giá trị tối ưu Tuy nhiên, thực tế với tốn có kích thước lớn (số phương án nhiều) thời gian duyệt lâu Do đó, q trình duyệt ta nên hạn chế bớt phép duyệt (không duyệt phương án mà ta biết chắn phương án khơng thể phương án tối ưu tốn) Có cách duyệt: Duyệt tồn (vét cạn) Duyệt hạn chế (phương pháp duyệt có đánh giá nhánh cận) Mơ hình duyệt có cấu trúc sau : Procedure Khởitạo; Khởi tạo giá trị ban đầu cho biến; Procedure cập nhật kỷ lục; Begin -Tính giá phương án chưa tính -If giá P/A>kỷ lục then Begin Kỷ lục:=giá P/A; Giữ lại P/A; End; Procedure thử(i); Begin ; Trang Các PP thiết kế thuật toán Trường THPT Chuyên Trà Vinh If then exit; ; For xi Si begin If tìm thấy nghiệm then cập nhật kỷ lục Else Thử(i+1); ; End End; BÀI TẬP Chúng ta phân tích số tốn tối ưu tổ hợp điển hình Phần lớn tốn NPC a) Bài tốn xếp balơ Có balơ có tải trọng m n đồ vật, đồ vật i có trọng lượng wi có giá trị vi Hãy lựa chọn vật vào balô cho tổng trọng lượng chúng không M tổng giá trị chúng lớn Mỗi cách chọn đồ vật cho vào balô tương ứng với vector x gồm n thành phần mà xi=1 chọn đưa vật thứ i vào balô, xi=0 vật thứ i khơng chọn Khi ràng buộc tổng trọng lượng đồ vật không tải trọng balô viết thành: n x w i i 1 i m Hàm mục tiêu tổng giá trị đồ vật chọn: n f ( x )  x i v i  max i 1 Nghiệm toán vector x gồm n thành phần cho: x = (x1,x2,…xn) xi lấy giá trị tập {0,1} Ràng buộc: n x w i 1 i i m n f ( x )  x i v i  max i 1 Trang Các PP thiết kế thuật toán Trường THPT Chuyên Trà Vinh b) Bài toán người du lịch Có n thành phố, d[i,j] chi phí để di chuyển từ thành phố i đến thành phố j (Nếu khơng có đường d[i,j] = ) Một người muốn du lịch qua tất thành phố, thành phố lần trở nơi xuất phát cho tổng chi phí nhỏ Hãy xác định đường Phương án tối ưu toán vector x, xi thành phố đến thăm lần di chuyển thứ i Các điều kiện x sau: x = (x1,x2,…xn) xi lấy giá trị tập {1,2,…n} Ràng buộc: xi  xj với ij d[xi,xi+1]

Ngày đăng: 13/01/2019, 10:33

Từ khóa liên quan

Mục lục

  • IV. BÀI TOÁN NGƯỜI DU LỊCH

    • 1. Bài toán

    • 2. Cách giải

    • III. Kỹ thuật nhánh cận:

      • a) Bài toán xếp balô

      • b) Bài toán người du lịch

      • 8.2.3. Phương pháp vét cạn giải các bài toán cấu hình tổ hợp và tối ưu tổ hợp

        • a) Sinh các tổ hợp chập k của n

        • b) Sinh các chỉnh hợp lặp chập k của n

        • c) Sinh các chỉnh hợp không lặp chập k của n

        • d) Bài toán xếp hậu

        • e) Bài toán từ đẹp

        • f) Bài toán người du lịch.

        • 8.2.4. Kỹ thuật nhánh cận

Tài liệu cùng người dùng

Tài liệu liên quan