# The Azimuth Project Ken Webb

Things that I’m interested in include:

• networks of all types, hierarchical organization of network nodes, and practical applications
• climate change, and “saving the planet”
• programming code that anyone can run in their browser, and that anyone can edit and extend in their browser
• approaches to software development that allow independently-developed apps to work together
• the relationship between computer-science object-oriented (OO) concepts and math concepts
• how everything is connected

I’ve been paying attention to the Azimuth Project because it parallels my own interests, but with a more math focus (math is not one of my strong points). As learning exercises, I’ve reimplemented a few of the applications mentioned on Azimuth pages. Some of my online workbooks (blog-like entries that are my way of taking active notes) were based on content at the Azimuth Project.

I have a BA in Cognitive Science from Carleton University in Ottawa (including lots of psychology courses), and an MSc in Evolutionary and Adaptive Systems from The University of Sussex in Brighton. I’ve worked for many years as a software developer and consultant, using numerous languages and approaches.

#### Azimuth Blogs

I’m working on a blog series: Connections: Petri nets, systems biology, and beyond

A draft of part 1 of the blog is here: Blog - connections: Petri nets and beyond (part 1).

An initial outline of part 2 of the blog is here: Blog - connections: Petri nets and beyond (part 2).

I’m also writing a page of notes about the Real-Time Object-Oriented Modeling (ROOM) approach: Real-time object-oriented modeling (ROOM)

Experiments:

Experiments in bigraphs

Experiments in bigraphs (part 2) - Bigraphical Reactive Systems

Experiments in Petri nets - Results from two different tools

• List of my online workbooks, all of which contain some sort of in-page editable app (sometimes trivial) usually implemented with JavaScript.

• List of some of my Java apps that can be run online. See especially the climate change and other models toward the end of the page.

• List of my publications.

• Example of an app where anyone can inject new XML structures and Java or JavaScript code while the app is running.

#### Petri nets

I’ve started building a Petri net modeling and simulation tool based partly on information available in the Azimuth Project and provided by people on the Azimuth Forum. Xholon Chameleon is written in Java and can be run online using Java Web Start (JNLP). Petri net models can be completely specified using XML.

The following models are currently available. To view the model source code (XML), with notes and instructions, click on the link. To run the model, select File –> Open in the Xholon Chameleon tool, and then drag the link to the Xholon Chameleon window.

To run the simulation, read the model notes and instructions, especially starting with step (4).

Feinberg - Chemical Reaction Networks - network 1.1

Petri nets - Jensen protocol example

Petri net - Climate model

Glycolysis Petri net, with mass action kinetics

Petri nets and Membrane Computing

Petri net - Cell model

Petri nets - various

A few notes on the Petri net models:

• If you drop or paste the link onto the Application node in the tree in the Xholon Chameleon window, then it will create the model in a new Application. Access the new app by clicking the Application menu at the top of the window.
• You can edit the XML source code with any text editor. Then drag and drop, or copy and paste, the entire edited XML content into the Xholon Chameleon window.
• My Xholon Workbook site provides online editors for the XML source code. Each of the model links above includes the github gist id for that model. Type that id into the input area on the Xholon Workbook page and click the “Open” button. For example, the workbook gist id for the “Feinberg - Chemical Reaction Networks” model is “3377668”.
• You could also open your own free github account and create your own gists based on mine. You could then drag and drop, or copy and paste, those (or links to them) directly into the Xholon Chameleon tool.
• Source code for the Xholon Chameleon tool is available at SourceForge. You can locate the Java source code for most nodes in the Xholon Chameleon tree, by right-clicking the node and selecting Search Engine –> Source code . For example, the source code for the Chameleon node (chameleon_0) is located here.
• Alternatively you can run the Xholon Chameleon tool with no security restrictions so additional non-essential features will work.
• The app writes informative text and error messages to the Java Console. To see these you will need to enable the Java Console.

To run the following models, drag the link until it’s directly on top of the Chameleon node (chameleon_0) in the Xholon Chameleon window. Unlike the models above, it can’t be dropped just anywhere in the window.

Differential equations generated by Xholon Chameleon for Feinberg network 1.1 (Mass Action kinetics assumed). To generate these, right-click the AnalysisCRN node and select “Show differential equations”:

