Stateful machine

From psychoengineering
Revision as of 10:55, 15 August 2023 by Octopirate (talk | contribs) (Initial description)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

A stateful machine is a machine that uses past output to create novel output.

<graph> {

 "$schema": "https://vega.github.io/schema/vega/v5.json",
 "width": 400,
 "height": 200,
 
 "data": [
   {
     "name": "nodes",
     "values": [
       {"id": 3, "label": "machine"}
     ]
   },
   {
     "name": "links",
     "values": [
       {"id": 0, "source": 0, "target": 1, "label": "inputs", "path": "M0,100L200,100", "arrow": {"x": 200, "y": 100, "offset": {"x": -5, "y": 0}}},
       {"id": 3, "source": 2, "target": 0, "label": "feedback", "path":"M300,100L500,100", "arrow": {"x": 150, "y": 100, "offset": {"x": 0, "y": -5}}},
       {"id": 6, "source": 1, "target": 2, "label": "outputs", "path":"M350,100L350,25L150,25L150,100", "arrow": {"x": 500, "y": 100, "offset": {"x": 0, "y": 0}}}
     ]
   }
 ],
 
 "scales": [
   {
     "name": "x",
     "type": "band",
     "range": "width",
     "domain": [0, 1, 2, 3, 4, 5, 6]
   }
 ],
 
 "marks": [
   {
     "type": "rect",
     "from": {"data": "nodes"},
     "encode": {
       "enter": {
         "x": {"scale": "x", "field": "id", "band": 0.5},
         "y": {"value": 80},
         "width": {"value": 100},
         "height": {"value": 40},
         "fill": {"value": "lightgray"},
         "stroke": {"value": "black"}
       }
     }
   },
   {
     "type": "text",
     "from": {"data": "nodes"},
     "encode": {
       "enter": {
         "x": {"scale": "x", "field": "id", "band": 0.5, "offset": 50},
         "y": {"value": 100},
         "fontSize": {"value": 14},
         "text": {"field": "label"},
         "align": {"value": "center"},
         "baseline": {"value": "middle"}
       }
     }
   },
   {
     "type": "path",
     "from": {"data": "links"},
     "encode": {
       "enter": {
         "path": {"field": "path"},
         "stroke": {"value": "black"}
       }
     }
   },
   {
     "type": "rect",
     "from": {"data": "links"},
     "encode": {
       "enter": {
         "x": {"scale": "x", "field": "id", "band": 0.70},
         "y": [
           {"test": "datum.source !== 2", "value": 90},
           {"test": "datum.source === 2", "value": 15}
         ],
         "width": {"value": 75},
         "height": {"value": 20},
         "fill": {"value": "lightgray"}
       }
     }
   },
   {
     "type": "text",
     "from": {"data": "links"},
     "encode": {
       "enter": {
         "x": {"scale": "x", "field": "id", "band": 0.70, "offset": 37.5},
         "y": [
           {"test": "datum.source !== 2", "value": 100},
           {"test": "datum.source === 2", "value": 25}
         ],
         "fontSize": {"value": 14},
         "text": {"field": "label"},
         "align": {"value": "center"},
         "baseline": {"value": "middle"}
       }
     }
   },
   {
     "type": "symbol",
     "from": {"data": "links"},
     "encode": {
       "enter": {
         "x": {"field": "arrow.x", "offset": {"field": "arrow.offset.x"}},
         "y": {"field": "arrow.y", "offset": {"field": "arrow.offset.y"}},
         "shape": {"value": "triangle-right"},
         "size": {"value": 100},
         "fill": {"value": "black"},
         "angle": [{"test": "datum.source === 2", "value": 90}, {"value": 0}]
       }
     }
   }
 ]

} </graph>