bkovitz / fargish Goto Github PK
View Code? Open in Web Editor NEWGeneric tools for making FARG models
Generic tools for making FARG models
v23 of FARGish: Restarting from scratch, this time in Python v22/ contains the last attempt in Racket, abandoned. Also includes old Clojure code from still earlier versions. To run with a graphical display in a web browser: 1. In a terminal window, run: $ python3.7 server.py 2. In a web browser, open: http://localhost:8081/fargish.html To stop the web server, hit Ctrl-C in the terminal window. 11-Oct-2019: First running version, still with bugs and missing features. 5-Dec-2019 Now in the middle of rewriting the do_timestep and Response code. The new way has a mix-in object, TimeStepper, which will replace NumboGraph.do_timestep() and its ancillary functions. Watcher is now ActiveNode and Response is now Action. The new files are: bases.py ActiveNode and Action TimeStepper.py testTimeStepper.py Has simple example of setting up a tiny FARG model numbo3.py is the current version. 18-Feb-2020 demo2.py is the current version. ======================================================================== The Design of FARGish (last updated 24-Feb-2020) Under FARGish, a FARG model is a port graph plus program code. PortGraph (inherits from MultiGraph from the networkx library): holds the graph. Every edge in a PortGraph links a (nodeid, port label) tuple to another (nodeid, port label) tuple. Each nodeid is an integer > 1. Each port label is a string. With every node in the PortGraph is associated an object, called a datum. Every datum inherits from Node. ActiveNode is an abstract class that inherits from Node, and provides an .actions() method, which returns a list of Action objects. An Action object's .go() method performs some action on the graph. An Action object has a .weight and a .threshold, which determine how likely the Action is to be executed on a given timestep. An Action is not eligible to be executed unless its .weight exceeds its .threshold. (Purpose: a nonzero threshold prevents highly consequential Actions from being executed before their ActiveNode has a high level of support from other nodes.) Every node has salience and support. Salience is a number that determines how likely a node is to be found in searches. A node's salience is boosted when it or its immediate neighbors is "touched", i.e. affected by an Action. Each node's salience decays at the start of each timestep. Support is a number that determines whether a node can continue to exist and, for ActiveNodes, how likely they are to be chosen to perform one of their Actions. Support flows from node to node via "support edges": those with labels 'support_to' and 'support_from'. The exact way in which support flows is determined by a Propagator object. TimeStepper is a mix-in class for PortGraph, which provides a .do_timestep() method. .do_timestep() randomly chooses ActiveNodes (based on support), and from those ActiveNodes randomly chooses Actions. The FARGish language provides simple syntax for defining subclasses of Node, which port labels mate with which other port labels, and simple Actions associated with ActiveNodes and simple conditions for executing them. For anything complicated, FARGish provides the ability to call to external Python code. FARGish is compiled into Python by functions in codegen.py. The grammar, implemented in PLY, is specified in grammar.py. grammar.parse() generates objects defined in gen.py, which in turn have a .gen() method to generate Python code. Visualization of the graph occurs in a web browser and is implemented in Javascript in the file forcedirected3.js, invoked by fargish.html. server.py implements the web server, calling upon runner.py to interpret HTTP GET commands to affect or query the FARG model. runner.py calls upon ModelWrapper to directly access the model and to convert between the model's native Python objects and the JSON objects sent to the web browser. @@source files actually in use
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.