Lập trình động là gì. Ý tưởng về lập trình động. Hãy xem một ví dụ về i bước

Phần Lập trình động được biểu thị bằng các máy tính sau:

  1. Vấn đề phân bổ đầu tư. Để tái thiết và hiện đại hóa sản xuất tại bốn doanh nghiệp, được phân bổ tiền mặt C = 80 den. các đơn vị Đối với mỗi doanh nghiệp, khả năng tăng fi (x) (i = 1, 4) của sản lượng đều được biết trước, tùy thuộc vào số tiền được phân bổ.

Trong nhiệm vụ lập trình năng động quá trình kinh tế phụ thuộc vào thời gian (hoặc vào một số khoảng thời gian), do đó, một số giải pháp tối ưu được tìm ra (tuần tự cho từng giai đoạn) đảm bảo sự phát triển tối ưu của toàn bộ quá trình. Lập trình động là một công cụ toán học cho phép lập kế hoạch tối ưu các quy trình được kiểm soát và các quy trình phụ thuộc vào thời gian. Việc thực hiện tối ưu hóa từng bước được gọi là quy trình ra quyết định gồm nhiều bước. Một quá trình kinh tế được gọi là được kiểm soát nếu nó có thể tác động đến quá trình phát triển của nó.

Phương pháp quy hoạch động (DP) dựa trên nguyên lý tối ưu hóa tuần tự: giải vấn đề ban đầu tối ưu hóa nhiều chiều được thay thế bằng việc giải một chuỗi các vấn đề tối ưu hóa có chiều thấp. Điều kiện chính để áp dụng phương pháp DP là khả năng chia quá trình ra quyết định thành một số bước hoặc giai đoạn tương tự, mỗi bước được lên kế hoạch riêng biệt nhưng có tính đến kết quả thu được ở các bước khác. Ví dụ: hoạt động của một ngành trong một số năm kinh doanh hoặc chuỗi thử nghiệm được sử dụng trong việc kiểm soát thiết bị, v.v. Một số quy trình (hoạt động) được chia thành các bước một cách tự nhiên, nhưng có những hoạt động phải được chia thành các giai đoạn một cách giả tạo, chẳng hạn như quá trình dẫn đường cho tên lửa vào mục tiêu.
Nguyên tắc này đảm bảo rằng điều khiển được chọn ở bất kỳ bước nào không phải là điều khiển tốt nhất cục bộ mà là điều tốt nhất theo quan điểm của toàn bộ quá trình, vì điều khiển này được chọn có tính đến hậu quả trong các bước sắp tới.

Hãy xem xét mô tả chung vấn đề lập trình động.
Hãy chia quá trình ra quyết định gồm nhiều bước thành N các bước. Chúng ta hãy biểu thị bằng ε 0 trạng thái ban đầu của hệ thống, bằng ε 1, ε 2, … ε N– trạng thái của hệ thống sau lần thứ nhất, thứ hai, N-bước thứ. TRONG trường hợp chung tình trạng ε k– vectơ (ε k 1 , …, ε k s).
Sự quản lý trong một quy trình gồm nhiều bước, một tập hợp các giải pháp (các biến điều khiển) được gọi là bạn k = (bạn k 1 , ..., bạn biết đấy) được thực hiện ở mỗi bước k và chuyển hệ thống từ trạng thái ε k-1 = (ε k- 1 1 , …, ε k -1 S) để phát biểu ε k = (ε k 1 , …, ε k s).
Trong các quá trình kinh tế, quản lý bao gồm việc phân phối và tái phân phối vốn ở từng giai đoạn. Ví dụ, việc sản xuất sản phẩm của bất kỳ doanh nghiệp nào cũng là một quy trình được kiểm soát, vì nó được xác định bởi những thay đổi về thành phần thiết bị, khối lượng cung cấp nguyên liệu thô, lượng tài chính, v.v. trong năm, kỳ lập kế hoạch, việc cung cấp cho doanh nghiệp nguyên liệu thô, thay thế thiết bị, số tiền tài trợ, v.v. là quản lý. Có vẻ như để đạt được khối lượng đầu ra tối đa, cách dễ nhất là đầu tư số tiền tối đa có thể và sử dụng hết công suất thiết bị. Nhưng điều này sẽ dẫn đến sự hao mòn nhanh chóng của thiết bị và hậu quả là làm giảm sản lượng. Vì vậy, việc phát hành sản phẩm phải được lên kế hoạch sao cho tránh được những tác dụng không mong muốn. Cần phải thực hiện các biện pháp để đảm bảo rằng thiết bị được bổ sung khi nó bị hao mòn, tức là theo thời gian. Điều thứ hai, mặc dù dẫn đến giảm khối lượng đầu ra ban đầu, nhưng mang lại khả năng mở rộng sản xuất trong tương lai. Như vậy, quá trình sản xuất kinh tế có thể được coi là bao gồm nhiều giai đoạn (bước), mỗi giai đoạn đều ảnh hưởng đến sự phát triển của nó.
Bắt đầu giai đoạn (bước) quá trình kiểm soát thời điểm ra quyết định được xem xét (về số vốn đầu tư, thay thế thiết bị loại nhất định vân vân.). Một giai đoạn thường được hiểu là một năm kinh doanh.
Thường kiểm soát ở mọi bước bạn k một số hạn chế được áp dụng. Các điều khiển thỏa mãn những hạn chế này được gọi là chấp nhận được.
Giả sử rằng chỉ số hiệu suất k Bước thứ của quy trình phụ thuộc vào trạng thái ban đầu ở bước này k-1 và từ điều khiển ở bước này bạn k, chúng ta thu được hàm mục tiêu của toàn bộ quy trình gồm nhiều bước dưới dạng:
.

Bây giờ chúng ta xây dựng bài toán quy hoạch động: “Xác định tập hợp các biện pháp kiểm soát được chấp nhận ( bạn 1 , …, bạn n), chuyển hệ từ trạng thái ban đầu ε 0 sang trạng thái cuối cùng ε N và tối đa hóa hoặc giảm thiểu chỉ số hiệu quả F».
Kiểm soát đạt được mức tối đa (tối thiểu) của chức năng F gọi điện kiểm soát tối ưu bạn * = (bạn 1* ,…, bạn n *).
Nếu biến điều khiển bạn k lấy các giá trị rời rạc thì mô hình DP được gọi là rời rạc. Nếu các biến bạn k thay đổi liên tục thì mô hình DP được gọi là tiếp diễn.
Tùy thuộc vào số lượng tham số trạng thái S và số lượng biến kiểm soát r phân biệt một chiềuđa chiều Nhiệm vụ DP.
Số bước trong một tác vụ có thể là cuối cùng hoặc bất tận.

Các bài toán ứng dụng của quy hoạch động

  1. vấn đề quy hoạch xây dựng cơ sở vật chất.

Trong số các vấn đề được giải quyết bằng lập trình toán học, người ta có thể phân biệt một loại vấn đề riêng biệt yêu cầu tối ưu hóa các quy trình nhiều bước (nhiều giai đoạn). Những vấn đề như vậy được phân biệt bằng khả năng chia giải pháp thành nhiều giai đoạn liên kết với nhau. Để giải quyết những vấn đề như vậy, lập trình động hay còn được gọi là lập trình nhiều giai đoạn được sử dụng. Phương pháp của nó được tối ưu hóa cho tìm kiếm giải pháp tối ưu nhiệm vụ nhiều bước có thể được chia thành nhiều giai đoạn, bước, v.v.

Nguồn gốc của thuật ngữ

Việc sử dụng từ “động” trong tên ban đầu ngụ ý rằng việc phân chia thành các nhiệm vụ phụ sẽ diễn ra chủ yếu theo thời gian. Khi sử dụng các phương pháp động để giải quyết các vấn đề sản xuất, kinh tế và các vấn đề khác có xuất hiện yếu tố thời gian, việc chia nó thành các giai đoạn riêng biệt không khó. Nhưng cũng có thể sử dụng các kỹ thuật lập trình động trong các nhiệm vụ mà các giai đoạn riêng lẻ không liên quan về mặt thời gian. Trong bài toán có nhiều bước, bạn luôn có thể chọn một tham số hoặc thuộc tính có thể được sử dụng để chia nó thành các bước riêng biệt.