$\frac{d}{dt}{a}_{7}=-\left(0.0039*{a}_{7}\right)+\left(0.0038*{b}_{8}^{2}\right)-\left(0.0037*{a}_{7}*{c}_{9}\right)+\left(0.0036*{d}_{10}\right)+\left(0.0034*{b}_{8}*{e}_{11}\right)$\frac{d}{d t} a_7 = -(0.0039*a_7) +(0.0038*b_8^2) -(0.0037*a_7*c_9) +(0.0036*d_10) +(0.0034*b_8*e_11)
$\frac{d}{dt}{b}_{8}=+\left(2*0.0039*{a}_{7}\right)-\left(2*0.0038*{b}_{8}^{2}\right)+\left(0.0035*{d}_{10}\right)-\left(0.0034*{b}_{8}*{e}_{11}\right)$\frac{d}{d t} b_8 = +(2*0.0039*a_7) -(2*0.0038*b_8^2) +(0.0035*d_10) -(0.0034*b_8*e_11)
$\frac{d}{dt}{c}_{9}=-\left(0.0037*{a}_{7}*{c}_{9}\right)+\left(0.0036*{d}_{10}\right)+\left(0.0034*{b}_{8}*{e}_{11}\right)$\frac{d}{d t} c_9 = -(0.0037*a_7*c_9) +(0.0036*d_10) +(0.0034*b_8*e_11)
$\frac{d}{dt}{d}_{10}=+\left(0.0037*{a}_{7}*{c}_{9}\right)-\left(0.0036*{d}_{10}\right)-\left(0.0035*{d}_{10}\right)$\frac{d}{d t} d_10 = +(0.0037*a_7*c_9) -(0.0036*d_10) -(0.0035*d_10)
$\frac{d}{dt}{e}_{11}=+\left(0.0035*{d}_{10}\right)-\left(0.0034*{b}_{8}*{e}_{11}\right)$\frac{d}{d t} e_11 = +(0.0035*d_10) -(0.0034*b_8*e_11)

OR

$\frac{d}{dt}{a}_{7}=-\left(\alpha *{a}_{7}\right)+\left(\beta *{b}_{8}^{2}\right)-\left(\gamma *{a}_{7}*{c}_{9}\right)+\left(\delta *{d}_{10}\right)+\left(\xi *{b}_{8}*{e}_{11}\right)$\frac{d}{d t} a_7 = -(\alpha*a_7) +(\beta*b_8^2) -(\gamma*a_7*c_9) +(\delta*d_10) +(\xi*b_8*e_11)
$\frac{d}{dt}{b}_{8}=+\left(2*\alpha *{a}_{7}\right)-\left(2*\beta *{b}_{8}^{2}\right)+\left(ϵ*{d}_{10}\right)-\left(\xi *{b}_{8}*{e}_{11}\right)$\frac{d}{d t} b_8 = +(2*\alpha*a_7) -(2*\beta*b_8^2) +(\epsilon*d_10) -(\xi*b_8*e_11)
$\frac{d}{dt}{c}_{9}=-\left(\gamma *{a}_{7}*{c}_{9}\right)+\left(\delta *{d}_{10}\right)+\left(\xi *{b}_{8}*{e}_{11}\right)$\frac{d}{d t} c_9 = -(\gamma*a_7*c_9) +(\delta*d_10) +(\xi*b_8*e_11)
$\frac{d}{dt}{d}_{10}=+\left(\gamma *{a}_{7}*{c}_{9}\right)-\left(\delta *{d}_{10}\right)-\left(ϵ*{d}_{10}\right)$\frac{d}{d t} d_10 = +(\gamma*a_7*c_9) -(\delta*d_10) -(\epsilon*d_10)
$\frac{d}{dt}{e}_{11}=+\left(ϵ*{d}_{10}\right)-\left(\xi *{b}_{8}*{e}_{11}\right)$\frac{d}{d t} e_11 = +(\epsilon*d_10) -(\xi*b_8*e_11)

OR

