<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1d3 20150301//EN" "http://jats.nlm.nih.gov/publishing/1.1d3/JATS-journalpublishing1.dtd">
<article article-type="research-article" dtd-version="1.1d3" xml:lang="en" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">PLoS Comput Biol</journal-id>
<journal-id journal-id-type="publisher-id">plos</journal-id>
<journal-id journal-id-type="pmc">ploscomp</journal-id>
<journal-title-group>
<journal-title>PLOS Computational Biology</journal-title>
</journal-title-group>
<issn pub-type="ppub">1553-734X</issn>
<issn pub-type="epub">1553-7358</issn>
<publisher>
<publisher-name>Public Library of Science</publisher-name>
<publisher-loc>San Francisco, CA USA</publisher-loc>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">PCOMPBIOL-D-17-02046</article-id>
<article-id pub-id-type="doi">10.1371/journal.pcbi.1006244</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Research Article</subject>
</subj-group>
<subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Biochemistry</subject><subj-group><subject>Biochemical simulations</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Computational biology</subject><subj-group><subject>Biochemical simulations</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Evolutionary biology</subject><subj-group><subject>Evolutionary genetics</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Developmental biology</subject><subj-group><subject>Evolutionary developmental biology</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Evolutionary biology</subject><subj-group><subject>Evolutionary developmental biology</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Evolutionary biology</subject><subj-group><subject>Evolutionary immunology</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Genetics</subject><subj-group><subject>DNA</subject><subj-group><subject>Operons</subject><subj-group><subject>lac operon</subject></subj-group></subj-group></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Biochemistry</subject><subj-group><subject>Nucleic acids</subject><subj-group><subject>DNA</subject><subj-group><subject>Operons</subject><subj-group><subject>lac operon</subject></subj-group></subj-group></subj-group></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Biophysics</subject><subj-group><subject>Biophysical simulations</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Physical sciences</subject><subj-group><subject>Physics</subject><subj-group><subject>Biophysics</subject><subj-group><subject>Biophysical simulations</subject></subj-group></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Computational biology</subject><subj-group><subject>Biophysical simulations</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Genetics</subject><subj-group><subject>Gene expression</subject></subj-group></subj-group></subj-group><subj-group subj-group-type="Discipline-v3"><subject>Biology and life sciences</subject><subj-group><subject>Evolutionary biology</subject><subj-group><subject>Evolutionary processes</subject><subj-group><subject>Evolutionary adaptation</subject></subj-group></subj-group></subj-group></subj-group></article-categories>
<title-group>
<article-title><italic>φ</italic>-evo: A program to evolve phenotypic models of biological networks</article-title>
<alt-title alt-title-type="running-head"><italic>φ</italic>-evo: A program to evolve phenotypic models of biological networks</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" xlink:type="simple">
<contrib-id authenticated="true" contrib-id-type="orcid">http://orcid.org/0000-0002-4048-3241</contrib-id>
<name name-style="western">
<surname>Henry</surname> <given-names>Adrien</given-names></name>
<role content-type="http://credit.casrai.org/">Formal analysis</role>
<role content-type="http://credit.casrai.org/">Investigation</role>
<role content-type="http://credit.casrai.org/">Software</role>
<role content-type="http://credit.casrai.org/">Validation</role>
<role content-type="http://credit.casrai.org/">Writing – review &amp; editing</role>
<xref ref-type="aff" rid="aff001"/>
</contrib>
<contrib contrib-type="author" xlink:type="simple">
<contrib-id authenticated="true" contrib-id-type="orcid">http://orcid.org/0000-0003-2963-7067</contrib-id>
<name name-style="western">
<surname>Hemery</surname> <given-names>Mathieu</given-names></name>
<role content-type="http://credit.casrai.org/">Formal analysis</role>
<role content-type="http://credit.casrai.org/">Investigation</role>
<role content-type="http://credit.casrai.org/">Software</role>
<role content-type="http://credit.casrai.org/">Validation</role>
<role content-type="http://credit.casrai.org/">Writing – review &amp; editing</role>
<xref ref-type="aff" rid="aff001"/>
</contrib>
<contrib contrib-type="author" corresp="yes" xlink:type="simple">
<contrib-id authenticated="true" contrib-id-type="orcid">http://orcid.org/0000-0002-2223-839X</contrib-id>
<name name-style="western">
<surname>François</surname> <given-names>Paul</given-names></name>
<role content-type="http://credit.casrai.org/">Conceptualization</role>
<role content-type="http://credit.casrai.org/">Formal analysis</role>
<role content-type="http://credit.casrai.org/">Funding acquisition</role>
<role content-type="http://credit.casrai.org/">Investigation</role>
<role content-type="http://credit.casrai.org/">Methodology</role>
<role content-type="http://credit.casrai.org/">Project administration</role>
<role content-type="http://credit.casrai.org/">Software</role>
<role content-type="http://credit.casrai.org/">Supervision</role>
<role content-type="http://credit.casrai.org/">Validation</role>
<role content-type="http://credit.casrai.org/">Writing – original draft</role>
<role content-type="http://credit.casrai.org/">Writing – review &amp; editing</role>
<xref ref-type="aff" rid="aff001"/>
<xref ref-type="corresp" rid="cor001">*</xref>
</contrib>
</contrib-group>
<aff id="aff001">
<addr-line>Physics Department, McGill University, Montreal, Québec, Canada</addr-line>
</aff>
<contrib-group>
<contrib contrib-type="editor" xlink:type="simple">
<name name-style="western">
<surname>Schneidman</surname> <given-names>Dina</given-names></name>
<role>Editor</role>
<xref ref-type="aff" rid="edit1"/>
</contrib>
</contrib-group>
<aff id="edit1">
<addr-line>Hebrew University of Jerusalem, ISRAEL</addr-line>
</aff>
<author-notes>
<fn fn-type="conflict" id="coi001">
<p>The authors have declared that no competing interests exist.</p>
</fn>
<corresp id="cor001">* E-mail: <email xlink:type="simple">paulf@physics.mcgill.ca</email></corresp>
</author-notes>
<pub-date pub-type="collection">
<month>6</month>
<year>2018</year>
</pub-date>
<pub-date pub-type="epub">
<day>11</day>
<month>6</month>
<year>2018</year>
</pub-date>
<volume>14</volume>
<issue>6</issue>
<elocation-id>e1006244</elocation-id>
<history>
<date date-type="received">
<day>7</day>
<month>12</month>
<year>2017</year>
</date>
<date date-type="accepted">
<day>30</day>
<month>5</month>
<year>2018</year>
</date>
</history>
<permissions>
<copyright-year>2018</copyright-year>
<copyright-holder>Henry et al</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/" xlink:type="simple">
<license-p>This is an open access article distributed under the terms of the <ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/" xlink:type="simple">Creative Commons Attribution License</ext-link>, which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited.</license-p>
</license>
</permissions>
<self-uri content-type="pdf" xlink:href="info:doi/10.1371/journal.pcbi.1006244"/>
<abstract>
<p>Molecular networks are at the core of most cellular decisions, but are often difficult to comprehend. Reverse engineering of network architecture from their functions has proved fruitful to classify and predict the structure and function of molecular networks, suggesting new experimental tests and biological predictions. We present <italic>φ</italic>-evo, an open-source program to evolve <italic>in silico</italic> phenotypic networks performing a given biological function. We include implementations for evolution of biochemical adaptation, adaptive sorting for immune recognition, metazoan development (somitogenesis, hox patterning), as well as Pareto evolution. We detail the program architecture based on <monospace>C</monospace>, <monospace>Python 3</monospace>, and a <monospace>Jupyter</monospace> interface for project configuration and network analysis. We illustrate the predictive power of <italic>φ</italic>-evo by first recovering the asymmetrical structure of the <italic>lac</italic> operon regulation from an objective function with symmetrical constraints. Second, we use the problem of hox-like embryonic patterning to show how a single effective fitness can emerge from multi-objective (Pareto) evolution. <italic>φ</italic>-evo provides an efficient approach and user-friendly interface for the phenotypic prediction of networks and the numerical study of evolution itself.</p>
</abstract>
<funding-group>
<award-group id="award001">
<funding-source>
<institution-wrap>
<institution-id institution-id-type="funder-id">http://dx.doi.org/10.13039/100000893</institution-id>
<institution>Simons Foundation</institution>
</institution-wrap>
</funding-source>
<principal-award-recipient>
<contrib-id authenticated="true" contrib-id-type="orcid">http://orcid.org/0000-0002-2223-839X</contrib-id>
<name name-style="western">
<surname>Francois</surname> <given-names>Paul</given-names></name>
</principal-award-recipient>
</award-group>
<funding-statement>This work has been supported by a Simons Investigator MMLS award to Paul François. <ext-link ext-link-type="uri" xlink:href="http://simonsfoundation.org/" xlink:type="simple">http://simonsfoundation.org/</ext-link>. The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript.</funding-statement>
</funding-group>
<counts>
<fig-count count="4"/>
<table-count count="0"/>
<page-count count="12"/>
</counts>
<custom-meta-group>
<custom-meta>
<meta-name>PLOS Publication Stage</meta-name>
<meta-value>vor-update-to-uncorrected-proof</meta-value>
</custom-meta>
<custom-meta>
<meta-name>Publication Update</meta-name>
<meta-value>2018-06-21</meta-value>
</custom-meta>
<custom-meta id="data-availability">
<meta-name>Data Availability</meta-name>
<meta-value>All relevant data are within the paper and its Supporting Information files.</meta-value>
</custom-meta>
</custom-meta-group>
</article-meta>
</front>
<body>
<disp-quote><p>This is a <italic>PLOS Computational Biology</italic> Software paper.</p></disp-quote>
<sec id="sec001" sec-type="intro">
<title>Introduction</title>
<p>Increasing availability of massive datasets combined to improvement of computational power have triggered the current boom of machine learning [<xref ref-type="bibr" rid="pcbi.1006244.ref001">1</xref>]. While methods such as deep learning are extremely powerful for predictions, they are nevertheless hard to comprehend, and thus are ill-adapted for the fundamental study of the processes generating those data. This led to the development of more parsimonious inverse problem approaches: for instance the “automatic statistician” relies on the combination of predefined kernels [<xref ref-type="bibr" rid="pcbi.1006244.ref002">2</xref>] to generate explicit models of data. Despite their potential for the understanding of biological mechanisms, few similar methods are currently available or tailored for quantitative biology. Bayesian criteria have been used to generate non-linear models with few parameters [<xref ref-type="bibr" rid="pcbi.1006244.ref003">3</xref>] but applications to biological problems are still in their early days. Enumeration of all possible networks compatible with a phenotype [<xref ref-type="bibr" rid="pcbi.1006244.ref004">4</xref>] are naturally limited in scope by the combinatorial explosions of interactions. This is not a problem for evolutionary algorithms that can generate solutions of arbitrary complexity with an increase in genome size [<xref ref-type="bibr" rid="pcbi.1006244.ref005">5</xref>, <xref ref-type="bibr" rid="pcbi.1006244.ref006">6</xref>]. Such approaches further allow to focus on biologically relevant questions such as development [<xref ref-type="bibr" rid="pcbi.1006244.ref007">7</xref>–<xref ref-type="bibr" rid="pcbi.1006244.ref010">10</xref>], allostery [<xref ref-type="bibr" rid="pcbi.1006244.ref011">11</xref>, <xref ref-type="bibr" rid="pcbi.1006244.ref012">12</xref>] or more general issues such as the impact of biochemical constraints on biological functions [<xref ref-type="bibr" rid="pcbi.1006244.ref013">13</xref>].</p>
<p>In this report, we describe <italic>φ</italic>-evo, an evolutionary program that evolves phenotypic models of cellular processes. Given a fitness function encoding coarse-grained phenotypes, <italic>φ</italic>-evo randomly combines and optimizes biologically inspired kernels using a genetic algorithm, <xref ref-type="fig" rid="pcbi.1006244.g001">Fig 1A</xref>. <italic>φ</italic>-evo can be applied to problems of different nature thanks to flexible kernel definitions, modeling processes like transcription, ligand receptor/ protein-protein interactions, kinetic proofreading or phosphorylations, allowing to generate (validated) predictions in individual cells or in multicellular contexts. <italic>φ</italic>-evo is open-source, relies on commonly used tools (<monospace>Python 3, gcc</monospace>) and results can be visualized via a <monospace>Jupyter</monospace> interface <xref ref-type="fig" rid="pcbi.1006244.g001">Fig 1B</xref>.</p>
<fig id="pcbi.1006244.g001" position="float">
<object-id pub-id-type="doi">10.1371/journal.pcbi.1006244.g001</object-id>
<label>Fig 1</label>
<caption>
<title>Program structure.</title>
<p>(A) A schematic representation for the core loop of a typical evolutionary algorithm. By analogy with Darwinian evolution, each loop is called a generation and implements reproduction, selection and mutation. (B) We provide a <monospace>Jupyter</monospace> notebook template for the analysis of the <italic>φ</italic>-evo results. (C) A schematic representation of the program structure. The algorithm is called through the <monospace>run_evolution.py</monospace> script that reads an <monospace>initialization.py</monospace> file to set up the various parameters for the current project (fitness and input files, mutation rates, etc…). It relies on the <monospace>evolution_gillespie</monospace> module that implements the population class and the various method used for the evolutionary procedure. Each individual in the population being a <monospace>mutable_network</monospace> as described in the <monospace>mutation</monospace> and <monospace>classes_eds2</monospace> modules. The various possible interactions are implemented in separate modules (<monospace>CorePromoter</monospace>, <monospace>PPI</monospace>, etc.) while the integration of the set of differential equations corresponding to each network relies on the <monospace>deriv2</monospace> module and the associated <monospace>C</monospace> code files.</p>
</caption>
<graphic mimetype="image" position="float" xlink:href="info:doi/10.1371/journal.pcbi.1006244.g001" xlink:type="simple"/>
</fig>
<p>The code repository includes all tools allowing for evolution of single cell and multicellular/developmental problems, and several examples are included (see details below). <monospace>Jupyter</monospace> notebook templates are also included to configure a new project and visualize results. Here we further illustrate the power of <italic>φ</italic>-evo on two simple problems: first we reproduce the <italic>lac</italic> operon asymmetrical architecture using a simple symmetrical objective function, second we show on a developmental example how a well-defined effective fitness function emerges from multi objective Pareto evolution.</p>
</sec>
<sec id="sec002" sec-type="materials|methods">
<title>Design and implementation</title>
<sec id="sec003">
<title>Algorithm overview</title>
<p><italic>φ</italic>-evo relies on an evolutionary algorithm acting on a population of networks, to explore the space of possible biochemical networks implementing a particular function of interest [<xref ref-type="bibr" rid="pcbi.1006244.ref014">14</xref>].</p>
<p>There are two levels in the algorithm: the <italic>individual level</italic> (white box on <xref ref-type="fig" rid="pcbi.1006244.g001">Fig 1C</xref>) where genotype, phenotype and evolutionary fitness of individuals are defined and computed, and the <italic>population level</italic> (green boxes on <xref ref-type="fig" rid="pcbi.1006244.g001">Fig 1C</xref>), where the evolutionary process is actually performed. All objects (biochemical interactions, networks, populations) are defined using customized <monospace>Python</monospace> classes, and explicit numerical calculations are compiled on the fly and performed in <monospace>C</monospace> for faster performance. A complete documentation for all <monospace>Python</monospace> classes enriched with examples is included and can be automatically (re)generated.</p>
</sec>
<sec id="sec004">
<title>Individual level</title>
<p>Individual networks in a population are represented as <monospace>Python</monospace> objects called <monospace>Mutable_Network</monospace>. This class encodes the topology of the network considered, the different parameters corresponding to biochemical species and their interactions, and all the methods that will be used at the individual level, including fitness computation and mutations of the network.</p>
<sec id="sec005">
<title>Network representation</title>
<p>Each biochemical network is encoded with a graph where nodes represent either the biochemical species or the interactions between them.</p>
<p>
<monospace>Species</monospace> nodes usually correspond to proteins. They are described through a list of tags (a complete list of tags is given in Supplement), each one indicating a biochemical property (e.g. only <monospace>'Degradable'</monospace> species are susceptible to be degraded), and associated parameters if needed (e.g. the degradation rate). A second type of node, <monospace>TModule</monospace> allows to model DNA transcriptional modules (or enhancers).</p>
<p>The <monospace>Interaction</monospace> objects correspond to the various chemical reactions allowed between <monospace>Species</monospace> or <monospace>TModule</monospace>, and play similar roles to kernels in other machine learning approaches such as [<xref ref-type="bibr" rid="pcbi.1006244.ref002">2</xref>]. Derived classes are defined for each possible biochemical interaction. We include by default generic interactions such as transcription (<monospace>CorePromoter</monospace>), transcriptional regulations (<monospace>TFHill</monospace>), protein-protein interactions (<monospace>PPI</monospace>) and phosphorylations (<monospace>Phospho</monospace>). We also include an extension where problem-specific interactions are defined such as phosphorylation cascades of immune receptors [<xref ref-type="bibr" rid="pcbi.1006244.ref015">15</xref>].</p>
<p>
<monospace>Species</monospace> and <monospace>Interaction</monospace> form a bipartite graph that is encoded using the <monospace>networkX</monospace> package [<xref ref-type="bibr" rid="pcbi.1006244.ref016">16</xref>]. The <monospace>Networks/</monospace> directory gathers files for the <monospace>Mutable_Network</monospace> definition; the most important ones being the basic network structures in <monospace>classes_eds2.py</monospace> and the mutation methods in <monospace>mutation.py</monospace>.</p>
</sec>
<sec id="sec006">
<title>Computing a network phenotype</title>
<p>A <monospace>Mutable_Network</monospace> is translated into a set of differential equations. By default, we use classical biochemical kinetics to account for the various interactions, e.g. mass-action laws for protein-protein interactions, or Hill functions for transcriptional interactions [<xref ref-type="bibr" rid="pcbi.1006244.ref017">17</xref>]. We also assume transcription by multiple activators acts akin to an “OR” gate. Those specific modelling choices can be easily changed by the addition of customized <monospace>Interaction</monospace> classes. As mutations add or remove new nodes in the network, the corresponding equations are generated and integrated on the fly. This is performed by the <monospace>deriv2.py</monospace> module that takes a single network, generates, compiles and runs a network-specific <monospace>C</monospace> program to compute its fitness.</p>
<p>Practically, various <monospace>C</monospace> headers are pre-encoded, imposing initial conditions of the simulations, geometry of the problem (for multicellular problems), and numerical integrator used (default tools for single cell problems and embryo modeled as a line of cells are included). The <monospace>C</monospace> headers are shared by all networks of a population in a given set of simulation. Within one evolutionary simulation, the only difference between networks is at the level of differential equations encoded, in the specific <monospace>C</monospace> function corresponding to time derivatives. Simulations presented here are run in a deterministic mode, and both Euler and a Runge-Kutta integrators are available in the program. An option to run equations in a stochastic mode using <italic>τ</italic>-leaping algorithm (a biochemical numerical generalization of the Langevin equation [<xref ref-type="bibr" rid="pcbi.1006244.ref018">18</xref>]) is also included.</p>
<p>The fitness function used for selection is problem-specific and needs to be predefined by the user in corresponding <monospace>C</monospace> functions. Defining a “good” fitness is not a trivial problem: a too strict fitness could give rise to very rugged evolutionary landscape with many isolated local minima. An efficient fitness should orient evolution towards working solutions even when the networks are still far from the optimum behaviour. Different examples in the package use coarse-grained fitnesses allowing for fast convergence of the evolutionary simulations.</p>
</sec>
<sec id="sec007">
<title>Mutating a network</title>
<p>The module <monospace>Networks/mutation.py</monospace> encodes the main evolutionary methods to mutate, integrate, compute the fitness and copy the individual. There are 3 categories of mutations:
<list list-type="bullet">
<list-item><p>modification of parameters of existing interactions or species</p></list-item>
<list-item><p>removal of interactions or species</p></list-item>
<list-item><p>addition of new interactions or new species</p></list-item>
</list></p>
<p>Those three operators are interaction specific and are thus defined and implemented in the corresponding <monospace>Python</monospace> classes. Relative mutation rates are fixed by the user. By default, modifications of parameters consist in simple uniform draw within a predefined range of kinetics, but more involved choices are possible. Removal and addition of interactions change the network topology, and are chosen randomly among possible interactions. Adding or removing species is done jointly with associated <monospace>TModule</monospace> and <monospace>CorePromoter</monospace> (see <monospace>Networks/CorePromoter.py</monospace>), encoding default transcriptional dynamics. We also include some tools to duplicate transcriptional interactions.</p>
</sec>
</sec>
<sec id="sec008">
<title>Population level</title>
<p>We evolve a population of networks as defined above using a classical evolutionary algorithm. By default, rounds of selection, expansion and mutation are performed as depicted in <xref ref-type="fig" rid="pcbi.1006244.g001">Fig 1A</xref>.</p>
<p>At each generation, we compute the fitness of each network, and impose a strict elitist selection [<xref ref-type="bibr" rid="pcbi.1006244.ref019">19</xref>] where the worst half of the population is discarded, and the best half is selected and duplicated. Mutation operators act on every individual in the duplicated half population. Mutation rates are predefined by the user, and by default are rescaled at each generation to maintain on average a fixed number of mutations per network per generation (typically one or two). This prevents uncontrolled mutations due to combinatorial explosion, and fits the phenomenological Drake’s rule (a scaling relation of mutation rates with genome size) observed in real evolution [<xref ref-type="bibr" rid="pcbi.1006244.ref020">20</xref>].</p>
<p>We also include a Pareto version of our algorithm as proposed in [<xref ref-type="bibr" rid="pcbi.1006244.ref021">21</xref>]. In summary, Pareto evolution aims at optimizing simultaneously several constraints to circumvent the problem of building an ad-hoc fitness combining those. To rank the networks prior to selection, one sequentially computes so-called Pareto-ranks. The networks of rank 0 are those which are not dominated by any other network on all constraints. Rank 1 networks are only dominated by rank 0 networks, and so on. We then perform elitist selection based on ranks of networks. A fitness sharing option is also available to promote diversity in the population [<xref ref-type="bibr" rid="pcbi.1006244.ref021">21</xref>].</p>
<p>Since all individual networks can be integrated independently, <italic>φ</italic>-evo can be easily parallelized, and by default multi-threading is used. We routinely run <italic>φ</italic>-evo on modern multi-core machines or small clusters, with population of a few dozens individuals, so that each generation takes at most a few seconds of computation for examples presented here. Running time of the algorithm almost directly scales with the size of the problem studied, and in particular is proportional to the network size and to the number of cells simulated in an embryo. Small networks with few nodes such as the ones displayed on <xref ref-type="fig" rid="pcbi.1006244.g002">Fig 2</xref> can evolve in less than a couple hundreds of generations and thus a successful run can be obtained in less than half an hour on a modern laptop (not all evolutionary runs are successful, but results presented here are “typical” in the sense that runs are more often succesful than not). More complex simulations have been done for embryonic patterning and typically require several thousands of generations to converge and give bigger networks (e.g. 10 to 15 node-networks were routinely obtained in [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>]); this requires running times of several hours to a day.</p>
<fig id="pcbi.1006244.g002" position="float">
<object-id pub-id-type="doi">10.1371/journal.pcbi.1006244.g002</object-id>
<label>Fig 2</label>
<caption>
<title>Visualization of the results of <italic>φ</italic>-evo.</title>
<p>(A,B,C) Application of <italic>φ</italic>-evo on biochemical adaptation, reproducing results of [<xref ref-type="bibr" rid="pcbi.1006244.ref022">22</xref>]. Panel (A) describes the fitness, similar to the one in [<xref ref-type="bibr" rid="pcbi.1006244.ref022">22</xref>]. For ideal adaptation, an output (yellow) should recover its steady state Δ<italic>O</italic><sub><italic>ss</italic></sub> → 0 after a change of the input (blue). To ensure that the input affects the output, one also wants to maximize Δ<italic>O</italic><sub><italic>max</italic></sub>. (B) presents the behaviour of a network evolved with <italic>φ</italic>-evo, where the output is subject to several changes of the input producing a perturbation of its concentration. The return to steady state is quick. Corresponding network topology is presented in panel (C) and is similar to solutions found in [<xref ref-type="bibr" rid="pcbi.1006244.ref022">22</xref>] (D,E,F) Application of <italic>φ</italic>-evo to segment formations, reproducing results of [<xref ref-type="bibr" rid="pcbi.1006244.ref023">23</xref>]. Panel (D) sketches mouse somitogenesis, coupled to embryonic elongation. We use input dynamics modeling elongation and a fitness function counting final number of segments similar to [<xref ref-type="bibr" rid="pcbi.1006244.ref023">23</xref>]. (E) shows the behaviour of an evolved network, where the system undergoes a bifurcation from an oscillatory to a bistable system when it exits the tail-bud (modelled as the region of high Input) (E-<italic>top</italic>). Depending on its state when leaving, the cell reaches one of two possible steady states. The constant rate of elongation then produces regularly spaced high concentration and low concentration cells (E-<italic>bottom</italic>). See [<xref ref-type="bibr" rid="pcbi.1006244.ref023">23</xref>] for more details. Corresponding network topology is presented in panel (F).</p>
</caption>
<graphic mimetype="image" position="float" xlink:href="info:doi/10.1371/journal.pcbi.1006244.g002" xlink:type="simple"/>
</fig>
</sec>
<sec id="sec009">
<title>Running</title>
<p>Evolutionary simulations in <italic>φ</italic>-evo are run via command line. <monospace>C</monospace> files corresponding to a specific evolutionary simulation (such as fitness, initial conditions, etc…) should be provided by the user. Evolutionary parameters (such as mutation rates, initial network) are encoded in a file called <monospace>initialization.py</monospace>. Those files should be put together in a common directory (called in the following <monospace>Simulation</monospace>) and an evolutionary simulation is started with</p>
<boxed-text id="pcbi.1006244.box001" position="float">
<p><monospace># shell</monospace></p>
<p><monospace>python run_evolution.py -m Simulation</monospace></p>
</boxed-text>
<p>A known difficulty in evolutionary simulations is “code-bloat”, where combinatorial explosion and genetic drift can hinder the core structure of a working network. For this reason, we can also run new evolutionary simulations initialized with an evolved network of interest, while forbidding the addition of new nodes. This isolates the “core” working network, and allows for a better understanding of network dynamics.</p>
</sec>
<sec id="sec010">
<title>Visualization</title>
<p>We have developed two <monospace>Jupyter</monospace> -notebooks to make <italic>φ</italic>-evo more user-friendly. The <monospace>ProjectCreator</monospace> notebook allows to define all simulation parameters (e.g. mutation rates) in specific widgets, as well as to define initial topologies for evolution if needed (e.g. to bias evolution with a specific network architecture). The <monospace>AnalyzeRun</monospace> Notebook allows to visualize results of simulations in a web browser. This is illustrated in <xref ref-type="fig" rid="pcbi.1006244.g002">Fig 2</xref> with two simulations reproducing results from [<xref ref-type="bibr" rid="pcbi.1006244.ref022">22</xref>] and [<xref ref-type="bibr" rid="pcbi.1006244.ref023">23</xref>]. Users can identify interesting evolved networks, check their topology, simulate them on the fly, and do simple changes such as node removals.</p>
</sec>
</sec>
<sec id="sec011" sec-type="results">
<title>Results</title>
<p>We include in the <italic>φ</italic>-evo program several complete examples (from simulation parameters to actual results) reproducing published results for a variety of problems in single cells (biochemical adaptation) [<xref ref-type="bibr" rid="pcbi.1006244.ref022">22</xref>] and developmental contexts (somitogenesis [<xref ref-type="bibr" rid="pcbi.1006244.ref023">23</xref>], Hox patterning [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>]), see <xref ref-type="fig" rid="pcbi.1006244.g002">Fig 2</xref> for two examples. We also include evolution of “adaptive sorting” in immune recognition [<xref ref-type="bibr" rid="pcbi.1006244.ref015">15</xref>] as an example of external add-on for the study of problems requiring the definition of new interactions. For a given problem, evolutionary computations typically give several networks with different topologies, see e.g. [<xref ref-type="bibr" rid="pcbi.1006244.ref022">22</xref>] for a detailed study in the case of biochemical adaptation. In the following, we describe two new evolutionary simulations of biological relevance, to illustrate the power of the algorithm to predict networks and the emergence of non trivial evolutionary dynamics.</p>
<sec id="sec012">
<title><italic>lac</italic> operon</title>
<p>We first use <italic>φ</italic>-evo to recover the regulatory logic of the classical <italic>lac</italic> operon, discovered by Jacob and Monod [<xref ref-type="bibr" rid="pcbi.1006244.ref024">24</xref>]. The <italic>lac</italic> operon allows for regulation of the enzymes digesting lactose in <italic>E. Coli</italic>. It is activated when two conditions are realized: presence of lactose and absence of glucose. The <italic>lac</italic> Repressor (lacR) represses transcription of the operon while the CAP protein is responsible for its activation. When present, lactose is translocated by permease inside the cell and binds to lacR, which relieves the repression. In the absence of glucose, cAMP is produced in burst, then binds to CAP turning it into an activator. This regulatory mechanism is presented in <xref ref-type="fig" rid="pcbi.1006244.g003">Fig 3A</xref>.</p>
<fig id="pcbi.1006244.g003" position="float">
<object-id pub-id-type="doi">10.1371/journal.pcbi.1006244.g003</object-id>
<label>Fig 3</label>
<caption>
<title/>
<p><bold>A</bold> Scheme of the known regulatory network for the <italic>lac</italic> operon. The lac Repressor is inactivated by the presence of lactose which derepress the operon. The cAMP metabolite binds to the CAP protein to activate the operon. <bold>B</bold> Final network found by <italic>φ</italic>-evo after pruning of unnecessary reactions. The similarities with the network <bold>A</bold> are evident. The species with a bold contour are imposed by the definition of our initial network, all other nodes have evolved. <bold>C</bold> Time course of the network presented in <bold>B</bold>, the presence of both Inputs is indicated with the colored bars in the bottom. On the main figure, the output concentration is plotted against time while the desired output is indicated with a black line.</p>
</caption>
<graphic mimetype="image" position="float" xlink:href="info:doi/10.1371/journal.pcbi.1006244.g003" xlink:type="simple"/>
</fig>
<p>The <italic>lac</italic> operon can be envisioned as a logical binary gate performing the (symmetric) boolean operation “cAMP AND lactose” between those two metabolites. To evolve this function, we initialize a network with an input corresponding to the lactose outside of the cell (denoted <italic>I</italic><sub>0</sub>), a permease-like enzyme translocating it into the cell, the cAMP species (<italic>I</italic><sub>1</sub>) and one output coarse-graining all transcriptional targets (<italic>O</italic>). (Bold contours for nodes in <xref ref-type="fig" rid="pcbi.1006244.g003">Fig 3B</xref>). Both inputs are boolean variables that can be be present (<italic>I</italic><sub><italic>j</italic></sub> = 1 in rescaled units) or absent (<italic>I</italic><sub><italic>j</italic></sub> = 0), and follow a random dynamics. Importantly we fix the function of the Inputs to be metabolites that cannot activate of repress transcription by themselves, and thus need to act through allosteric binding with other species.</p>
<p>To define the fitness function, we call <italic>T</italic><sub>on</sub> the total time when the output should be ‘on’ (i.e. when both inputs are present) and <italic>T</italic><sub>off</sub> the remainder where it should be off (i.e. at most one input is present). If we suppose that the output gives a benefit <italic>β</italic> during <italic>T</italic><sub>on</sub> and a cost <italic>γ</italic> otherwise, we compute the fitness:
<disp-formula id="pcbi.1006244.e001"><alternatives><graphic id="pcbi.1006244.e001g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pcbi.1006244.e001" xlink:type="simple"/><mml:math display="block" id="M2"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd columnalign="right"><mml:mrow><mml:mi>φ</mml:mi> <mml:mo>=</mml:mo> <mml:mo>-</mml:mo> <mml:mi>β</mml:mi> <mml:msub><mml:mo>∫</mml:mo> <mml:msub><mml:mi>T</mml:mi> <mml:mtext>on</mml:mtext></mml:msub></mml:msub> <mml:mi>d</mml:mi> <mml:mi>t</mml:mi> <mml:mo form="prefix" movablelimits="true">min</mml:mo> <mml:mrow><mml:mo>(</mml:mo> <mml:mi>O</mml:mi> <mml:mrow><mml:mo>(</mml:mo> <mml:mi>t</mml:mi> <mml:mo>)</mml:mo></mml:mrow> <mml:mo>,</mml:mo> <mml:mn>1</mml:mn> <mml:mo>.</mml:mo> <mml:mn>0</mml:mn> <mml:mo>)</mml:mo></mml:mrow> <mml:mo>+</mml:mo> <mml:mi>γ</mml:mi> <mml:msub><mml:mo>∫</mml:mo> <mml:msub><mml:mi>T</mml:mi> <mml:mtext>off</mml:mtext></mml:msub></mml:msub> <mml:mi>d</mml:mi> <mml:mi>t</mml:mi> <mml:mo form="prefix" movablelimits="true">min</mml:mo> <mml:mrow><mml:mo>(</mml:mo> <mml:mi>O</mml:mi> <mml:mrow><mml:mo>(</mml:mo> <mml:mi>t</mml:mi> <mml:mo>)</mml:mo></mml:mrow> <mml:mo>,</mml:mo> <mml:mn>1</mml:mn> <mml:mo>.</mml:mo> <mml:mn>0</mml:mn> <mml:mo>)</mml:mo></mml:mrow> <mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></alternatives> <label>(1)</label></disp-formula>
and assume this function should be minimized. The min operator ensures that the output simply has to be higher than an arbitrary concentration rescaled to 1 to perform the computation. We also rescale <italic>φ</italic> by setting <italic>β</italic> = 1.</p>
<p>For convergence of the evolutionary process <italic>γ</italic> can not be arbitrary (see details in Supplement). Intuitively, if <italic>γ</italic> is big, it is very costly to get an intermediate step where one input alone controls the Output, which would impinge evolution. Conversely, if <italic>γ</italic> is small, there is no strong incentive to evolve a correct operon because turning the Output on all the time is not costly. We chose <inline-formula id="pcbi.1006244.e002"><alternatives><graphic id="pcbi.1006244.e002g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pcbi.1006244.e002" xlink:type="simple"/><mml:math display="inline" id="M3"><mml:mrow><mml:mi>γ</mml:mi> <mml:mo>=</mml:mo> <mml:mfrac><mml:mn>3</mml:mn> <mml:mn>4</mml:mn></mml:mfrac></mml:mrow></mml:math></alternatives></inline-formula>, and checked that the precise value does not change significantly the networks obtained when we vary it.</p>
<p>A representative result of a network found by <italic>φ</italic>-evo is shown in <xref ref-type="fig" rid="pcbi.1006244.g003">Fig 3B</xref> and the behaviour of the network is shown in panel <bold>C</bold>. We display the core network obtained after pruning unnecessary interactions as described in the Implementation section (See Supplements for more details). We can see by direct comparison that the final network of the algorithm appears very close to the structure of the real lac operon displayed in <xref ref-type="fig" rid="pcbi.1006244.g003">Fig 3A</xref>.</p>
<p>While this example might appear simplistic, it shows how even simple simulations can provide insights into the biochemical constraints on evolution. While the objective function puts the two Inputs on equal foot, the evolved network is not symmetrical, presenting regulations via one activation and one repression. This asymmetry actually originates from the default transcriptional grammar implemented: since multiple activators act via an effective “OR” gate, our algorithm can not directly build a transcriptional“AND” gate. The simplest solution is to have activation on one side and titration of the repressor on the other one, which is found by <italic>φ</italic>-evo.</p>
</sec>
<sec id="sec013">
<title>Emergence of fitness in Pareto optimization</title>
<p>As a second example, we use <italic>φ</italic>-evo for Pareto evolution of embryonic patterning (<xref ref-type="fig" rid="pcbi.1006244.g004">Fig 4A</xref>). In [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>], the computational evolution of hox-like patterning was addressed. A <bold>single</bold> combined fitness aimed at optimizing two terms: a global entropy term, maximizing the number of genes expressed within the embryo (<italic>F</italic>1) and a local entropy term, minimizing the number of genes expressed in a given cell to define local identity (<italic>F</italic>2), 4 B. The fitness <italic>F</italic>2 − <italic>F</italic>1, corresponding to mutual information between cell position and gene expression, was initially minimized, leading to the evolution of networks presenting several characteristic of hox-like patterning, including posterior dominance [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>].</p>
<fig id="pcbi.1006244.g004" position="float">
<object-id pub-id-type="doi">10.1371/journal.pcbi.1006244.g004</object-id>
<label>Fig 4</label>
<caption>
<title/>
<p>Pareto evolution of embryonic patterning (A) Schematic representation of the problem: we model embryonic patterning as an antero posterior sequence of genes at different positions (B) Fitness definition, where <italic>p</italic>(<italic>i</italic>; <italic>x</italic>) represents the relative fraction of gene <italic>i</italic> expressed at position <italic>x</italic>. <italic>F</italic><sub>1</sub> increases with the number of genes expressed within the embryo, while <italic>F</italic><sub>2</sub> increases with the number of genes expressed locally at <italic>x</italic>. See [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>] for more details on the two fitnesses (C) Pareto fronts for a single evolutionary simulation at different generations (warmer colours correspond to later generations) aiming at maximizing <italic>F</italic><sub>1</sub> and minimizing <italic>F</italic><sub>2</sub> simultaneously. Inset corresponds to the evolutionary trajectory studied in panel E (D) Changes of functions <italic>F</italic><sub>1</sub> and <italic>F</italic><sub>2</sub> for random mutations within a network population (E) An evolutionary trajectory leading to the definition of a new Pareto front, from 3 to 4 domains. Only the local probability profiles for the steady states of the networks are displayed.</p>
</caption>
<graphic mimetype="image" position="float" xlink:href="info:doi/10.1371/journal.pcbi.1006244.g004" xlink:type="simple"/>
</fig>
<p>Here we revisit this problem using multi-objective/Pareto evolution to minimize <bold>at the same time</bold> −<italic>F</italic>1 and <italic>F</italic><sub>2</sub>. Typical results of these simulations are presented in <xref ref-type="fig" rid="pcbi.1006244.g004">Fig 4C</xref>, where Pareto fronts for different generations are plotted.</p>
<p>The networks we obtain are qualitatively similar to the ones first evolved in [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>] (see Supplement). Remarkably, it appears that the Pareto fronts observed during the course of evolution are slopes of constant <italic>F</italic>2 − <italic>F</italic>1, corresponding to the exact mutual information fitness used in [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>]. During evolution the Pareto front clearly evolves towards increasing values of mutual information (corresponding to an increase of the number hox-like domains in an embryo [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>]).</p>
<p>The choice of fitness function in [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>] was in part motivated by the fact that gene duplications, presumably an important driver for evolution, were neutral moves for the chosen mutual information fitness (see Supplement of [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>]). Here the logic appears inverted: during evolution, most mutations are (at best) expected to move networks on the Pareto front. This is illustrated in <xref ref-type="fig" rid="pcbi.1006244.g004">Fig 4D</xref> where the relative changes of fitness are displayed for a population of networks following random mutations. We clearly see that many of the mutated networks localize on the slope Δ<italic>F</italic><sub>1</sub>−Δ<italic>F</italic><sub>2</sub> = 0 (in Supplement we generalize a calculation from [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>] to explain this effect). This defines the equivalent of a neutral space, but for Pareto evolution: networks moving on the front are not Pareto-dominated by any other network by definition.</p>
<p>If most mutations are on the Pareto front, this raises the question of how a new Pareto front is reached during evolution. Such a (rare) event is presented in <xref ref-type="fig" rid="pcbi.1006244.g004">Fig 4E</xref>, where we have tracked back the ancestors of a network to build its evolutionary trajectory between two Pareto fronts (inset of <xref ref-type="fig" rid="pcbi.1006244.g004">Fig 4C</xref>). One clearly sees how this network incrementally evolves from 3 to 4 hox-line domains, by addition of an internal domain in the right most one, and refinement/shrinkage of all domains. Interestingly this evolution does not occur in a direction orthogonal to the Pareto front, rather the trajectory zigzags with an overall direction corresponding to a small variation in −<italic>F</italic><sub>1</sub> (i.e keeping the global entropy constant) while significantly improving <italic>F</italic><sub>2</sub> (the local entropy). This fits the idea that evolution here is driven by similar genes expressed in the same domain, then later specializing to define new domains. However, it is also clear that on the short evolutionary time-scale, evolution is not a straight line in a well-defined direction. We see rather complex stochastic dynamics with the interplay of the two constraints, as can be also gathered from the intermingled structure of Pareto fronts at different generations in <xref ref-type="fig" rid="pcbi.1006244.g004">Fig 4C</xref>.</p>
<p>This example thus illustrates how <italic>φ</italic>-evo can be used to study the dynamics of evolution of complex features, and how an effective fitness function can emerge from the simultaneous optimization of several constraints (the latter presumably being more generic in biology than the former [<xref ref-type="bibr" rid="pcbi.1006244.ref025">25</xref>]). Indeed the fitness rationalized <italic>a priori</italic> in [<xref ref-type="bibr" rid="pcbi.1006244.ref009">9</xref>] is discovered here <italic>a posteriori</italic> by <italic>φ</italic>-evo. We could imagine situations where the geometry of Pareto fronts varies during generations, so that the shape of the Pareto fronts and the corresponding effective fitnesses would vary as well during evolution. If the geometry of Pareto fronts is very different in different regions in terms of constraints optimized, we could even imagine local populations evolving in very different ways, potentially leading to numerical speciations.</p>
</sec>
</sec>
<sec id="sec014">
<title>Summary</title>
<p><italic>φ</italic>-evo evolves phenotypic networks performing non trivial biological functions. It can be used to uncover functional features of existing biological networks, as well as to study the dynamics of evolution of gene networks e.g. in the case of Pareto optimization. It represents a useful alternative to black-box modeling approaches for the understanding of biological networks and their evolution.</p>
</sec>
<sec id="sec015">
<title>Availability and future directions</title>
<p><italic>φ</italic>-evo is available as a <monospace>Python</monospace> package hosted on github at the following link: <ext-link ext-link-type="uri" xlink:href="https://github.com/phievo/phievo" xlink:type="simple">https://github.com/phievo/phievo</ext-link></p>
<p>The program documentation is hosted on readthedocs: <ext-link ext-link-type="uri" xlink:href="http://phievo.readthedocs.io/en/latest/" xlink:type="simple">http://phievo.readthedocs.io/en/latest/</ext-link></p>
<p>A tutorial video is available <ext-link ext-link-type="uri" xlink:href="https://youtu.be/FRPc_hWm_JI" xlink:type="simple">here (clickable link)</ext-link> to illustrate how to run <italic>φ</italic>-evo on the example of vertebrate segmentation similar to [<xref ref-type="bibr" rid="pcbi.1006244.ref023">23</xref>]. We include two other tutorial videos illustrating how to use the <monospace>ProjectCreator</monospace> Notebook to initialize and bias an evolutionary simulation <ext-link ext-link-type="uri" xlink:href="https://www.youtube.com/watch?v=G3UmxZhyFfg" xlink:type="simple">here (clickable link)</ext-link>, and other features such as node removal <ext-link ext-link-type="uri" xlink:href="https://www.youtube.com/watch?v=LPu-E7waUDg" xlink:type="simple">here (clickable link)</ext-link>.</p>
<p>The algorithm was first developed using <monospace>Python 2</monospace> and the current version runs under <monospace>Python 3</monospace>. It can be installed locally using <monospace>pip</monospace>. It requires only a <monospace>C</monospace> compiler such as <monospace>gcc</monospace> as an extra dependency. The algorithm has been developed and optimized in a Unix/Linux environment and has been tested on both Mac OS X and Windows. More details on the implementation and on the examples are given in the Supplement.</p>
<p>Future directions will include automatic model reduction using Fitness Based Asymptotic Parameter reduction (<inline-formula id="pcbi.1006244.e003"><alternatives><graphic id="pcbi.1006244.e003g" mimetype="image" position="anchor" xlink:href="info:doi/10.1371/journal.pcbi.1006244.e003" xlink:type="simple"/><mml:math display="inline" id="M4"><mml:mover accent="true"><mml:mi>ϕ</mml:mi> <mml:mo>¯</mml:mo></mml:mover></mml:math></alternatives></inline-formula> [<xref ref-type="bibr" rid="pcbi.1006244.ref026">26</xref>]), implementation of practical problems such as data fitting, and of networks transitory forms similar to [<xref ref-type="bibr" rid="pcbi.1006244.ref027">27</xref>].</p>
</sec>
<sec id="sec016">
<title>Supporting information</title>
<supplementary-material id="pcbi.1006244.s001" mimetype="application/pdf" position="float" xlink:href="info:doi/10.1371/journal.pcbi.1006244.s001" xlink:type="simple">
<label>S1 Text</label>
<caption>
<title>This text gives more details on the algorithm and on the simulations described in the main paper.</title>
<p>(PDF)</p>
</caption>
</supplementary-material>
</sec>
</body>
<back>
<ack>
<p>We thank Eric Siggia, Aryeh Warmflash and Jean-Benoît Lalanne for discussions and contributions to earlier versions of the algorithm.</p>
</ack>
<ref-list>
<title>References</title>
<ref id="pcbi.1006244.ref001">
<label>1</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>LeCun</surname> <given-names>Y</given-names></name>, <name name-style="western"><surname>Bengio</surname> <given-names>Y</given-names></name>, <name name-style="western"><surname>Hinton</surname> <given-names>GE</given-names></name>. <article-title>Deep learning</article-title>. <source>Nature</source>. <year>2015</year> <month>May</month>;<volume>521</volume>(<issue>7553</issue>):<fpage>436</fpage>–<lpage>444</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1038/nature14539" xlink:type="simple">10.1038/nature14539</ext-link></comment> <object-id pub-id-type="pmid">26017442</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref002">
<label>2</label>
<mixed-citation publication-type="book" xlink:type="simple">
<name name-style="western"><surname>Duvenaud</surname> <given-names>D</given-names></name>, <name name-style="western"><surname>Lloyd</surname> <given-names>JR</given-names></name>, <name name-style="western"><surname>Grosse</surname> <given-names>R</given-names></name>, <name name-style="western"><surname>Tenenbaum</surname> <given-names>JB</given-names></name>, <name name-style="western"><surname>Ghahramani</surname> <given-names>Z</given-names></name>. <source>Structure Discovery in Nonparametric Regression through Compositional Kernel Search</source>. <year>2013</year> <month>Feb</month>;.</mixed-citation>
</ref>
<ref id="pcbi.1006244.ref003">
<label>3</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Daniels</surname> <given-names>BC</given-names></name>, <name name-style="western"><surname>Nemenman</surname> <given-names>I</given-names></name>. <article-title>Automated adaptive inference of phenomenological dynamical models</article-title>. <source>Nature communications</source>. <year>2015</year> <month>Aug</month>;<volume>6</volume>:<fpage>8133</fpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1038/ncomms9133" xlink:type="simple">10.1038/ncomms9133</ext-link></comment> <object-id pub-id-type="pmid">26293508</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref004">
<label>4</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Cotterell</surname> <given-names>J</given-names></name>, <name name-style="western"><surname>Sharpe</surname> <given-names>J</given-names></name>. <article-title>An atlas of gene regulatory networks reveals multiple three-gene mechanisms for interpreting morphogen gradients</article-title>. <source>Molecular Systems Biology</source>. <year>2010</year> <month>Nov</month>;<volume>6</volume>:<fpage>425</fpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1038/msb.2010.74" xlink:type="simple">10.1038/msb.2010.74</ext-link></comment> <object-id pub-id-type="pmid">21045819</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref005">
<label>5</label>
<mixed-citation publication-type="book" xlink:type="simple">
<name name-style="western"><surname>Holland</surname> <given-names>JH</given-names></name>. <chapter-title>Adaptation in Natural and Artificial Systems</chapter-title>. <source>An Introductory Analysis with Applications to Biology, Control, and Artificial Intelligence</source>. <publisher-name>Bradford Book</publisher-name>; <year>1992</year>.</mixed-citation>
</ref>
<ref id="pcbi.1006244.ref006">
<label>6</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>François</surname> <given-names>P</given-names></name>, <name name-style="western"><surname>Hakim</surname> <given-names>V</given-names></name>. <article-title>Design of genetic networks with specified functions by evolution in silico</article-title>. <source>Proc Natl Acad Sci U S A</source>. <year>2004</year> <month>Jan</month>;<volume>101</volume>(<issue>2</issue>):<fpage>580</fpage>–<lpage>585</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1073/pnas.0304532101" xlink:type="simple">10.1073/pnas.0304532101</ext-link></comment> <object-id pub-id-type="pmid">14704282</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref007">
<label>7</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Salazar-Ciudad</surname> <given-names>I</given-names></name>, <name name-style="western"><surname>Solé</surname> <given-names>RV</given-names></name>, <name name-style="western"><surname>Newman</surname> <given-names>SA</given-names></name>. <article-title>Phenotypic and dynamical transitions in model genetic networks. II. Application to the evolution of segmentation mechanisms</article-title>. <source>Evol Dev</source>. <year>2001</year> <month>Feb</month>;<volume>3</volume>(<issue>2</issue>):<fpage>95</fpage>–<lpage>103</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1046/j.1525-142x.2001.003002095.x" xlink:type="simple">10.1046/j.1525-142x.2001.003002095.x</ext-link></comment> <object-id pub-id-type="pmid">11341678</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref008">
<label>8</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Fujimoto</surname> <given-names>K</given-names></name>, <name name-style="western"><surname>Ishihara</surname> <given-names>S</given-names></name>, <name name-style="western"><surname>Kaneko</surname> <given-names>K</given-names></name>. <article-title>Network Evolution of Body Plans</article-title>. <source>PLoS ONE</source>. <year>2008</year> <month>Jul</month>;<volume>3</volume>(<issue>7</issue>):<fpage>e2772</fpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1371/journal.pone.0002772" xlink:type="simple">10.1371/journal.pone.0002772</ext-link></comment> <object-id pub-id-type="pmid">18648662</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref009">
<label>9</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>François</surname> <given-names>P</given-names></name>, <name name-style="western"><surname>Siggia</surname> <given-names>ED</given-names></name>. <article-title>Predicting embryonic patterning using mutual entropy fitness and in silico evolution</article-title>. <source>Development (Cambridge, England)</source>. <year>2010</year>;<volume>137</volume>(<issue>14</issue>):<fpage>2385</fpage>–<lpage>2395</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1242/dev.048033" xlink:type="simple">10.1242/dev.048033</ext-link></comment></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref010">
<label>10</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>ten Tusscher</surname> <given-names>KH</given-names></name>, <name name-style="western"><surname>Hogeweg</surname> <given-names>P</given-names></name>. <article-title>Evolution of Networks for Body Plan Patterning; Interplay of Modularity, Robustness and Evolvability</article-title>. <source>PLoS Comput Biol</source>. <year>2011</year> <month>Oct</month>;<volume>7</volume>(<issue>10</issue>):<fpage>e1002208</fpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1371/journal.pcbi.1002208" xlink:type="simple">10.1371/journal.pcbi.1002208</ext-link></comment> <object-id pub-id-type="pmid">21998573</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref011">
<label>11</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Ollivier</surname> <given-names>JF</given-names></name>, <name name-style="western"><surname>Shahrezaei</surname> <given-names>V</given-names></name>, <name name-style="western"><surname>Swain</surname> <given-names>PS</given-names></name>. <article-title>Scalable rule-based modelling of allosteric proteins and biochemical networks</article-title>. <source>PLoS Comput Biol</source>. <year>2010</year>;<volume>6</volume>(<issue>11</issue>):<fpage>e1000975</fpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1371/journal.pcbi.1000975" xlink:type="simple">10.1371/journal.pcbi.1000975</ext-link></comment> <object-id pub-id-type="pmid">21079669</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref012">
<label>12</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Feng</surname> <given-names>S</given-names></name>, <name name-style="western"><surname>Ollivier</surname> <given-names>JF</given-names></name>, <name name-style="western"><surname>Swain</surname> <given-names>PS</given-names></name>, <name name-style="western"><surname>Soyer</surname> <given-names>OS</given-names></name>. <article-title>BioJazz: in silico evolution of cellular networks with unbounded complexity using rule-based modeling</article-title>. <source>Nucleic Acids Research</source>. <year>2015</year> <month>Oct</month>;<volume>43</volume>(<issue>19</issue>):<fpage>e123</fpage>–<lpage>e123</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1093/nar/gkv595" xlink:type="simple">10.1093/nar/gkv595</ext-link></comment> <object-id pub-id-type="pmid">26101250</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref013">
<label>13</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Martin</surname> <given-names>OC</given-names></name>, <name name-style="western"><surname>Krzywicki</surname> <given-names>A</given-names></name>, <name name-style="western"><surname>Zagorski</surname> <given-names>M</given-names></name>. <article-title>Drivers of structural features in gene regulatory networks: From biophysical constraints to biological function</article-title>. <source>Physics of Life Reviews</source>. <year>2016</year> <month>Jul</month>;<volume>17</volume>:<fpage>124</fpage>–<lpage>158</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.plrev.2016.06.002" xlink:type="simple">10.1016/j.plrev.2016.06.002</ext-link></comment> <object-id pub-id-type="pmid">27365153</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref014">
<label>14</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>François</surname> <given-names>P</given-names></name>. <article-title>Evolving phenotypic networks in silico</article-title>. <source>Seminars in cell &amp; developmental biology</source>. <year>2014</year> <month>Nov</month>;<volume>35</volume>:<fpage>90</fpage>–<lpage>97</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.semcdb.2014.06.012" xlink:type="simple">10.1016/j.semcdb.2014.06.012</ext-link></comment></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref015">
<label>15</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Lalanne</surname> <given-names>JB</given-names></name>, <name name-style="western"><surname>François</surname> <given-names>P</given-names></name>. <article-title>Principles of adaptive sorting revealed by in silico evolution</article-title>. <source>Physical Review Letters</source>. <year>2013</year> <month>May</month>;<volume>110</volume>(<issue>21</issue>):<fpage>218102</fpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1103/PhysRevLett.110.218102" xlink:type="simple">10.1103/PhysRevLett.110.218102</ext-link></comment> <object-id pub-id-type="pmid">23745939</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref016">
<label>16</label>
<mixed-citation publication-type="other" xlink:type="simple">NetworkX;. Available from: <ext-link ext-link-type="uri" xlink:href="http://networkx.github.io/" xlink:type="simple">http://networkx.github.io/</ext-link>.</mixed-citation>
</ref>
<ref id="pcbi.1006244.ref017">
<label>17</label>
<mixed-citation publication-type="book" xlink:type="simple">
<name name-style="western"><surname>Phillips</surname> <given-names>R</given-names></name>, <name name-style="western"><surname>Kondev</surname> <given-names>J</given-names></name>, <name name-style="western"><surname>Theriot</surname> <given-names>J</given-names></name>, <name name-style="western"><surname>Garcia</surname> <given-names>H</given-names></name>. <source>Physical Biology of the Cell</source>, <edition>Second Edition</edition>. <publisher-name>Garland Science</publisher-name>; <year>2012</year>.</mixed-citation>
</ref>
<ref id="pcbi.1006244.ref018">
<label>18</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Cao</surname> <given-names>Y</given-names></name>, <name name-style="western"><surname>Gillespie</surname> <given-names>DT</given-names></name>, <name name-style="western"><surname>Petzold</surname> <given-names>LR</given-names></name>. <article-title>Adaptive explicit-implicit tau-leaping method with automatic tau selection</article-title>. <source>The Journal of Chemical Physics</source>. <year>2007</year> <month>Jun</month>;<volume>126</volume>(<issue>22</issue>):<fpage>224101</fpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1063/1.2745299" xlink:type="simple">10.1063/1.2745299</ext-link></comment> <object-id pub-id-type="pmid">17581038</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref019">
<label>19</label>
<mixed-citation publication-type="book" xlink:type="simple">
<name name-style="western"><surname>Mitchell</surname> <given-names>M</given-names></name>. <source>An Introduction to Genetic Algorithms</source>. <publisher-name>MIT Press</publisher-name>; <year>1998</year>.</mixed-citation>
</ref>
<ref id="pcbi.1006244.ref020">
<label>20</label>
<mixed-citation publication-type="book" xlink:type="simple">
<name name-style="western"><surname>Lynch</surname> <given-names>M</given-names></name>. <source>The origins of genome architecture</source>. <publisher-name>Sinauer Associates Inc</publisher-name>; <year>2007</year>.</mixed-citation>
</ref>
<ref id="pcbi.1006244.ref021">
<label>21</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Warmflash</surname> <given-names>A</given-names></name>, <name name-style="western"><surname>François</surname> <given-names>P</given-names></name>, <name name-style="western"><surname>Siggia</surname> <given-names>ED</given-names></name>. <article-title>Pareto evolution of gene networks: an algorithm to optimize multiple fitness objectives</article-title>. <source>Physical Biology</source>. <year>2012</year> <month>Oct</month>;<volume>9</volume>(<issue>5</issue>):<fpage>056001</fpage>–<lpage>056001</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1088/1478-3975/9/5/056001" xlink:type="simple">10.1088/1478-3975/9/5/056001</ext-link></comment> <object-id pub-id-type="pmid">22874123</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref022">
<label>22</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>François</surname> <given-names>P</given-names></name>, <name name-style="western"><surname>Siggia</surname> <given-names>ED</given-names></name>. <article-title>A case study of evolutionary computation of biochemical adaptation</article-title>. <source>Physical Biology</source>. <year>2008</year>;<volume>5</volume>(<issue>2</issue>):<fpage>26009</fpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1088/1478-3975/5/2/026009" xlink:type="simple">10.1088/1478-3975/5/2/026009</ext-link></comment></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref023">
<label>23</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>François</surname> <given-names>P</given-names></name>, <name name-style="western"><surname>Hakim</surname> <given-names>V</given-names></name>, <name name-style="western"><surname>Siggia</surname> <given-names>ED</given-names></name>. <article-title>Deriving structure from evolution: metazoan segmentation</article-title>. <source>Molecular Systems Biology</source>. <year>2007</year> <month>Dec</month>;<volume>3</volume>:<fpage>9</fpage>.</mixed-citation>
</ref>
<ref id="pcbi.1006244.ref024">
<label>24</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Jacob</surname> <given-names>F</given-names></name>, <name name-style="western"><surname>Monod</surname> <given-names>J</given-names></name>. <article-title>Genetic regulatory mechanisms in the synthesis of proteins</article-title>. <source>Journal of molecular biology</source>. <year>1961</year> <month>Jun</month>;<volume>3</volume>(<issue>3</issue>):<fpage>318</fpage>–<lpage>356</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/S0022-2836(61)80072-7" xlink:type="simple">10.1016/S0022-2836(61)80072-7</ext-link></comment> <object-id pub-id-type="pmid">13718526</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref025">
<label>25</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Szekely</surname> <given-names>P</given-names></name>, <name name-style="western"><surname>Korem</surname> <given-names>Y</given-names></name>, <name name-style="western"><surname>Moran</surname> <given-names>U</given-names></name>, <name name-style="western"><surname>Mayo</surname> <given-names>AE</given-names></name>, <name name-style="western"><surname>Alon</surname> <given-names>U</given-names></name>. <article-title>The Mass-Longevity Triangle: Pareto Optimality and the Geometry of Life-History Trait Space</article-title>. <source>PLoS Comput Biol</source>. <year>2015</year>;<volume>11</volume>(<issue>10</issue>). <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1371/journal.pcbi.1004524" xlink:type="simple">10.1371/journal.pcbi.1004524</ext-link></comment></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref026">
<label>26</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Proulx-Giraldeau</surname> <given-names>F</given-names></name>, <name name-style="western"><surname>Rademaker</surname> <given-names>TJ</given-names></name>, <name name-style="western"><surname>François</surname> <given-names>P</given-names></name>. <article-title>Untangling the Hairball: Fitness-Based Asymptotic Reduction of Biological Networks</article-title>. <source>Biophysical Journal</source>. <year>2017</year> <month>Oct</month>;<volume>113</volume>(<issue>8</issue>):<fpage>1893</fpage>–<lpage>1906</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.bpj.2017.08.036" xlink:type="simple">10.1016/j.bpj.2017.08.036</ext-link></comment> <object-id pub-id-type="pmid">29045882</object-id></mixed-citation>
</ref>
<ref id="pcbi.1006244.ref027">
<label>27</label>
<mixed-citation publication-type="journal" xlink:type="simple">
<name name-style="western"><surname>Rothschild</surname> <given-names>JB</given-names></name>, <name name-style="western"><surname>Tsimiklis</surname> <given-names>P</given-names></name>, <name name-style="western"><surname>Siggia</surname> <given-names>ED</given-names></name>, <name name-style="western"><surname>François</surname> <given-names>P</given-names></name>. <article-title>Predicting Ancestral Segmentation Phenotypes from Drosophila to Anopheles Using In Silico Evolution</article-title>. <source>PLoS Genetics</source>. <year>2016</year> <month>May</month>;<volume>12</volume>(<issue>5</issue>):<fpage>e1006052</fpage>–<lpage>19</lpage>. <comment>doi: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1371/journal.pgen.1006052" xlink:type="simple">10.1371/journal.pgen.1006052</ext-link></comment> <object-id pub-id-type="pmid">27227405</object-id></mixed-citation>
</ref>
</ref-list>
</back>
</article>