Thuật toán (phương pháp) giải bài toán nhiều giai đoạn

Thuật toán hay phương pháp quy hoạch động dựa trên nguyên lý tối ưu tuần tự của bài toán, khi lời giải nhiệm vụ chungđược chia thành nhiều giải pháp cho các nhiệm vụ con riêng lẻ rồi kết hợp thành một giải pháp duy nhất. Rất thường xuyên, các nhiệm vụ phụ riêng lẻ hóa ra giống nhau và một quyết định chung giảm đáng kể thời gian tính toán.

Một đặc điểm của phương pháp là tính tự chủ trong việc giải quyết vấn đề ở từng giai đoạn riêng lẻ, tức là, bất kể quy trình được tối ưu hóa và giải quyết ở giai đoạn trước như thế nào, trong phép tính hiện tại chỉ có các tham số quy trình đặc trưng cho nó trong khoảnh khắc này. Ví dụ, một người lái xe đang di chuyển trên đường sẽ đưa ra quyết định về lối rẽ hiện tại bất kể trước đó anh ta đã lái xe bao lâu và như thế nào.

Phương pháp từ trên và phương pháp từ dưới

Mặc dù thực tế là khi tính toán ở một giai đoạn riêng biệt để giải quyết vấn đề, các tham số của quy trình tại thời điểm hiện tại được sử dụng, kết quả tối ưu hóa ở giai đoạn trước sẽ ảnh hưởng đến việc tính toán của các giai đoạn tiếp theo cần đạt được. kết quả tốt nhất nói chung là. Lập trình động gọi nguyên tắc giải pháp này là phương pháp tối ưu, xác định rằng chiến lược tối ưu để giải quyết vấn đề, bất kể các quyết định và điều kiện ban đầu, phải được tuân theo các quyết định tiếp theo ở tất cả các giai đoạn để tạo ra chiến lược tối ưu so với trạng thái ban đầu. Như chúng ta có thể thấy, quá trình giải quyết vấn đề là sự tối ưu hóa liên tục kết quả ở từng giai đoạn riêng lẻ từ giai đoạn đầu đến giai đoạn cuối. Phương pháp này được gọi là phương pháp lập trình từ trên xuống. Hình vẽ sơ đồ thể hiện thuật toán giải từ trên xuống. Nhưng có một loại bài toán gồm nhiều bước trong đó hiệu quả tối đa TRÊN giai đoạn cuốiđã được biết, chẳng hạn như chúng tôi đã đi từ điểm A đến điểm B và bây giờ chúng tôi muốn tìm hiểu xem liệu chúng tôi đã lái xe đúng cách ở từng giai đoạn trước hay liệu điều gì đó có thể được thực hiện một cách tối ưu hơn. Một chuỗi các giai đoạn đệ quy xuất hiện, tức là chúng ta đi, như vốn có, “từ hướng ngược lại”. Phương pháp giải này được gọi là “phương pháp lập trình từ dưới lên”.

Công dụng thực tế

Lập trình động có thể được sử dụng trong bất kỳ lĩnh vực hoạt động nào có các quy trình có thể được chia thành một số giai đoạn nhỏ giống hệt nhau theo một số tham số (thời gian, số lượng, nhiệt độ, v.v.). Hầu hết các ứng dụng các giải pháp động đã thu được trong lý thuyết điều khiển và trong sự phát triển của hệ thống máy tính.

Tìm đường đi tối ưu

Sử dụng tối ưu hóa động, có thể giải quyết một loạt các vấn đề tìm kiếm hoặc tối ưu hóa đường đi ngắn nhất và các vấn đề khác trong đó phương pháp brute-force “cổ điển” những lựa chọn khả thi các giải pháp dẫn đến tăng thời gian tính toán và đôi khi hoàn toàn không thể chấp nhận được. Bài toán quy hoạch động cổ điển là bài toán về chiếc ba lô: cho một số lượng vật thể nhất định có khối lượng và giá thành nhất định, cần chọn một tập hợp vật thể có giá và khối lượng tối đa không vượt quá thể tích của chiếc ba lô. Việc tìm kiếm cổ điển tất cả các tùy chọn để tìm kiếm giải pháp tối ưu sẽ mất nhiều thời gian, nhưng với sự trợ giúp của các phương pháp động, vấn đề sẽ được giải quyết trong khung thời gian có thể chấp nhận được. Bài toán tìm ra con đường ngắn nhất cho logistics vận tải là vấn đề cơ bản và các phương pháp giải pháp động là phù hợp nhất để giải quyết chúng. Hầu hết ví dụ đơn giản Nhiệm vụ như vậy là xây dựng tuyến đường ngắn nhất bằng cách sử dụng thiết bị định vị GPS trên ô tô.