$\frac{d}{dt}A=-\alpha A+\beta {B}^{2}-\gamma \mathrm{AC}+\delta D+\xi \mathrm{BE}$\frac{d}{d t} A = -\alpha A +\beta B^2 -\gamma AC +\delta D +\xi BE
$\frac{d}{dt}B=+2\alpha A-2\beta {B}^{2}+ϵD-\xi \mathrm{BE}$\frac{d}{d t} B = +2\alpha A -2\beta B^2 +\epsilon D -\xi BE
$\frac{d}{dt}C=-\gamma \mathrm{AC}+\delta D+\xi \mathrm{BE}$\frac{d}{d t} C = -\gamma AC +\delta D +\xi BE
$\frac{d}{dt}D=+\gamma \mathrm{AC}-\delta D-ϵD$\frac{d}{d t} D = +\gamma AC -\delta D -\epsilon D
$\frac{d}{dt}E=+ϵD-\xi \mathrm{BE}$\frac{d}{d t} E = +\epsilon D -\xi BE

Differential equations generated by Xholon Chameleon for Feinberg network 2.44 (Mass Action kinetics assumed):

$\frac{d}{dt}{a}_{52}=-\left(0.0011*{a}_{52}\right)+\left(0.0012*{b}_{53}^{2}\right)-\left(0.0013*{a}_{52}\right)+\left(0.0014*{a}_{67}\right)$\frac{d}{d t} a_52 = -(0.0011*a_52) +(0.0012*b_53^2) -(0.0013*a_52) +(0.0014*a_67)
$\frac{d}{dt}{b}_{53}=+\left(2*0.0011*{a}_{52}\right)-\left(2*0.0012*{b}_{53}^{2}\right)-\left(0.0015*{b}_{53}\right)+\left(0.0016*{b}_{68}\right)$\frac{d}{d t} b_53 = +(2*0.0011*a_52) -(2*0.0012*b_53^2) -(0.0015*b_53) +(0.0016*b_68)
$\frac{d}{dt}{a}_{67}=-\left(0.0011*{a}_{67}\right)+\left(0.0012*{b}_{68}^{2}\right)+\left(0.0013*{a}_{52}\right)-\left(0.0014*{a}_{67}\right)$\frac{d}{d t} a_67 = -(0.0011*a_67) +(0.0012*b_68^2) +(0.0013*a_52) -(0.0014*a_67)
$\frac{d}{dt}{b}_{68}=+\left(2*0.0011*{a}_{67}\right)-\left(2*0.0012*{b}_{68}^{2}\right)+\left(0.0015*{b}_{53}\right)-\left(0.0016*{b}_{68}\right)$\frac{d}{d t} b_68 = +(2*0.0011*a_67) -(2*0.0012*b_68^2) +(0.0015*b_53) -(0.0016*b_68)

Differential equations generated by Xholon Chameleon for Glycolysis model:

$\frac{d}{dt}{\mathrm{glucose}}_{46}=-\left(0.01*{\mathrm{glucose}}_{46}\right)$\frac{d}{d t} glucose_46 = -(0.01*glucose_46)
$\frac{d}{dt}\mathrm{glucose}6{\mathrm{Phosphate}}_{47}=+\left(0.01*{\mathrm{glucose}}_{46}\right)-\left(0.01*\mathrm{glucose}6{\mathrm{Phosphate}}_{47}\right)$\frac{d}{d t} glucose6Phosphate_47 = +(0.01*glucose_46) -(0.01*glucose6Phosphate_47)
$\frac{d}{dt}\mathrm{fructose}6{\mathrm{Phosphate}}_{48}=+\left(0.01*\mathrm{glucose}6{\mathrm{Phosphate}}_{47}\right)-\left(0.01*\mathrm{fructose}6{\mathrm{Phosphate}}_{48}*{\mathrm{atp}}_{58}\right)$\frac{d}{d t} fructose6Phosphate_48 = +(0.01*glucose6Phosphate_47) -(0.01*fructose6Phosphate_48*atp_58)
$\frac{d}{dt}\mathrm{fructose}1x6{\mathrm{Biphosphate}}_{49}=+\left(0.01*\mathrm{fructose}6{\mathrm{Phosphate}}_{48}*{\mathrm{atp}}_{58}\right)-\left(0.01*\mathrm{fructose}1x6{\mathrm{Biphosphate}}_{49}\right)-\left(0.01*\mathrm{fructose}1x6{\mathrm{Biphosphate}}_{49}\right)$\frac{d}{d t} fructose1x6Biphosphate_49 = +(0.01*fructose6Phosphate_48*atp_58) -(0.01*fructose1x6Biphosphate_49) -(0.01*fructose1x6Biphosphate_49)
$\frac{d}{dt}{\mathrm{dihydroxyacetonePhosphate}}_{50}=+\left(0.01*\mathrm{fructose}1x6{\mathrm{Biphosphate}}_{49}\right)-\left(0.01*{\mathrm{dihydroxyacetonePhosphate}}_{50}\right)$\frac{d}{d t} dihydroxyacetonePhosphate_50 = +(0.01*fructose1x6Biphosphate_49) -(0.01*dihydroxyacetonePhosphate_50)
$\frac{d}{dt}\mathrm{glyceraldehyde}3{\mathrm{Phosphate}}_{51}=+\left(0.01*\mathrm{fructose}1x6{\mathrm{Biphosphate}}_{49}\right)+\left(0.01*{\mathrm{dihydroxyacetonePhosphate}}_{50}\right)-\left(0.01*\mathrm{glyceraldehyde}3{\mathrm{Phosphate}}_{51}\right)$\frac{d}{d t} glyceraldehyde3Phosphate_51 = +(0.01*fructose1x6Biphosphate_49) +(0.01*dihydroxyacetonePhosphate_50) -(0.01*glyceraldehyde3Phosphate_51)
$\frac{d}{dt}x1x3{\mathrm{BisphosphoGlycerate}}_{52}=+\left(0.01*\mathrm{glyceraldehyde}3{\mathrm{Phosphate}}_{51}\right)-\left(0.01*x1x3{\mathrm{BisphosphoGlycerate}}_{52}\right)$\frac{d}{d t} x1x3BisphosphoGlycerate_52 = +(0.01*glyceraldehyde3Phosphate_51) -(0.01*x1x3BisphosphoGlycerate_52)
$\frac{d}{dt}x3{\mathrm{PhosphoGlycerate}}_{53}=+\left(0.01*x1x3{\mathrm{BisphosphoGlycerate}}_{52}\right)-\left(0.01*x3{\mathrm{PhosphoGlycerate}}_{53}\right)$\frac{d}{d t} x3PhosphoGlycerate_53 = +(0.01*x1x3BisphosphoGlycerate_52) -(0.01*x3PhosphoGlycerate_53)
$\frac{d}{dt}x2\mathrm{PhosphoGlycerate}54=+\left(0.01*x3{\mathrm{PhosphoGlycerate}}_{53}\right)-\left(0.01*x2{\mathrm{PhosphoGlycerate}}_{54}\right)$\frac{d}{d t} x2PhosphoGlycerate54 = +(0.01*x3PhosphoGlycerate_53) -(0.01*x2PhosphoGlycerate_54)
$\frac{d}{dt}{\mathrm{phosphoEnolPyruvate}}_{55}=+\left(0.01*x2{\mathrm{PhosphoGlycerate}}_{54}\right)-\left(0.01*{\mathrm{phosphoEnolPyruvate}}_{55}*{\mathrm{adp}}_{57}\right)$\frac{d}{d t} phosphoEnolPyruvate_55 = +(0.01*x2PhosphoGlycerate_54) -(0.01*phosphoEnolPyruvate_55*adp_57)
$\frac{d}{dt}{\mathrm{pyruvate}}_{56}=+\left(0.01*{\mathrm{phosphoEnolPyruvate}}_{55}*{\mathrm{adp}}_{57}\right)$\frac{d}{d t} pyruvate_56 = +(0.01*phosphoEnolPyruvate_55*adp_57)
$\frac{d}{dt}{\mathrm{adp}}_{57}=+\left(0.01*\mathrm{fructose}6{\mathrm{Phosphate}}_{48}*{\mathrm{atp}}_{58}\right)-\left(0.01*{\mathrm{phosphoEnolPyruvate}}_{55}*{\mathrm{adp}}_{57}\right)$\frac{d}{d t} adp_57 = +(0.01*fructose6Phosphate_48*atp_58) -(0.01*phosphoEnolPyruvate_55*adp_57)
$\frac{d}{dt}{\mathrm{atp}}_{58}=-\left(0.01*\mathrm{fructose}6{\mathrm{Phosphate}}_{48}*{\mathrm{atp}}_{58}\right)+\left(0.01*{\mathrm{phosphoEnolPyruvate}}_{55}*{\mathrm{adp}}_{57}\right)$\frac{d}{d t} atp_58 = -(0.01*fructose6Phosphate_48*atp_58) +(0.01*phosphoEnolPyruvate_55*adp_57)

MathML generated by Xholon:

