2014-08-27 22 views
5

NetLogo rất tuyệt vời cho mô hình dựa trên đại lý ... ngoại trừ ngôn ngữ. Tôi luôn thấy mình đang mâu thuẫn với bộ não của mình, cố gắng tìm ra cách để làm điều gì đó mà nên đơn giản để viết mã (ví dụ như thực hiện một tuyên bố đơn giản) trong triển khai Logo của NetLogo. Logo không chỉ là ngôn ngữ của một lập trình viên (lời xin lỗi với những người đã tức giận bởi sự khẳng định này).Kịch bản Python cho NetLogo?

Tôi thấy dự án Tengolo của Abe Gong có ý định làm việc này (http://compsocsci.blogspot.com/2012/02/announcing-tengolo-python-alternative.html) nhưng dự án dường như đã bị bỏ rơi. Ngoài ra một câu hỏi khác trong ngăn xếp tràn (agent-based simulation: performance issue: Python vs NetLogo & Repast) dường như chỉ ra rằng Python sẽ chậm hơn. Có vẻ như nó sẽ khá có thể sử dụng Jython để biên dịch thành các mô-đun mà NetLogo có thể sử dụng, nhưng tôi tự hỏi liệu có ai biết điều gì đó sẽ cho phép tôi thực hiện các mô phỏng NetLogo bằng một ngôn ngữ hợp lý như Python hay không. Suy nghĩ?

+0

có liên quan: https://simulatingcomplexity.wordpress.com/2014/05/26/how-the-python-eat-the-turtle/ –

+0

Gần đây tôi đã bực bội với python vì không có câu lệnh lặp lại của Netlogo. – ychaouche

Trả lời

4

Đã có một loạt các dự án kiểu bản sao NetLogo trong năm, nhưng họ có xu hướng sáng lập và chết một khi người sáng tạo nhận ra công việc nặng nhọc liên quan đến việc tạo ra và duy trì một thứ gì đó như NetLogo trong một khoảng thời gian nhiều thập kỷ. (Làm việc trên NetLogo và người tiền nhiệm của nó trong dòng StarLogo trải dài trở lại vào cuối năm 1980.)

2015 update:Mesa trông giống như một người đăng ký đầy hứa hẹn trong không gian ABM-cho-Python.

Đối với những người thích tập hợp tính năng và ngữ nghĩa của NetLogo nhưng không thích ngôn ngữ, tôi nghĩ hướng triển vọng nhất là dự án NetLogo Web, bởi các nhà phát triển của NetLogo (bao gồm cả bản thân tôi, mặc dù đến năm 2015, tôi không còn có tính liên quan). Ngoài việc tương thích ngược với ngôn ngữ NetLogo cũ, NLW cũng cho phép xây dựng các mô hình bằng JavaScript hoặc bất kỳ ngôn ngữ biên dịch nào sang JavaScript.

NLW chưa đạt được tính chẵn lẻ đầy đủ tính năng với NetLogo thông thường, nhưng nó vẫn đang hoạt động tốt. Vì vậy, tùy thuộc vào nhu cầu của bạn, nó có thể chỉ là một hướng đầy hứa hẹn hơn là một giải pháp bạn có thể sử dụng ngày nay.

Bạn cũng có thể xem AgentScript - cũng dựa trên JavaScript, với độ lệch CoffeeScript (cập nhật năm 2015: Tôi nghĩ rằng chúng đang chuyển sang ES6?).

+0

Cảm ơn con trỏ tới Rùa. Tôi sẽ kiểm tra. Không thể nói sự thuần khiết trong tôi thực sự là JavaScript, nhưng ít nhất cũng có những cấu trúc điều khiển tốt hơn. – theoden

2

NetLogo là ngôn ngữ không có một số lỗi. lack of a case statement chắc chắn là một nhỏ; sự thiếu mô đun ở trên mức hàm là một mô hình lớn hơn cho các mô phỏng rất phức tạp.

Nhưng những thứ mà nên đơn giản để mã thường là đơn giản để mã, mặc dù theo cách mà bạn có thể không quen. Đó là tất cả vấn đề của suy nghĩ: ngôn ngữ Logo có nguồn gốc của nó trong gia đình Lisp, và cách tốt nhất để tiếp cận một vấn đề trong nó hầu như luôn luôn là từ quan điểm của functional programming. Nếu bạn cố gắng duy trì một tư duy bắt buộc (hoặc thậm chí là "pythonic"), bạn có thể sẽ phải "liên tục bộ não của bạn" liên tục.

Tôi khuyên bạn nên đăng câu hỏi tại đây khi bạn thấy mình đang vật lộn với những thứ đơn giản. Có một cơ hội rất tốt mà một người nào đó sẽ sẵn sàng cho bạn thấy "cách NetLogo" để làm điều đó.

Điều đó đang được nói, có hai cách chính để NetLogo để giao tiếp với các ngôn ngữ JVM khác, bao gồm Jython:

  • The Extensions API cho phép bạn để cung cấp nguyên thủy mới có thể sử dụng bên trong NetLogo. Bạn có thể xây dựng phần lớn mô hình của mình bên trong Jython, hiển thị mã của bạn thông qua các phần mở rộng nguyên thủy, và giữ những thứ mà bạn phải mã bên trong NetLogo ở mức tối thiểu.

  • The Controlling API cho phép bạn kiểm soát NetLogo từ một chương trình bên ngoài. Trong kịch bản này, bạn sẽ viết mã cho mô hình của bạn trong Jython và sử dụng NetLogo như một công cụ/thư viện mô phỏng bên ngoài.

Nhưng nếu mục tiêu của bạn chỉ là xây dựng mô phỏng, tôi không chắc chắn bạn sẽ đạt được nhiều bằng cách thực hiện các cách vòng này. Bạn cũng có thể chuyển sang một nền tảng khác như MASON hoặc Repast hoặc chỉ, bạn biết đấy ... tìm hiểu cách yêu thích NetLogo.

+0

Có, sự thiếu mô đun có lẽ là vấn đề lớn, nhưng các vấn đề nhỏ sẽ bị xáo trộn và tích lũy. Tôi thích sử dụng bản đồ và giảm số nguyên thủy mặc dù thật dễ dàng để yêu thích chúng vì sự thông minh và phân tích cú pháp và ghét chúng cho sự rõ ràng. NetLogo như một ngôn ngữ có vẻ như là con đường không được đánh bại. – theoden

+1

Đây là một bài đăng blog về việc kiểm soát NetLogo từ Python: http://davidmasad.com/blog/netlogo-from-python/ –

+0

Cảm ơn, Seth. Đây là một cuộc thảo luận thú vị về những gì nó sẽ làm để chạy NetLogo API thông qua Python. – theoden

1

Mô-đun gridworld.py cung cấp một số chức năng giống như NetLogo.

Tôi hoàn toàn yêu Python, nhưng tôi sẽ đặt một từ cho NetLogo: nó là quá đủ cho hầu hết các mô phỏng quy mô nhỏ khi bạn quen với tính năng của nó, đặc biệt là kể từ khi bổ sung các nhiệm vụ. (Như Nicolas cho thấy, tham gia một quan điểm lập trình chức năng giúp.) Đối với một số dự án, sự vắng mặt của thừa kế trong NetLogo thực sự bất tiện (giống không phải là một thay thế thích hợp).Tuy nhiên, một trong những dự án đang diễn ra của tôi là ở NetLogo, và sau khi cố gắng dạy lập trình dựa trên đại lý với Python, tôi đã chuyển sang NetLogo cho lớp học.

Một điều nữa: mong đợi, Tortoise trông khá thú vị.

+0

Có, quy mô là một vấn đề đối với NetLogo. Tôi có một mô phỏng Digital Ants mà tôi không thể vượt quá 10.000 bản vá lỗi vì các vấn đề về hiệu suất. Nhưng nó được thực hiện để chạy trên hàng triệu máy. Tôi sẽ kiểm tra Rùa. Cảm ơn! – theoden

+0

NetLogo Web (còn gọi là Rùa) chậm hơn đáng kể so với NetLogo thông thường, do đó, đối với hiệu suất cao và/hoặc số lượng lớn các đại lý, bạn nên sử dụng NetLogo thông thường hơn. –

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