Sản xuất

Lập trình động được sử dụng rộng rãi để giải các bài toán khác nhau nhiệm vụ sản xuất chẳng hạn như quản lý hàng tồn kho để duy trì số lượng yêu cầu các thành phần bất cứ lúc nào, lập kế hoạch Quy trình sản xuất, sửa chữa thiết bị hiện tại và lớn, khối lượng công việc đồng đều của nhân sự, phân bổ vốn đầu tư hiệu quả nhất, v.v. Để giải quyết các vấn đề sản xuất bằng phương pháp lập trình động, đặc biệt gói phần mềm, tích hợp vào hệ thống phổ biến thống quản lý doanh nghiệp như SAP.

Lĩnh vực khoa học

Phương pháp quy hoạch động được sử dụng rộng rãi trong nhiều nghiên cứu khoa học khác nhau. Ví dụ, chúng được sử dụng thành công trong các thuật toán nhận dạng giọng nói và hình ảnh khi xử lý lượng lớn dữ liệu trong xã hội học và

Trong các mô hình nhiệm vụ quản lý được thảo luận ở trên, thời gian không được tính đến. Đây được gọi là mô hình một giai đoạn cho phép bạn phân tích các quy trình tĩnh, không phụ thuộc vào thời gian, ví dụ: khi những thay đổi trong quy trình đang nghiên cứu theo thời gian có thể bị bỏ qua. Quyết định quản lý về mô hình hóa như vậy có ý nghĩa trong điều kiện ổn định của hệ thống hoặc trong một thời gian ngắn trong tương lai.

Trên thực tế, mọi quá trình, hiện tượng kinh tế đều vận hành và phát triển theo thời gian, tức là chúng có bản chất năng động. Điều này đòi hỏi nhà quản lý phải quyết định vấn đề thực tế, trong đó cần tính đến những thay đổi có thể xảy ra trong các quá trình kinh tế theo thời gian, với điều kiện là quá trình đó có thể được kiểm soát, tức là quá trình phát triển của nó có thể bị ảnh hưởng.

Lập trình động là một công cụ toán học giúp giải quyết các vấn đề gồm nhiều bước kiểm soát tối ưu. Trong lập trình như vậy, để điều khiển quá trình, trong tập hợp tất cả các giải pháp khả thi, người ta tìm kiếm giải pháp tối ưu theo nghĩa của một tiêu chí nhất định, tức là giải pháp đưa ra các giá trị cực trị (ít nhiều) hàm mục tiêu- một số đặc tính số của quá trình. Đa cấp được hiểu là cấu trúc nhiều giai đoạn của một quy trình hoặc sự phân bổ quyền kiểm soát thành một số giai đoạn kế tiếp nhau, theo quy luật, tương ứng với các thời điểm khác nhau. Do đó, từ "lập trình" có nghĩa là đưa ra các quyết định quản lý và từ "động" biểu thị tầm quan trọng thiết yếu của thời gian và thứ tự hoạt động trong các quy trình và phương pháp được xem xét.

Các bài toán lập trình động bao gồm các bài toán lập kế hoạch, phân phối đầu tư, quản lý hàng tồn kho, hiện hành và xem xét lại, lựa chọn phương pháp quảng cáo và những thứ tương tự.

Trong một số bài toán quy hoạch động quy trình quản lý chia thành các giai đoạn một cách tự nhiên, ví dụ như một tháng, một quý, một năm. Trong những tình huống khác, việc phân chia thành các giai đoạn có thể có ký tự có điều kiện. Điểm đặc biệt của tất cả các vấn đề quy hoạch động là ở mỗi giai đoạn có thể tính đến những thay đổi trước đó, kiểm soát diễn biến của các sự kiện, đồng thời đánh giá chất lượng của việc kiểm soát đó. Vì vậy, lập trình động cho phép bạn đưa ra một số quyết định quản lý và đảm bảo sự phát triển tối ưu của toàn bộ hệ thống.