$\begin{array}{ccc}\frac{d\left(A\right)}{dt}& =& -\left(0.0039·A\right)+\left(0.0038·{B}^{2}\right)-\left(0.0037·A·C\right)+\left(0.0036·D\right)+\left(0.0034·B·E\right)\hfill \\ \frac{d\left(B\right)}{dt}& =& +\left(2·0.0039·A\right)-\left(2·0.0038·{B}^{2}\right)+\left(0.0035·D\right)-\left(0.0034·B·E\right)\hfill \\ \frac{d\left(C\right)}{dt}& =& -\left(0.0037·A·C\right)+\left(0.0036·D\right)+\left(0.0034·B·E\right)\hfill \\ \frac{d\left(D\right)}{dt}& =& +\left(0.0037·A·C\right)-\left(0.0036·D\right)-\left(0.0035·D\right)\hfill \\ \frac{d\left(E\right)}{dt}& =& +\left(0.0035·D\right)-\left(0.0034·B·E\right)\hfill \end{array}$

Differential equations generated by COPASI, an SBML tool, from Xholon-generated SBML content.

$\begin{array}{ccc}\frac{d\left(\mathrm{\left[A\right]}·{V}_{\mathrm{pot}}\right)}{dt}& =& -{V}_{\mathrm{pot}}·\left(0.0039·\mathrm{\left[A\right]}\right)\hfill \\ & & +{V}_{\mathrm{pot}}·\left(0.0038·\mathrm{\left[B\right]}·\mathrm{\left[B\right]}\right)\hfill \\ & & -{V}_{\mathrm{pot}}·\left(0.0037·\mathrm{\left[A\right]}·\mathrm{\left[C\right]}\right)\hfill \\ & & +{V}_{\mathrm{pot}}·\left(0.0036·\mathrm{\left[D\right]}\right)\hfill \\ & & +{V}_{\mathrm{pot}}·\left(0.0034·\mathrm{\left[B\right]}·\mathrm{\left[E\right]}\right)\hfill \\ \frac{d\left(\mathrm{\left[B\right]}·{V}_{\mathrm{pot}}\right)}{dt}& =& +2·{V}_{\mathrm{pot}}·\left(0.0039·\mathrm{\left[A\right]}\right)\hfill \\ & & -2·{V}_{\mathrm{pot}}·\left(0.0038·\mathrm{\left[B\right]}·\mathrm{\left[B\right]}\right)\hfill \\ & & +{V}_{\mathrm{pot}}·\left(0.0035·\mathrm{\left[D\right]}\right)\hfill \\ & & -{V}_{\mathrm{pot}}·\left(0.0034·\mathrm{\left[B\right]}·\mathrm{\left[E\right]}\right)\hfill \\ \frac{d\left(\mathrm{\left[C\right]}·{V}_{\mathrm{pot}}\right)}{dt}& =& -{V}_{\mathrm{pot}}·\left(0.0037·\mathrm{\left[A\right]}·\mathrm{\left[C\right]}\right)\hfill \\ & & +{V}_{\mathrm{pot}}·\left(0.0036·\mathrm{\left[D\right]}\right)\hfill \\ & & +{V}_{\mathrm{pot}}·\left(0.0034·\mathrm{\left[B\right]}·\mathrm{\left[E\right]}\right)\hfill \\ \frac{d\left(\mathrm{\left[D\right]}·{V}_{\mathrm{pot}}\right)}{dt}& =& +{V}_{\mathrm{pot}}·\left(0.0037·\mathrm{\left[A\right]}·\mathrm{\left[C\right]}\right)\hfill \\ & & -{V}_{\mathrm{pot}}·\left(0.0036·\mathrm{\left[D\right]}\right)\hfill \\ & & -{V}_{\mathrm{pot}}·\left(0.0035·\mathrm{\left[D\right]}\right)\hfill \\ \frac{d\left(\mathrm{\left[E\right]}·{V}_{\mathrm{pot}}\right)}{dt}& =& +{V}_{\mathrm{pot}}·\left(0.0035·\mathrm{\left[D\right]}\right)\hfill \\ & & -{V}_{\mathrm{pot}}·\left(0.0034·\mathrm{\left[B\right]}·\mathrm{\left[E\right]}\right)\hfill \end{array}$

#### Contact

My contact information is embedded inside the following.

@QWERTYUIk
OPASmDFGHe
primordion
JKLZcXCVB.

category: members