Disclaimer: Tôi không phải là người nói tiếng Anh bản địa hay một chuyên gia trong lĩnh vực này, tôi là một amateur - mong đợi sự không chính xác và/hoặc sai sót trong những gì theo. Vì vậy, theo tinh thần của stackoverflow, đừng ngại sửa chữa và cải thiện văn xuôi của tôi và/hoặc nội dung của tôi. Cũng lưu ý rằng đây là không phải một cuộc khảo sát hoàn chỉnh về kỹ thuật automatic programming (code generation (CG) từ Model-Driven Architectures (MDAs) đáng giá ít nhất là đề cập đến).
Tôi muốn thêm nhiều hơn vào những gì Varkhan trả lời (về cơ bản là chính xác).
Các Genetic Programming (GP) cách tiếp cận để Automatic Programming conflates, với fitness functions, hai vấn đề khác nhau của nó ("tự biên soạn" là khái niệm không có trí tuệ):
- tự hoàn thiện/thích ứng - các tổng hợp chương trình và, nếu muốn, của chính bộ tổng hợp; và
- program synthesis.
w.r.t. tự cải thiện/thích ứng tham khảo các bộ giải quyết vấn đề phổ quát tự giới thiệu của Jürgen Schmidhuber's Goedel machines: tự thực hiện tối ưu hóa một cách tối ưu. (Một lưu ý phụ: thú vị là tác phẩm của anh ta trên artificial curiosity.) Cũng có liên quan cho cuộc thảo luận này là Autonomic Systems.
w.r.t. program synthesis, tôi nghĩ rằng có thể phân loại 3 nhánh chính: stochastic (xác suất - như đã nói ở trên GP), quy nạp và suy.
GP là về cơ bản stochastic vì nó tạo ra không gian của chương trình có khả năng với công nghệ tự động như chéo, đột biến ngẫu nhiên, trùng lặp gen, xóa gen, vv ... (hơn nó kiểm tra các chương trình với fitness function và để cho các fittest tồn tại và sinh sản).
Tổng hợp chương trình quy nạp thường được gọi là Inductive Programming (IP), trong đó Inductive Logic Programming (ILP) là trường con. Tức là, nói chung kỹ thuật không giới hạn trong tổng hợp logic program hoặc tổng hợp được viết bằng ngôn ngữ lập trình logic (hoặc cả hai được giới hạn ở ".. tự động trình diễn hoặc ngôn ngữ/phân loại học").
IP thường là xác định (nhưng có những trường hợp ngoại lệ): bắt đầu từ một không đầy đủ đặc điểm kỹ thuật (chẳng hạn như cặp dụ input/output) và sử dụng để hạn chế không gian tìm kiếm các chương trình có khả năng đáp ứng đặc điểm kỹ thuật như vậy và sau đó đến kiểm tra nó (phương pháp tạo và thử nghiệm) hoặc tổng hợp trực tiếp một chương trình phát hiện sự lặp lại trong các ví dụ đã cho, sau đó được tổng quát hóa (hướng dẫn hoặc phân tích phân tích). Toàn bộ quá trình về cơ bản là statistical induction/inference - tức là xem xét những gì cần đưa vào đặc điểm kỹ thuật không hoàn chỉnh giống như lấy mẫu ngẫu nhiên.
Generate-and-test and data-driven/analytical cách tiếp cận § có thể khá nhanh, vì vậy cả hai đều hứa hẹn (ngay cả khi chỉ các chương trình nhỏ tổng hợp được thể hiện ở nơi công cộng cho đến bây giờ), nhưng generate-và-kiểm tra (như GP) là embarrassingly parallel và sau đó cải tiến đáng chú ý (mở rộng quy mô thực tế) có thể được mong đợi.Nhưng lưu ý rằng Incremental Inductive Programming (IIP) §, vốn đã được tuần tự, đã chứng minh là các đơn đặt hàng có cường độ hiệu quả hơn trong các phương pháp không tăng dần.
§ Các liên kết này trực tiếp đến tệp PDF: xin lỗi, tôi không thể tìm thấy bản tóm tắt.
Programming by Demonstration (PBD) và Programming by Example (PBE) là end-user development kỹ thuật nổi tiếng để tận dụng chương trình quy nạp tổng hợp thực tế.
Deductive program synthesis bắt đầu với một (chính thức) đặc điểm kỹ thuật (điều kiện logic) đầy đủ (coi) để thay thế. Một trong những kỹ thuật tận dụng automated theorem provers: để tổng hợp một chương trình, nó xây dựng một bằng chứng về sự tồn tại của một đối tượng đáp ứng đặc điểm kỹ thuật; do đó, thông qua Curry-Howard-de Bruijn isomorphism (chứng minh-as-chương trình tương ứng và công thức-as-loại tương ứng), nó trích xuất một chương trình từ bằng chứng. Các biến thể khác bao gồm việc sử dụng constraint solving và deductive composition of subroutine libraries.
Theo tôi quy nạp và suy tổng hợp trong thực tế đang tấn công cùng một vấn đề bởi hai góc độ hơi khác nhau, bởi vì những gì cấu thành một hoàn đặc điểm kỹ thuật là gây tranh cãi (bên cạnh đó, một đặc điểm kỹ thuật hoàn chỉnh ngày nay có thể trở thành không đầy đủ ngày mai - thế giới không tĩnh).
Khi (nếu) những kỹ thuật này (tự hoàn thiện/thích ứng và tổng hợp chương trình) sẽ trưởng thành, họ hứa sẽ tăng lượng tự động hóa được cung cấp bởi declarative programming (đó thiết lập như vậy là để được coi là "lập trình" là sometimes debated) : chúng tôi sẽ tập trung nhiều hơn vào Domain Engineering và Requirements Analysis and Engineering so với thiết kế và phát triển phần mềm thủ công, gỡ lỗi thủ công, điều chỉnh hiệu suất hệ thống thủ công và vv (có thể với ít hơn accidental complexity so với hướng dẫn hiện tại, không tự cải thiện/kỹ thuật thích ứng). Điều này cũng sẽ thúc đẩy mức độ agility chưa được chứng minh bằng các kỹ thuật hiện tại.
Tôi thường tự hỏi về điều này. Rõ ràng điều này đã được thử trong nhiều thập kỷ với kết quả tầm thường, theo AI: Một phương pháp tiếp cận hiện đại. – AaronLS
Tôi có cuốn sách đó, không đọc nó. Tôi nghe nó là tiêu chuẩn. Không bao giờ lấy AI ở trường đại học và luôn muốn đọc về lý thuyết, chủ yếu là vì vậy tôi có thể viết các trò chơi hay hơn. – tkotitan