breck7 / simoji Goto Github PK
View Code? Open in Web Editor NEWCreate back-of-the-envelope multi-agent simulations using emojis.
Home Page: https://simoji.treenotation.org
Create back-of-the-envelope multi-agent simulations using emojis.
Home Page: https://simoji.treenotation.org
<meta charset="utf-8"></meta> <title>Simoji - Write simulations with Emojis</title> <script>/* This HTML was generated by π Scroll v68.0.0. http://scroll.pub */</script> <style>@media print {.doNotPrint {display: none !important;}}</style> <link rel="canonical" href="https://simoji.treenotation.org/readme.html"></link> <meta charset="iso-8859-1"></meta> <meta name="viewport" content="width=device-width,initial-scale=1"></meta> <meta name="description" content="Design quick simulations with Emojis"></meta> <meta name="generator" content="Scroll v68.0.0"></meta> <meta property="og:title" content="Simoji - Write simulations with Emojis"></meta> <meta property="og:description" content="Design quick simulations with Emojis"></meta> <meta property="og:image" content=""></meta> <meta name="twitter:card" content="summary_large_image"></meta> <style>html,body,div,span,h1,h2,h3,h4,p,ol,ul,li,table,figure { margin: 0; padding: 0; border: 0; vertical-align: baseline; border-spacing: 0; } li { list-style-position: inside; margin-top: .4em; line-height: 1.2em; } a { text-decoration-color: transparent; } a:hover { text-decoration-color: initial; } sup,sub { vertical-align: baseline; position: relative; top: -0.6em; } sub { top: 0.6em; } html { padding: 4px; background-color: rgb(244,244,244); font-family: Exchange,Georgia,serif; color: #000; font-size: 14px; hyphens: auto; } p { margin-top: 0.4em; line-height: 1.4em; } .scrollQuote { break-inside: avoid; display: block; margin: .5em 0; padding: .5em; background: rgba(204,204,204,.5); white-space: pre-line; border-left: .5em solid rgba(204,204,204,.8); } code { font-size: 90%; background-color: rgba(204,204,204,.5); padding: 2px 4px; border-radius: 4px; } .scrollColumns { column-count: auto; column-fill: balance; column-width: 35ch; column-gap: 20px; padding-left: 20px; padding-right: 20px; margin: auto; } .scrollSnippetContainer { padding: 1ch 0; break-inside: avoid; text-align: justify; } .scrollTitle { text-align: center; margin-bottom: .25em; } .scrollTitle a { color: #000; } .scrollDateline { font-style: italic; font-size: 80%; } .scrollSection { break-inside: avoid; } .scrollSection h3 { margin-top: 1em; text-align: center; } .scrollSection h4 { margin-top: 1em; text-align: center; } h4.scrollQuestion { text-align: left; } .scrollNoteLink { opacity: .4; } .scrollHoverNote { text-decoration: underline dashed 1px rgba(0,0,0,.1); cursor: default; } .scrollCodeBlock { overflow: auto; font-size: 80%; hyphens: none; white-space: pre; border-left: .5em solid rgba(204,204,204,.8); break-inside: avoid; display: block; margin: .5em 0; padding: .5em; border-radius: 0; position: relative; } .scrollCodeBlock:hover .scrollCopyButton { opacity: .5; } .scrollCodeBlock:hover .scrollCopyButton:hover { opacity: .8; } .scrollCodeBlock:hover .scrollCopyButton:active { opacity: 1; } .scrollCopyButton { position: absolute; top: 2px; right: 2px; font-size: 14px; cursor: pointer; opacity: 0; } .scrollCopyButton::after { content: "[ ]"; } .scrollCopiedButton::after { content: "[β]"; } .scrollTable { table-layout: fixed; margin: .5em 0; overflow: hidden; font-size: 80%; width: 100%; hyphens: none; border: 1px solid rgba(224,224,224,.8); } .scrollTable td,.scrollTable th { padding: 3px; overflow: hidden; } .scrollTable th { border-bottom: 2px solid rgba(0,0,0,.6); text-align: left; } .scrollTable tr:nth-child(even) { background: rgba(224,224,224,.6); } .scrollByLine { font-size: 12px; font-style: italic; margin: 4px 0; text-align: center; } .scrollViewSource { text-align: center; font-size: 80%; margin: 0; margin-top: 0.4em; line-height: 1.4em; margin-bottom: 1em; } .scrollViewSource a { color: #000; } .scrollContinueReadingLink { display: block; text-align: center; } .scrollCaptionedFigure { display: block; text-align: center; } .scrollCaptionedFigure img { max-width: 98%; height: auto; } .scrollCaptionedFigure figcaption { font-style: italic; } .scrollDashboard { width: 100%; font-size: 30px; text-align: center; font-weight: bold; break-inside: avoid; margin-top: 8px; margin-bottom: 8px; } .scrollDashboard td { width: 33.3%; border: 1px solid #e8e8e8; } .scrollDashboard span { font-size: 20p;; display: block; } .scrollChat span { font-family: Verdana; margin-top: 5px; padding: 5px 20px; border-radius: 15px; display: inline-block; } .scrollChatLeft { text-align: left; } .scrollChatLeft span { background: rgba(204,204,204, .5); } .scrollChatRight { text-align: right; } .scrollChatRight span { color: white; background: rgb(0,132,255); } .scrollYouTubeHolder { position: relative; width: 100%; height: 0; padding-bottom: 56.25%; } .scrollYouTubeEmbed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .gazetteHeader svg { width: 30px; height: 30px; fill: rgba(204,204,204,.8); } .gazetteHeader svg:hover { fill: #333; } .gazetteHeader a { color: rgba(204,204,204,.8); position: absolute; font-size: 30px; line-height: 27px; text-decoration: none; } .gazetteHeader a:hover { color: #333; } .gazetteHeader .gazetteTopLeftBar { text-align: left; left: 25px; } .gazetteHeader .gazetteTopRightBar { text-align: right; right: 25px; } .gazetteHeader a.gazettePrevPageLink { left: 3px; } .gazetteHeader a.gazetteNextPageLink { right: 3px; } .gazetteFooter { margin-top: 8px; padding-top: 8px; text-align: center; } .gazetteFooter svg { width: 30px; height: 30px; fill: rgba(204,204,204, .5); padding: 0 7px; } .gazetteFooter svg:hover { fill: #333; } .gazetteScrollLink { display: block; font-family: Verdana; font-weight: 100; margin: .5em; color: rgba(204,204,204,.5); } </style> <div class="gazetteHeader doNotPrint"> <a class="gazettePrevPageLink" href="releaseNotes.html"><</a> <a class="gazetteTopLeftBar" href="index.html"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12.7166 3.79541C12.2835 3.49716 11.7165 3.49716 11.2834 3.79541L4.14336 8.7121C3.81027 8.94146 3.60747 9.31108 3.59247 9.70797C3.54064 11.0799 3.4857 13.4824 3.63658 15.1877C3.7504 16.4742 4.05336 18.1747 4.29944 19.4256C4.41371 20.0066 4.91937 20.4284 5.52037 20.4284H8.84433C8.98594 20.4284 9.10074 20.3111 9.10074 20.1665V15.9754C9.10074 14.9627 9.90433 14.1417 10.8956 14.1417H13.4091C14.4004 14.1417 15.204 14.9627 15.204 15.9754V20.1665C15.204 20.3111 15.3188 20.4284 15.4604 20.4284H18.4796C19.0806 20.4284 19.5863 20.0066 19.7006 19.4256C19.9466 18.1747 20.2496 16.4742 20.3634 15.1877C20.5143 13.4824 20.4594 11.0799 20.4075 9.70797C20.3925 9.31108 20.1897 8.94146 19.8566 8.7121L12.7166 3.79541ZM10.4235 2.49217C11.3764 1.83602 12.6236 1.83602 13.5765 2.49217L20.7165 7.40886C21.4457 7.91098 21.9104 8.73651 21.9448 9.64736C21.9966 11.0178 22.0564 13.5119 21.8956 15.3292C21.7738 16.7067 21.4561 18.4786 21.2089 19.7353C20.9461 21.0711 19.7924 22.0001 18.4796 22.0001H15.4604C14.4691 22.0001 13.6655 21.1791 13.6655 20.1665V15.9754C13.6655 15.8307 13.5507 15.7134 13.4091 15.7134H10.8956C10.754 15.7134 10.6392 15.8307 10.6392 15.9754V20.1665C10.6392 21.1791 9.83561 22.0001 8.84433 22.0001H5.52037C4.20761 22.0001 3.05389 21.0711 2.79113 19.7353C2.54392 18.4786 2.22624 16.7067 2.10437 15.3292C1.94358 13.5119 2.00338 11.0178 2.05515 9.64736C2.08957 8.73652 2.55427 7.91098 3.28346 7.40886L10.4235 2.49217Z"/></svg></a> <a class="gazetteTopRightBar" href="https://github.com/breck7/simoji"><svg xmlns="http://www.w3.org/2000/svg" width="92pt" height="92pt" viewBox="0 0 92 92"><path d="M90.156 41.965 50.036 1.848a5.913 5.913 0 0 0-8.368 0l-8.332 8.332 10.566 10.566a7.03 7.03 0 0 1 7.23 1.684 7.043 7.043 0 0 1 1.673 7.277l10.183 10.184a7.026 7.026 0 0 1 7.278 1.672 7.04 7.04 0 0 1 0 9.957 7.045 7.045 0 0 1-9.961 0 7.038 7.038 0 0 1-1.532-7.66l-9.5-9.497V59.36a7.04 7.04 0 0 1 1.86 11.29 7.04 7.04 0 0 1-9.957 0 7.04 7.04 0 0 1 0-9.958 7.034 7.034 0 0 1 2.308-1.539V33.926a7.001 7.001 0 0 1-2.308-1.535 7.049 7.049 0 0 1-1.516-7.7L29.242 14.273 1.734 41.777a5.918 5.918 0 0 0 0 8.371L41.855 90.27a5.92 5.92 0 0 0 8.368 0l39.933-39.934a5.925 5.925 0 0 0 0-8.371"/></g></svg></a> <a class="gazetteNextPageLink" href="cheatSheet.html">></a> </div> <div class="scrollSection"><h1 class="scrollTitle"><a href="readme.html">Simoji - Write simulations with Emojis</a></h1> </div> <div class="scrollSection"><h4 class="scrollParagraph">A work in progress.</h4> </div> <div class="scrollColumns" style="column-width:35ch;column-count:2;max-width:90ch;"> <div class="scrollSection"><h3 class="scrollParagraph">Documentation</h3> <p class="scrollParagraph"><a href="./cheatSheet.html">QuickStart</a></p> </div> <div class="scrollSection"><h3 class="scrollParagraph">Related Work</h3> <ul style="text-indent:0px;"><li ><a href="https://www2.econ.iastate.edu/tesfatsi/ABMSoftwareReview.AbarEtAl2017.pdf">Agent Based Modelling and Simulation tools: A review of the state-of-art software</a></li> <li ><a href="https://en.wikipedia.org/wiki/Comparison_of_agent-based_modeling_software">Comparison of agent-based modeling software</a></li> <li ><a href="https://www.netlogoweb.org/launch#http://www.netlogoweb.org/assets/modelslib/Sample%20Models/Biology/Flocking%20Vee%20Formations.nlogo">NetLogo</a> - 2D/3D, Web/Desktop, Open</li> <li ><a href="https://gama-platform.github.io">GAMA</a></li> <li ><a href="https://gama-platform.github.io/wiki/Introduction">GAML Language</a> - Desktop, OpenSource</li> <li ><a href="https://ncase.me/sim/">EmojiSimulator</a> - After shipping I learned Nicky had a similar idea 5+ years before me and executed very well!</li> <li ><a href="https://insightmaker.com">InsightMaker</a></li> <li ><a href="https://www.anylogic.com">AnyLogic</a> - 2D/3D</li> <li ><a href="https://en.wikipedia.org/wiki/SARL_language">SARL</a></li> <li ><a href="https://www.framsticks.com/">Framsticks</a> - 3D, Desktop</li> <li ><a href="https://hash.ai">Hash.ai</a></li> <li ><a href="https://en.wikipedia.org/wiki/Soar_(cognitive_architecture)">SOAR</a></li> <li ><a href="https://en.wikipedia.org/wiki/Java_Agent_Development_Framework">JADE</a></li> <li ><a href="https://cs.gmu.edu/~eclab/projects/mason/">MASON</a></li> <li ><a href="https://repast.github.io">REPAST</a></li> <li ><a href="https://demonstrations.wolfram.com/SugarscapeAgentBasedModeling/">Simulations in Mathematica</a></li> <li ><a href="https://swarm.org/wiki/Swarm_main_page">Swarm</a></li> <li ><a href="https://www.altreva.com">Altreva</a></li> <li ><a href="https://sandspiel.club">sandspiel</a></li> <li ><a href="https://github.com/The-Powder-Toy/The-Powder-Toy">The-Powder-Toy</a></li></ul> </div> <div class="scrollSection"><h4 class="scrollParagraph">Development</h4> <div class="scrollSection"><h4 class="scrollQuestion">What is the dev loop like?</h4> </div></div> <ol style="text-indent:0px;"><li >Start the dev server with <code>node server.js</code>.</li> <li >Open <code>localhost/dev.html</code></li> <li >Edit files</li> <li >Refresh</li> <li >Run tests with <code>npm test</code></li> <li >Build distribution with <code>./build.js</code></li></ol> <div class="scrollSection"><h4 class="scrollParagraph">Roadmap</h4> <ul style="text-indent:0px;"><li >Run sims with 8x as many agents</li> <li >Run 8x more sims at once</li> <li >Write 8x more kinds of sims with the same number of words</li> <li >Write models that are 8x less wrong</li> <li >Generate 8x better distributables</li></ul> </div> <div class="scrollSection"><h3 class="scrollParagraph">β€οΈ Public Domain β€οΈ </h3> </div> </div> <div class="scrollKeyboardNav" style="display:none;"><a href="releaseNotes.html">releaseNotes.html</a> Β· readme.html Β· <a href="cheatSheet.html">cheatSheet.html</a><script>document.addEventListener('keydown', function(event) { if (document.activeElement !== document.body) return const getLinks = () => document.getElementsByClassName("scrollKeyboardNav")[0].getElementsByTagName("a") if (event.key === "ArrowLeft") getLinks()[0].click() else if (event.key === "ArrowRight") ].click() });</script></div> </div><p class="scrollViewSource doNotPrint"> <a href="readme.scroll">View source</a> </p> <div class="gazetteFooter doNotPrint"> <a href="mailto:[email protected]"><svg viewBox="3 5 24 20" width="24" height="20" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1, 0, 0, 1, 0, -289.0625)"><path style="opacity:1;stroke:none;stroke-width:0.49999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 5 5 C 4.2955948 5 3.6803238 5.3628126 3.3242188 5.9101562 L 14.292969 16.878906 C 14.696939 17.282876 15.303061 17.282876 15.707031 16.878906 L 26.675781 5.9101562 C 26.319676 5.3628126 25.704405 5 25 5 L 5 5 z M 3 8.4140625 L 3 23 C 3 24.108 3.892 25 5 25 L 25 25 C 26.108 25 27 24.108 27 23 L 27 8.4140625 L 17.121094 18.292969 C 15.958108 19.455959 14.041892 19.455959 12.878906 18.292969 L 3 8.4140625 z " transform="translate(0,289.0625)" id="rect4592"/></g></svg></a> <a href="https://github.com/breck7/simoji"><svg xmlns="http://www.w3.org/2000/svg" width="92pt" height="92pt" viewBox="0 0 92 92"><path d="M90.156 41.965 50.036 1.848a5.913 5.913 0 0 0-8.368 0l-8.332 8.332 10.566 10.566a7.03 7.03 0 0 1 7.23 1.684 7.043 7.043 0 0 1 1.673 7.277l10.183 10.184a7.026 7.026 0 0 1 7.278 1.672 7.04 7.04 0 0 1 0 9.957 7.045 7.045 0 0 1-9.961 0 7.038 7.038 0 0 1-1.532-7.66l-9.5-9.497V59.36a7.04 7.04 0 0 1 1.86 11.29 7.04 7.04 0 0 1-9.957 0 7.04 7.04 0 0 1 0-9.958 7.034 7.034 0 0 1 2.308-1.539V33.926a7.001 7.001 0 0 1-2.308-1.535 7.049 7.049 0 0 1-1.516-7.7L29.242 14.273 1.734 41.777a5.918 5.918 0 0 0 0 8.371L41.855 90.27a5.92 5.92 0 0 0 8.368 0l39.933-39.934a5.925 5.925 0 0 0 0-8.371"/></g></svg></a> <a href="https://scroll.pub" class="gazetteScrollLink">Built with Scroll v68.0.0</a> </div>
The UI looks like a web based game.
The Play button at the bottom is far far below.
The play button also does not seem to autopause when i change from buisness to moths to forest fire.
Is it intentional. because there seems to be no autopause but changing from one to another auto resets the simulation to start state.
a billion agents is still far off, but should be able to get to 1M with some code cleanup and addition of pan and zoom (LeafletJS may help)
[scattered notes]
one of my main questions is where this will end up between a GPL, a lisp, and a DSL.
In the end will the best language for sims really just be 80% Lisp and 20% DSL? Or will it be 80% DSL and 20% Lisp? Will vanilla JS be better? No clue. I'm making the bet that it will be 80% DSL specific to multi-agent sims, and 20% code that manipulates code (in other words, code more concerned with symbols than agents).
some ideas for primitives in the language:
π² .2 => allow stochasticity on any line? currently just onTick
and similar have that
π 2 => allow anyline to repeat?
what are the passes/phases called?
we have dev time, compile time, runTime, pauseTime, what others are there? how do some language primitives operate depending upon the phase?
variables. when and where do we have em. what do we call em (right now we have Settings and attributes). need some thinking through
to make sims more realistic probabilities should be able to change based on situation.
for example, probability of taking a shot in basketball sim should certainly take into account distance from basket.
reports should support multiple experiments.
should be better support for generating reports from command line with many sim runs.
Have a concept of "workspace settings". This is just a patch to apply to the TCF App on load. Then perhaps make a general TCF component. It can reflect on a provided set of editable settings. You could have sliders. For example, edit width
of side editor with SimEditorComponent 250 88
, or hide certain components. Could also be useful in Ohayo and Designer.
the 10 demo buttons at the top should all point to a very simple sim.
they should all be top level categories.
when you click one, the behavior should be the same as now, but also perhaps pop a dropdown menu, each with 10 more sims, progressively more advanced.
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.