Hãy xem xét công thức tổng quát của bài toán lập trình này. Chúng ta hãy khảo sát một số quá trình kinh tế có n giai đoạn kế tiếp nhau. Ở mỗi giai đoạn thứ 7, quá trình có thể diễn ra tiểu bang khác nhau mỗi cái được đặc trưng bởi một tập hữu hạn các tham số. Mỗi giai đoạn của nhiệm vụ gắn liền với việc áp dụng một quyết định quản lý nhất định, quyết định này chuyển hệ thống từ trạng thái này sang trạng thái khác. Giả sử trạng thái si của hệ thống ở cuối giai đoạn 7 chỉ được xác định bởi trạng thái si_1 trước đó và điều khiển xi ở giai đoạn 7 và không phụ thuộc vào tiểu bang trước đó và các cơ quan quản lý. Khi đó trạng thái si của hệ được viết dưới dạng phụ thuộc

Si = f(in, _!, Xi), i = 1, P.

Hiệu quả của toàn bộ quá trình quản lý có thể được trình bày dưới dạng tổng hiệu quả của các quyết định quản lý ở từng giai đoạn riêng lẻ, nghĩa là

Trong các điều kiện trên, bài toán quy hoạch động được phát biểu như sau: để xác định trình tự chấp nhận được của các quyết định quản lý X = (x1, x2, xn), chuyển hệ thống từ trạng thái ban đầu 50 sang trạng thái cuối cùng sn và tại đạt được hiệu quả quản lý tối đa.

Khi lập kế hoạch cho một quy trình quản lý nhiều giai đoạn, trong các bài toán quy hoạch động, ở mỗi giai đoạn cần phải lựa chọn một quyết định quản lý, có tính đến các hậu quả của nó ở các giai đoạn sắp tới. Chỉ ở giai đoạn cuối mới có thể đưa ra quyết định quản lý mang lại hiệu quả tối đa, vì bước tiếp theo không tồn tại đối với anh ta. Vì vậy, các bài toán quy hoạch động được giải quyết từ đầu.

Cực đại của hàm mục tiêu tại chiều cuối cùng giai đoạn bằng

^ n-O = kiểm tra / n ^ n-i xn).

Theo đó, ở giai đoạn (n - 1) ta có

r * n-1 (5n-2) = ShaX ((fn-1 (sn-2, xn-1) + r * n ^ n-1)).

Có tính đến tính đều đặn này, đối với giai đoạn k tùy ý, chúng ta có thể viết sự phụ thuộc hồi quy

g * (thứ năm-1) = Shahi (L (ik-1, xk) + g * + 1)).

Sự phụ thuộc lặp lại này là sự biểu diễn toán học của nguyên lý tối ưu Bellman.

Sau khi xác định được hiệu quả tối ưu có điều kiện ở giai đoạn ban đầu bằng cách sử dụng các phụ thuộc lặp lại, họ tiến hành tối ưu hóa quản lý vô điều kiện theo hướng “đảo ngược”, nhờ đó tìm ra một chuỗi các quyết định quản lý, đảm bảo hiệu quả tối đa các hệ thống nói chung.

Đặc điểm chính của phương pháp quy hoạch động

1. Ý tưởng và phương pháp quy hoạch động phù hợp hơn với các bài toán rời rạc, trong hầu hết các trường hợp là bài toán điều khiển.

2. Phương pháp quy hoạch động có thể được sử dụng với bất kỳ phương pháp xác định hàm mục tiêu nào và với bất kỳ tập hợp trạng thái và điều khiển nào được chấp nhận. Các phương pháp tối ưu hóa cổ điển và các phương pháp khác thiếu lợi thế này. phương pháp tính toán lập trình toán học.

