6

Tôi đang đặt câu hỏi này bởi vì tôi biết có rất nhiều loại CS được đọc tốt ở đây, những người có thể đưa ra câu trả lời rõ ràng.Hoàn thành mã thông minh? Có AI để viết mã bằng cách học không?

Tôi tự hỏi nếu như một AI tồn tại (hoặc đang được nghiên cứu/phát triển) mà nó viết chương trình bằng cách tạo và biên dịch mã tất cả trên riêng của nó và sau đó tiến triển bằng cách học từ các lần lặp trước. Tôi đang nói về làm việc để làm cho chúng ta, những người lập trình, lỗi thời. Tôi đang tưởng tượng một cái gì đó mà học những gì làm việc và những gì không có trong một ngôn ngữ lập trình bằng thử và sai.

Tôi biết điều này nghe có vẻ giống như trên bầu trời vì vậy tôi yêu cầu tìm hiểu điều gì đã được thực hiện, nếu có.

Tất nhiên, ngay cả một lập trình viên con người cũng cần đầu vào và thông số kỹ thuật, vì vậy một thử nghiệm phải có các thông số được xác định cẩn thận. Giống như nếu AI sẽ khám phá các hàm thời gian khác nhau, thì khía cạnh đó phải được xác định rõ ràng.

Nhưng với một học tập tinh vi AI tôi muốn được tò mò để xem những gì nó có thể tạo ra.

Tôi biết có rất nhiều máy tính chất lượng của con người không thể tái tạo như phán đoán, thị hiếu và thành kiến ​​của chúng tôi. Nhưng trí tưởng tượng của tôi thích ý tưởng của một chương trình phun ra một trang web sau một ngày suy nghĩ và cho phép tôi xem những gì nó đã đưa ra, và thậm chí tôi vẫn thường mong đợi nó là rác; nhưng có lẽ một lần một ngày tôi có thể cung cấp cho nó thông tin phản hồi và giúp nó tìm hiểu.

Một con đường tư tưởng này là nó sẽ được tốt đẹp để đưa ra một mô tả mức cao như "trang web menued" hoặc "công cụ hình ảnh" và nó tạo ra mã với đủ độ sâu đó sẽ là hữu ích như là một module hoàn thành mã cho tôi sau đó mã trong các chi tiết. Nhưng tôi cho rằng điều đó có thể được hình dung như một sơ đồ hoàn thành mã phân cấp tĩnh không thông minh.

Làm thế nào về nó?

+0

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

+0

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

Trả lời

12

Công cụ như vậy tồn tại. Chúng là chủ đề của một ngành được gọi là Genetic Programming. Cách bạn đánh giá sự thành công của họ phụ thuộc vào phạm vi ứng dụng của họ.

Chúng cực kỳ thành công (các đơn đặt hàng hiệu quả hơn con người) để thiết kế các chương trình tối ưu cho việc quản lý quy trình công nghiệp, chẩn đoán y học tự động hoặc thiết kế mạch tích hợp. Các quy trình đó cũng bị hạn chế, với một thước đo thành công rõ ràng và không thay đổi, và một lượng lớn kiến ​​thức vũ trụ, đó là một tập hợp lớn các quy tắc về một chương trình hợp lệ, làm việc, và những gì không.

Họ hoàn toàn vô dụng khi cố gắng xây dựng các chương trình chính thống, yêu cầu tương tác người dùng, vì mục chính mà hệ thống tìm hiểu nhu cầu là "fitness function" rõ ràng hoặc đánh giá chất lượng của giải pháp hiện tại với.

Một tên miền khác có thể được nhìn thấy trong giao dịch với "học chương trình" là Inductive Logic Programming, mặc dù nó được sử dụng nhiều hơn để cung cấp trình diễn tự động hoặc học ngôn ngữ/phân loại.

7

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ạpsuy.

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 solvingdeductive composition of subroutine libraries.

Theo tôi quy nạpsuy 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 EngineeringRequirements 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.

Các vấn đề liên quan