Conversation
kris-brown
left a comment
There was a problem hiding this comment.
Hi, I haven't gotten to the rules part, but here are some initial thoughts on the beginning!
| # pattern to be matched in the existing state of the world ("Before"), R is the output | ||
| # pattern that should exist going forward ("After") and I is the pattern of items in the | ||
| # input match which should carry over into the output match. | ||
| # |
There was a problem hiding this comment.
Somewhere between this first and second paragraph of this section, you should introduce the concept (perhaps even at just an intuitive level) of what an "ACSet Transformation" is, since if I'm not mistaken I don't see it introduced anywhere else but it gets highly used.
There was a problem hiding this comment.
Added a line. May want to discuss audience expectations in a larger sense.
| death_abm_rule = ABMRule(:Death, death, ContinuousHazard(1)); | ||
|
|
||
| people_only_abm = ABM([birth_abm_rule, death_abm_rule]); | ||
|
|
There was a problem hiding this comment.
Do you want to show a plot here of the population just to make this point before going to the more complicated ABM?
There was a problem hiding this comment.
Great minds think alike. I'll add it back in once we have SPO.
There was a problem hiding this comment.
Heads up I don't see this added back in!
There was a problem hiding this comment.
Added some graphs of the people only ABM (with and without firms).
| # Since the ACSet rewrite rules are defined using ACSet instances and the homomorphisms (or ACSet Transformations) between | ||
| # them, it will be useful to revise [Catlab.jl](https://github.com/AlgebraicJulia/Catlab.jl) and | ||
| # [AlgebraicRewriting.jl](https://github.com/AlgebraicJulia/AlgebraicRewriting.jl) functions for creating them. | ||
| # In practice, the rules below are defined using identitiy morphisms on coproducts of representables and homomorphism search for unique homomorphisms |
| # Since the ACSet rewrite rules are defined using ACSet instances and the homomorphisms (or ACSet Transformations) between | ||
| # them, it will be useful to revise [Catlab.jl](https://github.com/AlgebraicJulia/Catlab.jl) and | ||
| # [AlgebraicRewriting.jl](https://github.com/AlgebraicJulia/AlgebraicRewriting.jl) functions for creating them. | ||
| # In practice, the rules below are defined using identitiy morphisms on coproducts of representables and homomorphism search for unique homomorphisms |
There was a problem hiding this comment.
Seems a bit much to throw technical terms like "coproducts of representables" and "homomorphism search" at them without context in the "Background" section (at least with ACSets you have a link to the Github which has a public-friendly README, but even with that I wouldn't count on people clicking the link ... rather they might just end up confused / thinking this post isn't for them).
There was a problem hiding this comment.
Agree. Killed that sentence.
| # between them. | ||
| # | ||
| # ## Schema | ||
| # We define our Schema "from scratch" by specifying the types of objects in our model and the mappings |
There was a problem hiding this comment.
Hm this post doesn't talk about any other ways to define a schema so "from scratch" might not make sense (not clear what you're contrasting it with) - I think what you wrote makes sense without that qualifier.
| # | ||
| # ## Schema | ||
| # We define our Schema "from scratch" by specifying the types of objects in our model and the mappings | ||
| # (or "homomorphisms") between them. |
There was a problem hiding this comment.
I don't know if 'mapping' or 'homomorphism' is the right term to use here (of course, they're both unambiguously fine to use among people who know what they're talking about!). To see my worry: if you ctrl+f "mapping" or "homomorphism" in the rest of the blog post, it gets used exclusively to mean C-Set homomorphism, which is very different from an arrow in the schema. Maybe when introducing it you could say that declaring a schema is declaring the types of objects/entities (denoted by Ob in the code below) and the functional relationships between them (denoted by Hom). There's a risk someone becomes confused ("why is it called Hom?") but I worry about the other kind of confusion more.
| # functions. As an alternative, we can specify some basic elements of our instances by | ||
| # taking the freely constucted minimal example of each of our entities ("objects" - but | ||
| # not in the sense of Object-Oriented Programming). This creates a "generic" instance | ||
| # of the chosen entity, which in particular doesn't force any two objects to be the same |
There was a problem hiding this comment.
This is a different use of 'object' than the sentence which immediately precedes it (the free instance does not force any two parts to be the same ... e.g. E and V are objects in SchGraph but V#1 and V#2 of a particular graph are parts). I don't know if anyone who hasn't worked a lot with ACSets before will quite understand this sentence anyways (saying that it's generic might be enough to communicate to readers what a representable is, and the examples to follow will solidify their intuition).
There was a problem hiding this comment.
Changing to "parts" - would you recommend dropping that clause entirely? I don't know that "freely constructed" will convey that fully to users.
| death_abm_rule = ABMRule(:Death, death, ContinuousHazard(1)); | ||
|
|
||
| people_only_abm = ABM([birth_abm_rule, death_abm_rule]); | ||
|
|
There was a problem hiding this comment.
Heads up I don't see this added back in!
| id(P⊕F) | ||
| ); | ||
|
|
||
| # We assume at first that hiring and firing occur at constant rates. |
There was a problem hiding this comment.
add a semicolon here in order to prevent it from printing out an ABM (which looks massive/ugly because we don't pretty print that data structure)
| end | ||
| ) |> ClosureState; | ||
|
|
||
| full_abm = @pipe constant_job_dynamics_abm |> |
| ) # hide | ||
| end # hide | ||
|
|
||
| plot_beveridge_curve(result) # hide No newline at end of file |
There was a problem hiding this comment.
Could you explain very briefly (provide a link) what Beveridge is?
Also a concluding sentence would be nice so that the piece doesn't abruptly end!
…wing an error with the versions of other libraries that I'm using.

Any and all comments welcome.