jkomoros / cassim Goto Github PK
View Code? Open in Web Editor NEWComplex Adaptive Systems Simulator
License: Apache License 2.0
Complex Adaptive Systems Simulator
License: Apache License 2.0
diff the original config with the currently modified one, and then stuff the diff into a hash encoding, so that someone sharing the URL would get the same exact config.
Kind of a poor man's #32
Also add a button to clear all userland modifications
E.g. for expensive simulations
A run all button? And maybe the overall sim config option configures if its runs should be automatic or not
Originally captured in #33
Mechanism to automatically set shortNames for configs that don't have a shortName set (it is undefined).
Configs should put more important properties first.
The shortName config helper looks at each object at each level. First, it looks at all existing long names. Then for each it tries to do the naive shortening (first letter, then each Capital Letter aftwerwards), and see if any will collide. If some will collide , then it looks at the ones that collide. If they collide by being the same words except for some segment, then produce their shortNames by following hte normal rules, but for the one word that is different between them, doing the drop-out-vowels shortening trick.
Make sure that an explicit shortName of '' is interpreted as "do not shorten ever"
These configs should be looked at and their 3-digit hash should be included in the diff URL. (The hash should also concatenate the simulatorVersion before the message, so if the version changes OR the config changes then diffs will be invalidated).
Originally captured in #22.
If the user opts in in screenshot, we render the run-charts. It will also need a clipFuture style boolean (like run-statuses) to render backwards.
Every tick, have the nodes randomly be littered with values.
The person picks the best opportunity they can see. They have a larger view if they have credibility (successful opportunities; moderate opportunities are net zeo, disassters are negative), and have recently talked to those nodes or people.
Would need a fieldofview calculatiion with angle, dropoff, which returns a list of nodeIDs with a float of how strong they are 0.0 to 1.0)
Originally captured in #30
It's a boolean. If set, then if the value is optional and not provided, it will be set to its defaul tvalue. This will happen before normalizeSimOptions is called, removing a lot of need for normalizeSimOptions.
It only does something if optional is true, and it says 'fill in this example value if it's not set in normalized options'. If set, then the example value should be not an 'interesting' value, but the default one.
This is tracked in some other sub-issue. And now more things in schelling-org can be set as optional because they can be defaulted fine.
As of #37, sometimes simOptions aren't actually set until later. But modifications actually run BEFORE, because the defaulting isn't done until the Simulation is created, and by that time the modifications have already been merged in. That seems like it could lead to some weird behaviors...
Should only remove PNGs in the screenshots directory, not gifs. (And gulp generate:gifs should clear out the gifs)
Originally captured in #10
Currently done to put everything on the final frame
As opposed to being statically built in
E.g. the logic to generate the first frame or subsequent frames
Seems like it might be generally useful to pipe in separately
There's a lot of currently bespoke machinery to check the shape of simOptions.
This gets at the simOptionsNormalization passes, that should return a fully normalized simOptions so everything downstream can assume a fixed shape
e.g. the run index, whether chart is expanded, chart details, etc.
Not just the final success rate or not
A lot of settings will be the same across configs in a config file, e.g. colors, animation delays, etc.
A named dict of base options objects in the json. Each normal item can refer to a base object by Id. Base objects in the dict can refer to other base objects (no cycles!)
In the UI, values set by base objects are shown italicized and with a little affordances saying where they come from. Changing one of those values always sets it on that object as an override, not the base object it inherits from. Clicking the affordance let's you switch to editing the base object directly.
Another way of doing it is not having a separate dict but instead allow options to build on others and also allow some to be hidden from UI (the base ones). This would require allowing arbitrary nesting overlays of deeply nested objects which is hard... But useful in general and maybe worth building
Originally captured in #22.
Memoize runCharts._{max|min}{X|Y}
Memoize creation of simulation.scoreData.
Noticed while working on #30.
I think it triggers if you change the sim at some point in the modifications; the machinery that unpacks shortNames is using a different (old) simulator to unpack it. If it asks for the default value, it's just dropped. But if it explicltly sets a value to the shortName, then the config will barf because it doesn't recognize that property.
Fix is likely to make it so the machinery that exapnds the shortNames also notes the change of sim and uses that.
In URL, the filename should be /FILENAME/sim-name/round-number/frame-number/
, where FILENAME is looked for at /config/FILENAME.json
E.g. skin colors, genders, a much larger set
Originally captured in #4.
Go back to rendering with transparent backgrounds for pngs and make gifs have the default background color composited in the back after the fact (see comment below for some research notes) (this will require a default colors that are overriden by any provided colors). The benefit of this is that the pngs can have a transparent background while the gifs don't (because gif transparency is so ugly)
Including doing a better job if there is a simulator that never returns a null frame... But be more resilient to that.
Pockets of innovation, e.g. language spreading
The evolution explosion milk drop
Can start in center or bottom center
There are ‘heads’ which are agents that expire. New ones get allocated to a known viable thing
Agents have different strengths which selects how far into the adjacent possible they can jump
Known viable things get to be brighter beacons as agents add value there. But the value fades at time step if not tended to or visit.
Would require Firestore storage. Some way for someone to publish a current config.
In the URL, instead of the default
(for the static JSON) it would be a longer ID for the save file
Which can be when chartable data changes, when any expanded/pathExpanded value changes, etc.
Noticed while working on #22.
So that they can assume all of their options objects are formulated in a fully normalized way and they don't have to do defaulting, checking for missing values, etc.
This is non-trivial, because we'd have to figure out a way to get the description in listings.json since they aren't loaded to provide their description until after they've been imported.
Apparently due to gifencoder
dependency. Perhaps doesn't work on apple silicon?
Currently it's set to default, but within Simulator, so option-control doesn't render it, which makes it a pain to have to go in an add the optional/default properties and tweak those.
Instead, setSimPropertyInConfig should set it to DEFAULT_SENTINEL
Instead of bespoke layout logic, allowing layout to use e.g. flexbox and pre-baked components (like diagram-emoji). And then have the lines rendered in an SVG that can... read back those positions?
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.