3. Sơ đồ tính toán của phương pháp quy hoạch động trong trường hợp rời rạc gắn vách ngăn giá trị tối ưu chỉ số hiệu suất và quản lý trên bước thứ k cho tất cả các giá trị có thể có của biến trạng thái, nhưng khối lượng tính toán ít hơn đáng kể so với việc lựa chọn trực tiếp các tùy chọn. Điều này là do ở giai đoạn tối ưu hóa có điều kiện những lựa chọn tồi ngay lập tức bị loại bỏ và chỉ những gì tối ưu có điều kiện ở giai đoạn này mới được giữ lại.

4. Phương pháp quy hoạch động cho phép phân tích độ nhạy đối với những thay đổi trong dữ liệu ban đầu của các trạng thái sk và số n của chúng. Trên thực tế, ở mỗi bước không giải quyết được một vấn đề mà có nhiều vấn đề tương tự đối với các trạng thái khác nhau sk và khác nhau k (1<к <п) . Поэтому с изменением исходных данных нельзя не решать задачу заново, а сделать только несложные добавление к уже выполненных расчетов, то есть продолжить уже решенную задачу за счет увеличения количества шагов п или количества значений sk.

kết luận

1. Sự xuất hiện của các mô hình phi tuyến gắn liền với nhu cầu tính đến và chứng minh các mô hình phi tuyến ảnh hưởng đến việc ra quyết định tối ưu. Những mẫu như vậy được bao gồm trong các ràng buộc của bài toán và hàm mục tiêu.

2. Theo tính chất của các hàm và các ràng buộc mô tả các bài toán quy hoạch phi tuyến, chúng có thể được phân loại như sau: các bài toán tối ưu hóa cổ điển; các vấn đề với hàm mục tiêu phi tuyến và các ràng buộc tuyến tính; các bài toán quy hoạch lồi, bậc hai, tách được.

3. Không giống như các bài toán quy hoạch tuyến tính, không có một phương pháp chung nào để giải các bài toán phi tuyến. Trong từng trường hợp cụ thể cần phải lựa chọn phương pháp tốt nhất.

4. Lập trình động là một công cụ toán học giúp giải quyết các bài toán điều khiển tối ưu gồm nhiều bước. Đa cấp được hiểu là cấu trúc nhiều giai đoạn của một quy trình hoặc sự phân bổ quyền kiểm soát thành một số giai đoạn kế tiếp nhau, theo quy luật, tương ứng với các thời điểm khác nhau.

5. Nhiệm vụ lập trình động bao gồm các nhiệm vụ lập kế hoạch, phân bổ đầu tư, quản lý hàng tồn kho, sửa chữa hiện tại và lớn, lựa chọn phương pháp quảng cáo, v.v. Điểm đặc biệt của tất cả các vấn đề quy hoạch động là ở mỗi giai đoạn có thể tính đến những thay đổi trước đó và kiểm soát diễn biến của các sự kiện, đồng thời đánh giá chất lượng của việc kiểm soát đó.

6. Giải bài toán quy hoạch động dựa trên nguyên lý tối ưu Bellman. Trong quy trình tối ưu hóa điều khiển lập trình động, quy trình gồm nhiều bước được thực hiện hai lần. Lần đầu tiên là từ đầu đến cuối, nhờ đó tìm được các điều khiển tối ưu có điều kiện. Thứ hai là từ đầu đến cuối, nhờ đó tìm được sự kiểm soát tối ưu cho toàn bộ quá trình.

Để chọn giải pháp tối ưu khi thực hiện các tác vụ lập trình, đôi khi cần phải sắp xếp một số lượng lớn các tổ hợp dữ liệu tải bộ nhớ của máy tính cá nhân. Các phương pháp như vậy bao gồm phương pháp lập trình “chia để trị”. Trong trường hợp này, thuật toán cung cấp khả năng chia nhiệm vụ thành các nhiệm vụ nhỏ riêng biệt. Phương pháp này chỉ được sử dụng trong trường hợp các nhiệm vụ nhỏ độc lập với nhau. Để tránh thực hiện những công việc không cần thiết nếu các nhiệm vụ phụ phụ thuộc lẫn nhau, phương pháp lập trình động do R. Bellman người Mỹ đề xuất vào những năm 50 đã được sử dụng.

Bản chất của phương pháp

Lập trình động liên quan đến việc xác định lời giải tối ưu cho một bài toán n chiều bằng cách chia nó thành n bước riêng biệt. Mỗi trong số chúng là một nhiệm vụ con đối với một biến.

