| … | … | @@ -18,10 +18,11 @@ of relationships: "friends" and "strangers". It adopts a simple SEIR |
| 18 | 18 | model of disease transmission and progression along this network. |
| 19 | 19 | The model itself is a (simple) hand-coded state-transition machine. |
| 20 | 20 | |
| 21 | | The |
| 21 | There is a |
| 22 | 22 | [blog post](https://blog.opencog.org/2020/04/22/covid-19-modelling-and-random-social-networks/) |
| 23 | | about this demo might be the easiest way to quickly gain an |
| 24 | | understanding of the central ideas. |
| 23 | that reviews this demo. It touches on the high-lites of the demo, |
| 24 | avoiding all of the grunge needed to get actual, working code. Thus, |
| 25 | reading it is recommended before diving into the code. |
| 25 | 26 | |
| 26 | 27 | |
| 27 | 28 | Making this Useful |
| … | … | @@ -34,16 +35,31 @@ CytoScape or Gephi, but it won't be animated as the disease spreads. |
| 34 | 35 | |
| 35 | 36 | There's no statistical analysis performed, and no graphs or curves are |
| 36 | 37 | drawn. The demo shows how to generate the raw data, not how to analyze |
| 37 | | raw data. |
| 38 | raw data. There are plenty of tools designed for statistical analysis. |
| 39 | Use those. |
| 40 | |
| 41 | A few notes about scheme, python and Atomese. This demo would appear |
| 42 | to be written ins scheme. It could have just as eassily been written |
| 43 | in python, without changing it's basic form (the AtomSpace has python |
| 44 | bindings.) It may seem hard to beleive, but the choice of language |
| 45 | doesn't really much matter. That's because all of the hard work is |
| 46 | done in Atomese. |
| 38 | 47 | |
| 39 | | Altering the disease progression model is not particularly easy. It is |
| 40 | | written in Atomese, which is rather verbose, and programming in |
| 41 | | Atomese is, in many ways, like programming in assembly code. This is |
| 42 | | perhaps the most important thing to understand about this demo. |
| 43 | 48 | Atomese is a graphical programming language, and it was designed for |
| 44 | | automation. This means that the graphs, and the Atomese code, is meant |
| 45 | | to be easy for other algorithms to manipulate. It's designed for other |
| 46 | | machines, not for humans :-! |
| 49 | automation. Atomese expressions are graphs; they live as graphs in the |
| 50 | AtomSpace graph database. Atomese encodes a type of "Abstract Syntax |
| 51 | Tree" (see [Wikipedia](https://en.wikipedia.org/wiki/Abstract_syntax_tree)) |
| 52 | and such a representation is useful for all of the reasons that the |
| 53 | Wikipedia article says they are. But it also means that "coding" in |
| 54 | Atomese can sometimes feel unusual. Like: "Why can't I just code in |
| 55 | python? It would be so much easier!" -- Well, but that misses the |
| 56 | point. And the point is, again: Atomese was designed for automation. |
| 57 | |
| 58 | What this really means that the graphs are meant to be easy for other |
| 59 | algorithms to manipulate. It's designed for ease-of-use by machines, |
| 60 | not for humans! The style is more barren, unadorned, without |
| 61 | short-cuts. Its a bit verbose at times. That's OK, machines don't mind |
| 62 | verbosity and tedium. |
| 47 | 63 | |
| 48 | 64 | Consider, for example, a graphical editor - something where you can |
| 49 | 65 | drag-n-drop, hand-draw interacting bubble diagrams. Something easy |
| … | … | @@ -53,15 +69,21 @@ with bubbles and lines and flow-charts. The goal of Atomese is that |
| 53 | 69 | it becomes easy -- really easy -- to convert such diagrams into |
| 54 | 70 | executable code. That's what Atomese is designed to do. |
| 55 | 71 | |
| 56 | | Another possibility is that of an automatic model explorer: a system |
| 57 | | that automatically creates a variety of different models, and then |
| 58 | | explores how well each model works. The automatic generator could, |
| 59 | | for example, mutate the best models and see if even better-fitting |
| 60 | | models can be obtained, searching for a best-fit. The goal of Atomese |
| 61 | | is that it becomes very easy for such models to be generated and run. |
| 62 | | The verboseness of Atomese is no longer a problem; the simple |
| 63 | | programming language it implements is easy for other tools to |
| 64 | | manipulate and control. That's what it's good for. |
| 72 | In this demo, the disease progression model is written in Atomese. |
| 73 | This is the model that a graphical GUI WYSIWYG whizz-bang system |
| 74 | would generate. |
| 75 | |
| 76 | Atomese enables other, more abstract approaches. Consider an automatic |
| 77 | model explorer: a system that automatically creates a variety of |
| 78 | different disease progression models, and then explores how each |
| 79 | model works. The model generator might try to fit an existing dataset. |
| 80 | Alternately, it could mutate models so as to obtain certain |
| 81 | characteristics. This moves beyond just adjusting some parameters |
| 82 | in some hand-created, hypothesized model. This is not just some |
| 83 | monte-carlo search or machine-learning hill-climbing for paramter |
| 84 | tuning. This is a whole-sale creation of previously non-existant |
| 85 | code. Atomese allows software to read, understand, mutate, modify |
| 86 | and write programs. |
| 65 | 87 | |
| 66 | 88 | Thus, in reading the code, keep in mind that there is nothing special |
| 67 | 89 | about the SEIR model; its a stand-in for what could be a generic, |