58
Agents, Stories & Hacks DaAaB/SerenDPT Tech Chat: November 2017

Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Agents, Stories & HacksDaAaB/SerenDPT Tech Chat: November 2017

Page 2: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Back to the Future• Or: Fabio, It’s All Your Fault! (Steve & Me Too : )

Page 3: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

3D Too

Page 4: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Graph Structure

Page 5: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Data Driven

open ~/src/netlogo/Venice/Venice.nlogohttp://backspaces.net/wiki/NetLogo_Bag_of_Tricks#NetLogo_GIS

Page 6: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Skunks, what do they do?

• Can we do it? How?

• Fail early and often!

• Try it:

• Modeling (Third time!)

• Stories (Write about pros, cons, failures)

• Dives & Hacks (Do it!)

Page 7: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Outline:

• Modeling

• AgentScript tutorial & Demos

• Hello World

• Stories (medium.com)

• 2 Headed Classes, ES6 Migration, Wrapping Libs

• Dives & Hacks

• Miscellaneous innovations.

Page 8: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

AgentsAgentScript & Agent Oriented Programming 101

A New Way of Thinking

Page 9: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Models• Modeling: Space, Time, Interaction

• Space: A 2D/3D World where Agents live

• Time: The system evolves, taking steps

• Interaction: Patches, Turtles, Links interact

Link

Page 10: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

AgentSets

• Agent = Object in an AgentSet

• AgentSet = Array which creates its Objects

• BaseSets: Patches, Turtles, Links

• Breeds: SubArrays of BaseSets

Page 11: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Three Basic AgentSets

• Patches

• The fixed “World” grid (Patches don’t move)

• A Patch knows its Neighbors and its Turtles

• Turtles

• A Turtle moves

• Knows it’s current Patch and Links

• Uses Patches for spatial search: turtles.inRadius(4)

• Links

• Connects two Turtles

Page 12: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Patches

Page 13: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Turtles

Page 14: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Links

Page 15: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Model with all three

Page 16: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Patch Neighbors

• Each Patch knows its neighbors

• Two kinds: 8 (Moore) & 4 (Von Neumann)

Page 17: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Geometry

• Patches: patches “inRect” & “inRadius”

Page 18: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Cones Too

Page 19: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Turtles Too• Turtles know their Patch

• Patches know their Turtles … so:

• turtles.inRect, turtles.inRadius, turtles.inCone

• More: towards, rotate, patchAhead, distance

• Geometry is Key to Modeling (boids)

Page 20: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Example Model Types

• Patches (& Breeds: fires embers)

• Patches and Turtles (& exits inside wall)

• Patches, Turtles and Links (& nodes drivers)

Page 21: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

AgentSets: Create their Agents

Turtles

Turtles.create(6, (t) => { t.size = 4 t.color = ‘red’})

NOTE: Agents never directly created by modeler!

sizecolor

sizecolor

sizecolor

sizecolor

sizecolor

sizecolor

Page 22: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

AgentSet - Agent Pairs

• Patches create Patch objects

• Turtles create Turtle objects

• Links create Link objects

Page 23: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Breeds: Sub-AgentSets

• Patches: Land, Lakes

• Turtles: Nodes, Drivers

• Links: Spokes, Rims

PatchesLand

Lakes

Page 24: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Model: Puts it all together.

• Creates Patches, Turtles, Links sets

• Animator: step() & draw(), FPS, ticks.

• setup(), start(), stop(), reset()

• MyModel subclasses Model

Page 26: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Hello.js

Page 27: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Hello.js: setup()

Page 28: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Hello.js: step()

Page 30: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

No <script> Tags!

Page 31: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Develop Incrementally

• Create setup(), step() one part at a time

• Put in debugging help

• Use “console”

• Write & Run!

• Experiment.

Page 32: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Play!• Download backspaces.net/temp/hello.html

• Modify it, use console to inspect.

• Change patch under turtles to be turtle.color.

http://backspaces.net/temp/hello1.html

