Skip to content

Commit

Permalink
Add demo of unit normalization
Browse files Browse the repository at this point in the history
  • Loading branch information
bgyori committed Jul 10, 2023
1 parent c2c28f6 commit 0da01e9
Showing 1 changed file with 132 additions and 28 deletions.
160 changes: 132 additions & 28 deletions notebooks/hackathon_2023.07/scenario1.ipynb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"id": "c947d97c",
"metadata": {},
Expand Down Expand Up @@ -35,34 +34,34 @@
"metadata": {},
"outputs": [],
"source": [
"person_units = Unit(expression=sympy.Symbol('person'))\n",
"day_units = Unit(expression=sympy.Symbol('day'))\n",
"per_day_units = Unit(expression=1/sympy.Symbol('day'))\n",
"dimensionless_units = Unit(expression=sympy.Integer('1'))\n",
"per_day_per_person_units = Unit(expression=1/(sympy.Symbol('day')*sympy.Symbol('person')))\n",
"person_units = lambda: Unit(expression=sympy.Symbol('person'))\n",
"day_units = lambda: Unit(expression=sympy.Symbol('day'))\n",
"per_day_units = lambda: Unit(expression=1/sympy.Symbol('day'))\n",
"dimensionless_units = lambda: Unit(expression=sympy.Integer('1'))\n",
"per_day_per_person_units = lambda: Unit(expression=1/(sympy.Symbol('day')*sympy.Symbol('person')))\n",
"\n",
"c = {\n",
" 'S': Concept(name='S', units=person_units, identifiers={'ido': '0000514'}),\n",
" 'E': Concept(name='E', units=person_units, identifiers={'apollosv': '0000154'}),\n",
" 'I': Concept(name='I', units=person_units, identifiers={'ido': '0000511'}),\n",
" 'R': Concept(name='R', units=person_units, identifiers={'ido': '0000592'}),\n",
" 'D': Concept(name='D', units=person_units, identifiers={'ncit': 'C28554'}),\n",
" 'S': Concept(name='S', units=person_units(), identifiers={'ido': '0000514'}),\n",
" 'E': Concept(name='E', units=person_units(), identifiers={'apollosv': '0000154'}),\n",
" 'I': Concept(name='I', units=person_units(), identifiers={'ido': '0000511'}),\n",
" 'R': Concept(name='R', units=person_units(), identifiers={'ido': '0000592'}),\n",
" 'D': Concept(name='D', units=person_units(), identifiers={'ncit': 'C28554'}),\n",
"}\n",
"\n",
"\n",
"parameters = {\n",
" 'gamma': Parameter(name='gamma', value=1/11, units=per_day_units),\n",
" 'delta': Parameter(name='delta', value=1/5, units=per_day_units),\n",
" 'alpha': Parameter(name='alpha', value=0.000064, units=dimensionless_units),\n",
" 'rho': Parameter(name='rho', value=1/9, units=per_day_units),\n",
" 'N': Parameter(name='N', value=5_600_000, units=person_units),\n",
" 'beta_s': Parameter(name='beta_s', value=1, units=per_day_per_person_units),\n",
" 'beta_c': Parameter(name='beta_c', value=0.4, units=per_day_per_person_units),\n",
" 't_0': Parameter(name='t_0', value=89, unts=day_units, units=day_units),\n",
" 'gamma': Parameter(name='gamma', value=1/11, units=per_day_units()),\n",
" 'delta': Parameter(name='delta', value=1/5, units=per_day_units()),\n",
" 'alpha': Parameter(name='alpha', value=0.000064, units=dimensionless_units()),\n",
" 'rho': Parameter(name='rho', value=1/9, units=per_day_units()),\n",
" 'N': Parameter(name='N', value=5_600_000, units=person_units()),\n",
" 'beta_s': Parameter(name='beta_s', value=1, units=per_day_per_person_units()),\n",
" 'beta_c': Parameter(name='beta_c', value=0.4, units=per_day_per_person_units()),\n",
" 't_0': Parameter(name='t_0', value=89, unts=day_units, units=day_units()),\n",
" # D=11, gamma = 1/D, R_0 = 5 and\n",
" # beta = R_0 * gamma * mask(t) so kappa = 5/11\n",
" 'kappa': Parameter(name='kappa', value=5/11, units=per_day_units),\n",
" 'k': Parameter(name='k', value=5.0, units=dimensionless_units),\n",
" 'kappa': Parameter(name='kappa', value=5/11, units=per_day_units()),\n",
" 'k': Parameter(name='k', value=5.0, units=dimensionless_units()),\n",
"}\n",
"\n",
"initials = {\n",
Expand Down Expand Up @@ -113,14 +112,13 @@
" templates=templates,\n",
" parameters=parameters,\n",
" initials=initials,\n",
" time=Time(name='t', units=day_units),\n",
" time=Time(name='t', units=day_units()),\n",
" annotations=Annotations(name='Scenario 1a')\n",
")\n",
"AskeNetPetriNetModel(Model(tm)).to_json_file('scenario1_a.json')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "48e4ed6a",
"metadata": {},
Expand All @@ -140,9 +138,9 @@
"outputs": [],
"source": [
"k_1, k_2, t_1, beta_nc = sympy.symbols('k_1 k_2 t_1 beta_nc')\n",
"parameters['k_1'] = Parameter(name='k_1', value=5.0, units=dimensionless_units)\n",
"parameters['k_2'] = Parameter(name='k_2', value=1.0, units=dimensionless_units)\n",
"parameters['t_1'] = Parameter(name='t_1', value=154, units=day_units)\n",
"parameters['k_1'] = Parameter(name='k_1', value=5.0, units=dimensionless_units())\n",
"parameters['k_2'] = Parameter(name='k_2', value=1.0, units=dimensionless_units())\n",
"parameters['t_1'] = Parameter(name='t_1', value=154, units=day_units())\n",
"parameters['beta_nc'] = Parameter(name='beta_nc', value=0.5)\n",
"tm.parameters = parameters\n",
"tm.annotations = Annotations(name='Scenario 1c')\n",
Expand Down Expand Up @@ -194,7 +192,6 @@
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "6e3374f9",
"metadata": {},
Expand All @@ -211,7 +208,7 @@
"outputs": [],
"source": [
"epsilon = sympy.Symbol('epsilon')\n",
"parameters['epsilon'] = Parameter(name='epsilon', value=1/90, units=per_day_units)\n",
"parameters['epsilon'] = Parameter(name='epsilon', value=1/90, units=per_day_units())\n",
"tm.parameters = parameters\n",
"tm.annotations = Annotations(name='Scenario 1d')\n",
"t5 = NaturalConversion(subject=c['R'],\n",
Expand All @@ -228,6 +225,113 @@
"source": [
"AskeNetPetriNetModel(Model(tm)).to_json_file('scenario1_d.json')"
]
},
{
"cell_type": "markdown",
"id": "331881de",
"metadata": {},
"source": [
"## Demo unit normalization"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "8378dfd6",
"metadata": {},
"outputs": [],
"source": [
"tm_norm = counts_to_dimensionless(tm, 'person', 5_600_000)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "c6145e96",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'S': Initial(concept=Concept(name='S', display_name=None, description=None, identifiers={}, context={}, units=None), value=0.999999821428571),\n",
" 'E': Initial(concept=Concept(name='E', display_name=None, description=None, identifiers={}, context={}, units=None), value=1.78571428571429e-7),\n",
" 'I': Initial(concept=Concept(name='I', display_name=None, description=None, identifiers={}, context={}, units=None), value=0),\n",
" 'R': Initial(concept=Concept(name='R', display_name=None, description=None, identifiers={}, context={}, units=None), value=0),\n",
" 'D': Initial(concept=Concept(name='D', display_name=None, description=None, identifiers={}, context={}, units=None), value=0)}"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tm_norm.initials"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "8e677ddc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'gamma': Parameter(name='gamma', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.09090909090909091, distribution=None),\n",
" 'delta': Parameter(name='delta', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.2, distribution=None),\n",
" 'alpha': Parameter(name='alpha', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=6.4e-05, distribution=None),\n",
" 'rho': Parameter(name='rho', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.1111111111111111, distribution=None),\n",
" 'N': Parameter(name='N', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=1.00000000000000, distribution=None),\n",
" 'beta_s': Parameter(name='beta_s', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=5600000.00000000, distribution=None),\n",
" 'beta_c': Parameter(name='beta_c', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=2240000.00000000, distribution=None),\n",
" 't_0': Parameter(name='t_0', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=day), value=89.0, distribution=None),\n",
" 'kappa': Parameter(name='kappa', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.45454545454545453, distribution=None),\n",
" 'k': Parameter(name='k', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=5.0, distribution=None),\n",
" 'k_1': Parameter(name='k_1', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=5.0, distribution=None),\n",
" 'k_2': Parameter(name='k_2', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=1.0, distribution=None),\n",
" 't_1': Parameter(name='t_1', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=day), value=154.0, distribution=None),\n",
" 'beta_nc': Parameter(name='beta_nc', display_name=None, description=None, identifiers={}, context={}, units=None, value=0.5, distribution=None),\n",
" 'epsilon': Parameter(name='epsilon', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.011111111111111112, distribution=None)}"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tm_norm.parameters"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "76f927b7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"ControlledConversion(rate_law=kappa*(beta_nc + (beta_c - beta_nc)/(1 + exp(-k_2*(-t + t_1))) + (-beta_c + beta_s)/(1 + exp(-k_1*(-t + t_0)))), type='ControlledConversion', controller=Concept(name='I', display_name=None, description=None, identifiers={'ido': '0000511'}, context={}, units=Unit(expression=1)), subject=Concept(name='S', display_name=None, description=None, identifiers={'ido': '0000514'}, context={}, units=Unit(expression=1)), outcome=Concept(name='E', display_name=None, description=None, identifiers={'apollosv': '0000154'}, context={}, units=Unit(expression=1)), provenance=[])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tm_norm.templates[0]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "831f2be9",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
Expand Down

0 comments on commit 0da01e9

Please sign in to comment.