Ưu điểm chính của phương pháp này là các nhà phát triển giải quyết các vấn đề tối ưu hóa một chiều của các nhiệm vụ phụ thay vì vấn đề n chiều và giải pháp cho vấn đề chính được tập hợp “từ dưới lên”.

Nên sử dụng lập trình động trong trường hợp các nhiệm vụ con có liên quan với nhau, tức là. có các mô-đun chung. Thuật toán cung cấp khả năng giải từng nhiệm vụ một lần và các câu trả lời được lưu trữ trong một bảng đặc biệt. Điều này giúp bạn không thể tính lại đáp án khi gặp một nhiệm vụ con tương tự.

Bài toán tối ưu hóa quy hoạch động. Tác giả của phương pháp này, R. Bellman, đã xây dựng nguyên tắc tối ưu: bất kể trạng thái ban đầu ở mỗi bước và giải pháp được xác định ở bước này, tất cả các bước tiếp theo đều được chọn tối ưu liên quan đến trạng thái mà hệ thống thực hiện ở bước đó. cuối bước.

Phương pháp này sẽ cải thiện việc thực hiện các vấn đề được giải quyết bằng cách liệt kê các tùy chọn hoặc đệ quy.

Xây dựng thuật toán bài toán

Lập trình động liên quan đến việc xây dựng một thuật toán bài toán trong đó bài toán được chia thành hai hoặc nhiều nhiệm vụ con sao cho giải pháp của nó bao gồm giải pháp tối ưu của tất cả các nhiệm vụ con có trong đó. Tiếp theo, cần phải viết mối quan hệ truy hồi và tính toán giá trị tham số tối ưu cho toàn bộ bài toán.

Đôi khi ở bước thứ 3 bạn cần ghi nhớ thêm một số thông tin phụ trợ về tiến độ thực hiện từng nhiệm vụ con. Điều này được gọi là đảo ngược.

Ứng dụng của phương pháp

Lập trình động được sử dụng khi có hai tính năng đặc trưng:

  • sự tối ưu cho các nhiệm vụ phụ;
  • sự hiện diện của các nhiệm vụ phụ chồng chéo trong một nhiệm vụ.

Khi giải bằng quy hoạch động, trước tiên bạn cần mô tả cấu trúc của lời giải. Một bài toán được coi là tối ưu nếu lời giải của bài toán đó bao gồm các lời giải tối ưu cho các bài toán con của nó. Trong trường hợp này, nên sử dụng lập trình động.

Thuộc tính thứ hai của bài toán, rất cần thiết cho phương pháp này, là số lượng nhiệm vụ con nhỏ. Giải pháp đệ quy cho một bài toán sử dụng các bài toán con chồng chéo giống nhau, số lượng bài toán con chồng chéo phụ thuộc vào kích thước của thông tin đầu vào. Câu trả lời được lưu trữ trong một bảng đặc biệt, chương trình sẽ tiết kiệm thời gian bằng cách sử dụng dữ liệu này.

Việc sử dụng quy hoạch động đặc biệt hiệu quả khi các quyết định về bản chất của vấn đề cần được thực hiện từng bước. Ví dụ, hãy xem xét một ví dụ đơn giản về vấn đề thay thế và sửa chữa thiết bị. Giả sử máy đúc của một xưởng đúc lốp xe sản xuất ra lốp xe có hai hình dạng khác nhau cùng một lúc. Nếu một trong các khuôn bị hỏng, máy phải được tháo rời. Rõ ràng là đôi khi thay khuôn thứ hai để không phải tháo rời máy sẽ có lợi hơn trong trường hợp khuôn này cũng không hoạt động ở giai đoạn tiếp theo. Hơn nữa, việc thay thế cả hai hình thức làm việc có thể dễ dàng hơn trước khi chúng bắt đầu hỏng hóc. Phương pháp lập trình động xác định chiến lược tốt nhất để thay thế các khuôn đó, có tính đến tất cả các yếu tố: lợi ích của việc tiếp tục vận hành khuôn, tổn thất do thời gian ngừng hoạt động của máy, chi phí của lốp bị loại, v.v.