Page 33: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

StoriesThe rest of Open Source

medium.com

Page 34: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,
Page 35: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Medium is Different

• Don’t do Tech, just Write.

• Do tell Stories.

• Stories aren’t Tutorials, Documentation, …

• They’re about something you did and why

• Like the Model/View split, and hating it! .. and now loving it!

• .. or …

Page 37: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Add second layer to new Foo()

• Object size an issue.

• Ditto sharing properties (Defaults).

• Study Objects: DevTools & PrintProtoStack()

• Result: Class instance and Object.create()

Link

proto = new Foo()obj = Object.create(proto)

Page 38: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

ES6 Modules, Part 1: Migration Strategy

Page 39: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Migrating to Bleeding Edge

• ES6: How migrate and manage “Legacy”

• JSPM, SystemJS, Yuk .. Safari Preview! Yay!

• Back to the Future: Write & Run! No gulp, browserify, webpack: NPM scripts.

• Transform: ES5, <script>, Node/CJS: Use Rollup bundles and plugins.

Link

Page 40: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

ES6 Modules, Part 2: Libs .. Wrap ’em up!

Page 41: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Dealing with Dependencies• Three.js, dat.gui, Stats.js, Pako.js

• Mixed: some modules, most not, all a mess.

• Built 4 converters, worked with authors. Risky!

• Wrappers: Wrap foo.min.js in a Module!

Link

foo.min.jssource!

Page 42: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Hacks & DivesTests & Future Direction

Page 43: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Hacks & Dives

• Three.js Exploration

• Flood Fill for Fabio

• Lazy Evaluation

• Model/View Split

Page 45: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Results

• Three very helpful, has raw WebGL access.

• SimTable converting to Three.js

• Several SimTable Computer Vision projects converted to Three.js

• AgentScript has a ThreeView

• Performance

• Point geometry fastest

• Quad geometry, with sprites, very good

• Simple mesh-per-agent much too slow

Page 46: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

History: Ed Angel’s Text

• Class: I submitted my homework as webpage.

• Ed: WTF? Where’s the code?

• Me: It’s here, code, description, UI, etc.

• Ed: Converted textbook to WebGL/JavaScript!

Page 47: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Fabio: Console Project

• How did you do Zozobra Exit model?

• Flood Fill.

• Maybe Flood Fill could help?

• OK, lets try it.

• (Remember: Proof of Concept)

Page 48: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Flood: Distances to Exit

• Start at exit

• Ask neighbors to increase distances

0

2 1 23 34

4455

5

66

6

77 7

9

8

Page 49: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

FloodFill Algorithm

Page 50: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Flood Around Obstacles

Page 51: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Turtles

• Move to next empty patch closer to exit

• If can’t move, ask neighbor turtles

• If best for both of us

• Squeeze past each other

• If nothing else works, change exit!

Page 53: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Lazy Evaluation

• Models Differ:

• Not all need neighbors, or both 4 & 8

• Not all patches need their turtles

• Not all turtles have links

• Would be waste to have unused capabilities

• Use “getters” to create/promote property.

Page 54: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Two Patch Examples

• patch.turtlesHere()

• patch.neighbors4 (property)

Page 55: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Model/View Split

• SimTable has it’s own View

• Ditto for SerenDPD

• Now ASX separated into a Core and a View

• https://github.com/backspaces/asx

• https://github.com/backspaces/CoreAS

• ASX subclasses Core for a Three.js View

Page 57: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

M/V Split Still Early

• How build a general View interface?

• Subclassing too “tight”

• Messaging Architecture?

• Josh: View Adaptor? (React-like)

• Run Models in Node?

• Run Models as Web Workers? (Josh!)

• Run Models on FireBase?

Page 58: Agents, Stories & Hacksbackspaces.net/temp/Venice2017.pdf · Outline: • Modeling • AgentScript tutorial & Demos • Hello World • Stories (medium.com) • 2 Headed Classes,

Spritz!