diff --git a/docs/benchmark_iter_gapfill.svg b/docs/benchmark_iter_gapfill.svg
new file mode 100644
index 0000000..1c0540a
--- /dev/null
+++ b/docs/benchmark_iter_gapfill.svg
@@ -0,0 +1,760 @@
+
+
+
+
diff --git a/docs/benchmark_iterative_gapfill.ipynb b/docs/benchmark_iterative_gapfill.ipynb
new file mode 100644
index 0000000..b706a07
--- /dev/null
+++ b/docs/benchmark_iterative_gapfill.ipynb
@@ -0,0 +1,1709 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Benchmarking ensemble generation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This notebook does some simple benchmarking of ensemble generation in Medusa through iterative gapfilling. You can see the full narrative version of the process being benchmarked in the [**Creating an ensemble**](https://medusa.readthedocs.io/en/latest/creating_ensemble.html) section of the User Guide."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "no cpd00013_e\n",
+ "cpd11594_e was not in model, adding met and exchange reaction\n",
+ "cpd05158_e was not in model, adding met and exchange reaction\n",
+ "cpd15584_e was not in model, adding met and exchange reaction\n",
+ "cpd00492_e was not in model, adding met and exchange reaction\n",
+ "cpd00232_e was not in model, adding met and exchange reaction\n",
+ "cpd19001_e was not in model, adding met and exchange reaction\n",
+ "cpd00709_e was not in model, adding met and exchange reaction\n",
+ "cpd00396_e was not in model, adding met and exchange reaction\n",
+ "cpd01307_e was not in model, adding met and exchange reaction\n",
+ "cpd00079_e was not in model, adding met and exchange reaction\n",
+ "cpd00072_e was not in model, adding met and exchange reaction\n",
+ "cpd00320_e was not in model, adding met and exchange reaction\n",
+ "cpd01293_e was not in model, adding met and exchange reaction\n",
+ "cpd05264_e was not in model, adding met and exchange reaction\n",
+ "cpd03561_e was not in model, adding met and exchange reaction\n",
+ "cpd00094_e was not in model, adding met and exchange reaction\n",
+ "cpd00142_e was not in model, adding met and exchange reaction\n",
+ "cpd00141_e was not in model, adding met and exchange reaction\n",
+ "cpd00029_e was not in model, adding met and exchange reaction\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Load the test model for Staphylococcus aureus, originally generated with ModelSEED\n",
+ "import medusa\n",
+ "from medusa.test import create_test_model\n",
+ "model = create_test_model('Saureus_seed')\n",
+ "\n",
+ "# Load the biolog data from Plata et al., Nature 2014\n",
+ "from medusa.test import load_biolog_plata\n",
+ "biolog_base_composition, biolog_base_dict, biolog_thresholded = load_biolog_plata()\n",
+ "\n",
+ "# Extract growth/no growth calls for staph aureus\n",
+ "test_mod_pheno = biolog_thresholded.loc['Staphylococcus aureus']\n",
+ "test_mod_pheno = list(test_mod_pheno[test_mod_pheno == True].index)\n",
+ "\n",
+ "# load the universal reaction database\n",
+ "from medusa.test import load_universal_modelseed\n",
+ "from cobra.core import Reaction\n",
+ "universal = load_universal_modelseed()\n",
+ "\n",
+ "# check for biolog base components in the model and record\n",
+ "# the metabolites/exchanges that need to be added\n",
+ "add_mets = []\n",
+ "add_exchanges = []\n",
+ "for met in list(biolog_base_dict.keys()):\n",
+ " try:\n",
+ " model.metabolites.get_by_id(met)\n",
+ " except:\n",
+ " print('no '+met)\n",
+ " add_met = universal.metabolites.get_by_id(met).copy()\n",
+ " add_mets.append(add_met)\n",
+ "\n",
+ "model.add_metabolites(add_mets)\n",
+ "\n",
+ "for met in list(biolog_base_dict.keys()):\n",
+ " # Search for exchange reactions\n",
+ " try:\n",
+ " model.reactions.get_by_id('EX_'+met)\n",
+ " except:\n",
+ " add_met = universal.metabolites.get_by_id(met)\n",
+ " ex_rxn = Reaction('EX_' + met)\n",
+ " ex_rxn.name = \"Exchange reaction for \" + met\n",
+ " ex_rxn.lower_bound = -1000\n",
+ " ex_rxn.upper_bound = 1000\n",
+ " ex_rxn.add_metabolites({add_met:-1})\n",
+ " add_exchanges.append(ex_rxn)\n",
+ "\n",
+ "model.add_reactions(add_exchanges)\n",
+ "\n",
+ "# Find metabolites from the biolog data that are missing in the test model\n",
+ "# and add them from the universal\n",
+ "missing_mets = []\n",
+ "missing_exchanges = []\n",
+ "media_dicts = {}\n",
+ "for met_id in test_mod_pheno:\n",
+ " try:\n",
+ " model.metabolites.get_by_id(met_id)\n",
+ " except:\n",
+ " print(met_id + \" was not in model, adding met and exchange reaction\")\n",
+ " met = universal.metabolites.get_by_id(met_id).copy()\n",
+ " missing_mets.append(met)\n",
+ " ex_rxn = Reaction('EX_' + met_id)\n",
+ " ex_rxn.name = \"Exchange reaction for \" + met_id\n",
+ " ex_rxn.lower_bound = -1000\n",
+ " ex_rxn.upper_bound = 1000\n",
+ " ex_rxn.add_metabolites({met:-1})\n",
+ " missing_exchanges.append(ex_rxn)\n",
+ " media_dicts[met_id] = biolog_base_dict.copy()\n",
+ " media_dicts[met_id] = {'EX_'+k:v for k,v in media_dicts[met_id].items()}\n",
+ " media_dicts[met_id]['EX_'+met_id] = 1000\n",
+ "model.add_metabolites(missing_mets)\n",
+ "model.add_reactions(missing_exchanges)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "With the input prepared, let's fill some gaps using the `iterative_gapfill_from_binary_phenotypes` function. We will gapfill each ensemble using 10 media conditions and perform the process three times for target ensemble sizes of 5 members, 25 members, and 100 members. Each ensemble generation step will be repeated 10 times with a different random sampling of 10 media conditions (e.g., 10 ensembles of 5 members, 25 members and 100 members will be generated and the mean/standard deviation of construction time will be reported)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 97.85026526451111\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 106.4863657951355\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 119.81539511680603\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 97.87515687942505\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 107.44688296318054\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 97.99315094947815\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 110.61738395690918\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 111.50042414665222\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 128.1014850139618\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 95.986576795578\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 267.31880497932434\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 381.626629114151\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 279.64290976524353\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 266.1675601005554\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 270.17031383514404\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 253.3940167427063\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 389.7195827960968\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 380.86448097229004\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 271.53583908081055\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 435.9781460762024\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 998.9393928050995\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 1333.905808210373\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 1008.801106929779\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 938.9039621353149\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 1012.624204158783\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 957.0066258907318\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 1158.7237539291382\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 1412.2274470329285\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 1309.229562997818\n",
+ "Constraining lower bound for bio1\n",
+ "starting cycle number 0\n",
+ "starting cycle number 1\n",
+ "starting cycle number 2\n",
+ "starting cycle number 3\n",
+ "starting cycle number 4\n",
+ "starting cycle number 5\n",
+ "starting cycle number 6\n",
+ "starting cycle number 7\n",
+ "starting cycle number 8\n",
+ "starting cycle number 9\n",
+ "starting cycle number 10\n",
+ "starting cycle number 11\n",
+ "starting cycle number 12\n",
+ "starting cycle number 13\n",
+ "starting cycle number 14\n",
+ "starting cycle number 15\n",
+ "starting cycle number 16\n",
+ "starting cycle number 17\n",
+ "starting cycle number 18\n",
+ "starting cycle number 19\n",
+ "starting cycle number 20\n",
+ "starting cycle number 21\n",
+ "starting cycle number 22\n",
+ "starting cycle number 23\n",
+ "starting cycle number 24\n",
+ "starting cycle number 25\n",
+ "starting cycle number 26\n",
+ "starting cycle number 27\n",
+ "starting cycle number 28\n",
+ "starting cycle number 29\n",
+ "starting cycle number 30\n",
+ "starting cycle number 31\n",
+ "starting cycle number 32\n",
+ "starting cycle number 33\n",
+ "starting cycle number 34\n",
+ "starting cycle number 35\n",
+ "starting cycle number 36\n",
+ "starting cycle number 37\n",
+ "starting cycle number 38\n",
+ "starting cycle number 39\n",
+ "starting cycle number 40\n",
+ "starting cycle number 41\n",
+ "starting cycle number 42\n",
+ "starting cycle number 43\n",
+ "starting cycle number 44\n",
+ "starting cycle number 45\n",
+ "starting cycle number 46\n",
+ "starting cycle number 47\n",
+ "starting cycle number 48\n",
+ "starting cycle number 49\n",
+ "starting cycle number 50\n",
+ "starting cycle number 51\n",
+ "starting cycle number 52\n",
+ "starting cycle number 53\n",
+ "starting cycle number 54\n",
+ "starting cycle number 55\n",
+ "starting cycle number 56\n",
+ "starting cycle number 57\n",
+ "starting cycle number 58\n",
+ "starting cycle number 59\n",
+ "starting cycle number 60\n",
+ "starting cycle number 61\n",
+ "starting cycle number 62\n",
+ "starting cycle number 63\n",
+ "starting cycle number 64\n",
+ "starting cycle number 65\n",
+ "starting cycle number 66\n",
+ "starting cycle number 67\n",
+ "starting cycle number 68\n",
+ "starting cycle number 69\n",
+ "starting cycle number 70\n",
+ "starting cycle number 71\n",
+ "starting cycle number 72\n",
+ "starting cycle number 73\n",
+ "starting cycle number 74\n",
+ "starting cycle number 75\n",
+ "starting cycle number 76\n",
+ "starting cycle number 77\n",
+ "starting cycle number 78\n",
+ "starting cycle number 79\n",
+ "starting cycle number 80\n",
+ "starting cycle number 81\n",
+ "starting cycle number 82\n",
+ "starting cycle number 83\n",
+ "starting cycle number 84\n",
+ "starting cycle number 85\n",
+ "starting cycle number 86\n",
+ "starting cycle number 87\n",
+ "starting cycle number 88\n",
+ "starting cycle number 89\n",
+ "starting cycle number 90\n",
+ "starting cycle number 91\n",
+ "starting cycle number 92\n",
+ "starting cycle number 93\n",
+ "starting cycle number 94\n",
+ "starting cycle number 95\n",
+ "starting cycle number 96\n",
+ "starting cycle number 97\n",
+ "starting cycle number 98\n",
+ "starting cycle number 99\n",
+ "building features...\n",
+ "updating members...\n",
+ "Clock time: 1040.6910407543182\n"
+ ]
+ }
+ ],
+ "source": [
+ "from medusa.reconstruct.expand import iterative_gapfill_from_binary_phenotypes\n",
+ "import time\n",
+ "import random\n",
+ "\n",
+ "num_cycles = 5\n",
+ "lower_bound = 0.05\n",
+ "flux_cutoff = 1E-10\n",
+ "\n",
+ "clock_time = {}\n",
+ "clock_time[5] = []\n",
+ "for i in range(0,10):\n",
+ " # sample without replacement\n",
+ " media_selection = random.sample(list(media_dicts.keys()),10)\n",
+ " sub_dict = {condition:media_dicts[condition] for condition in media_selection}\n",
+ " time1 = time.time()\n",
+ " ensemble = iterative_gapfill_from_binary_phenotypes(model,universal,sub_dict,num_cycles,\\\n",
+ " lower_bound=lower_bound,\\\n",
+ " inclusion_threshold=1E-10,\\\n",
+ " exchange_reactions=False,\\\n",
+ " demand_reactions=False,\\\n",
+ " exchange_prefix='EX');\n",
+ " time2 = time.time()\n",
+ " clock_time[5].append(time2-time1)\n",
+ " print(\"Clock time: \" + str(time2-time1))\n",
+ "\n",
+ "num_cycles = 25\n",
+ "clock_time[25] = []\n",
+ "for i in range(0,10):\n",
+ " # sample without replacement\n",
+ " media_selection = random.sample(list(media_dicts.keys()),10)\n",
+ " sub_dict = {condition:media_dicts[condition] for condition in media_selection}\n",
+ " time1 = time.time()\n",
+ " ensemble = iterative_gapfill_from_binary_phenotypes(model,universal,sub_dict,num_cycles,\\\n",
+ " lower_bound=lower_bound,\\\n",
+ " inclusion_threshold=1E-10,\\\n",
+ " exchange_reactions=False,\\\n",
+ " demand_reactions=False,\\\n",
+ " exchange_prefix='EX');\n",
+ " time2 = time.time()\n",
+ " clock_time[25].append(time2-time1)\n",
+ " print(\"Clock time: \" + str(time2-time1))\n",
+ " \n",
+ "num_cycles = 100\n",
+ "clock_time[100] = []\n",
+ "for i in range(0,10):\n",
+ " # sample without replacement\n",
+ " media_selection = random.sample(list(media_dicts.keys()),10)\n",
+ " sub_dict = {condition:media_dicts[condition] for condition in media_selection}\n",
+ " time1 = time.time()\n",
+ " ensemble = iterative_gapfill_from_binary_phenotypes(model,universal,sub_dict,num_cycles,\\\n",
+ " lower_bound=lower_bound,\\\n",
+ " inclusion_threshold=1E-10,\\\n",
+ " exchange_reactions=False,\\\n",
+ " demand_reactions=False,\\\n",
+ " exchange_prefix='EX');\n",
+ " time2 = time.time()\n",
+ " clock_time[100].append(time2-time1)\n",
+ " print(\"Clock time: \" + str(time2-time1))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "