biosustain / cameo Goto Github PK
View Code? Open in Web Editor NEWcameo - computer aided metabolic engineering & optimization
Home Page: http://cameo.bio
License: Apache License 2.0
cameo - computer aided metabolic engineering & optimization
Home Page: http://cameo.bio
License: Apache License 2.0
Hi all,
I have been getting an error upon loading cameo about optlang not having solvers installed and missing the glpk interface. When executing "import cameo" I get
ERROR:optlang:No solvers available.
AttributeError: 'module' object has no attribute 'glpk_interface'
My guess is this has happened since some upgrade recently because a while back Cameo was working fine. I tried regular install through pip with a --pre flag and also using the requirements.txt files but no luck. I do have GLPK installed on my Mac and cobrapy is working as it should.
After looking at the installation output from pip i noticed that swiglpk failed at building the wheel and then installed through setup.py correctly. With wheel I get the error
You are attempting to install a package to a directory that is not
on PYTHONPATH and which Python does not read ".pth" files from. The
installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:
build/bdist.macosx-10.5-x86_64/wheel/
I will take a look at the suggested fixes. But this seems abnormal to me, any ideas on a fix?
Hi!
When running the cameo in methods using multiprocessing, finding essential genes is broken.
cameo (0.11.3)
cobra (0.10.1)
One fix can be to allow one to set the number of jobs to one in the find_essential_genes method, so it wouldn't run using multiprocessing. Because when the num_jobs
argument is None, cobrapy takes the cpu_count
and computes gene deletions using a Pool. However, it is not possible to spawn a pool inside a child process.
The fix would be to check allow setting the number of jobs and run single process mode in cameo. Computing the essential genes is not the bottleneck in any of the methods.
Cheers,
João
Code cameo-notebooks/08-high-level-API.ipynb
Optimizing 8 pathways
---------------------------------------------------------------------------
RemoteTraceback Traceback (most recent call last)
RemoteTraceback:
"""
Traceback (most recent call last):
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/multiprocessing/pool.py", line 119, in worker
result = (True, func(*args, **kwds))
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/multiprocessing/pool.py", line 44, in mapstar
return list(map(*args))
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/site-packages/cameo/api/designer.py", line 94, in __call__
max_evaluations=max_evaluations, max_knockouts=15, max_time=max_time)
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/site-packages/cameo/strain_design/heuristic/evolutionary_based.py", line 144, in run
use_nullspace_simplification=use_nullspace_simplification)
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/site-packages/cameo/strain_design/heuristic/evolutionary/optimization.py", line 766, in __init__
self.essential_genes = {g.id for g in find_essential_genes(self.model)}
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/site-packages/cobra/flux_analysis/variability.py", line 240, in find_essential_genes
deletions = single_gene_deletion(model, method='fba')
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/site-packages/cobra/flux_analysis/deletion.py", line 263, in single_gene_deletion
method=method, num_jobs=num_jobs)
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/site-packages/cobra/flux_analysis/deletion.py", line 147, in _multi_deletion
num_cpu, initializer=_init_worker, initargs=(model,)
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/multiprocessing/context.py", line 118, in Pool
context=self.get_context())
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/multiprocessing/pool.py", line 168, in __init__
self._repopulate_pool()
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/multiprocessing/pool.py", line 233, in _repopulate_pool
w.start()
File "/usr/local/miniconda3/envs/cameo/lib/python3.4/multiprocessing/process.py", line 103, in start
'daemonic processes are not allowed to have children'
AssertionError: daemonic processes are not allowed to have children
"""
The above exception was the direct cause of the following exception:
AssertionError Traceback (most recent call last)
<ipython-input-8-327cca7e82b0> in <module>()
----> 1 report = api.design(product='vanillin', view=mp_view)
/usr/local/miniconda3/envs/cameo/lib/python3.4/site-packages/cameo/api/designer.py in __call__(self, product, hosts, database, aerobic, view)
185 raise KeyError("Product %s is not in the %s database" % (product, database.id))
186 pathways = self.predict_pathways(product, hosts=hosts, database=database, aerobic=aerobic)
--> 187 optimization_reports = self.optimize_strains(pathways, view, aerobic=aerobic)
188 return optimization_reports
189
/usr/local/miniconda3/envs/cameo/lib/python3.4/site-packages/cameo/api/designer.py in optimize_strains(self, pathways, view, aerobic)
219 logger.info('Running heuristic optimizations on predicted pathways.')
220 opt_gene_runner = _OptGeneRunner(options=self.options)
--> 221 designs = view.map(opt_gene_runner, strategies)
222 logger.info('Processing heuristic optimization results.')
223 results = self.build_results_data(designs, strategies, results, 'PathwayPredictor+OptGene')
/usr/local/miniconda3/envs/cameo/lib/python3.4/site-packages/cameo/parallel.py in map(self, *args, **kwargs)
53
54 def map(self, *args, **kwargs):
---> 55 return self.pool.map(*args, **kwargs)
56
57 def apply(self, func, *args, **kwargs):
/usr/local/miniconda3/envs/cameo/lib/python3.4/multiprocessing/pool.py in map(self, func, iterable, chunksize)
258 in a list that is returned.
259 '''
--> 260 return self._map_async(func, iterable, mapstar, chunksize).get()
261
262 def starmap(self, func, iterable, chunksize=None):
/usr/local/miniconda3/envs/cameo/lib/python3.4/multiprocessing/pool.py in get(self, timeout)
606 return self._value
607 else:
--> 608 raise self._value
609
610 def _set(self, i, obj):
AssertionError: daemonic processes are not allowed to have children
Just found that a cobrapy model defines the property boundaries
whereas the pathway predictor expects exchanges
. We are thinking about implementing further methods/properties here (opencobra/cobrapy#589) but we should make sure the right one is used by cameo (boundaries
includes sink and demand reactions).
Implement optstoic http://www.nature.com/articles/srep16009
Apply to previously generated heterologous pathways from pathway predictor / optstrain
Ubuntu 16.04
Python 3.5.2
I wrote following code
from cameo import models
model = models.bigg.e_coli_core
# O2t is reversible reaction
O2t = model.reactions.get_by_id('O2t')
constrain = model.solver.interface.Constraint(O2t.flux_expression, lb=30)
model.solver.add(constrain)
solution = model.solve()
print(solution.x_dict['O2t'])
and it return expected result as 30
Then I changed constrain as
model.solver.interface.Constraint(O2t.forward_variable, lb=30)
and it return an unexpected result as 21.799492655998755
I confused because when I checked source code, I saw that
flux_expression = 1. * self.forward_variable - 1. * self.reverse_variable
Actually, I want to add a constraint with just reverse_variable or forward_variable without using flux_expression but it is not working. For example, I want to add constraint like abs(reaction.flux_expression) >= 0
but abs is not linear or quadratic function; thus, I decide to use other implementation of abs as self.forward_variable + self.reverse_variable
but it does not work because of the reason explained above.
I started to learn cameo and tried following code.
from cobra import Model, Metabolite, Reaction
from cameo.core.solver_based_model import to_solver_based_model
# max cone * cone_margin + popsicle * popsicle margin
# subject to
# cone * cone_cost + popsicle * popsicle_cost <= budget
cone_selling_price = 7.
cone_production_cost = 3.
popsicle_selling_price = 2.
popsicle_production_cost = 1.
starting_budget = 100.
cone = Reaction("cone")
popsicle = Reaction("popsicle")
# constrainted to a budget
budget = Metabolite("budget")
budget._constraint_sense = "L"
budget._bound = starting_budget
cone.add_metabolites({budget: cone_production_cost})
popsicle.add_metabolites({budget: popsicle_production_cost})
# objective coefficient is the profit to be made from each unit
cone.objective_coefficient = \
cone_selling_price - cone_production_cost
popsicle.objective_coefficient = \
popsicle_selling_price - popsicle_production_cost
m = Model("lerman_ice_cream_co")
m.add_reactions((cone, popsicle))
solver_model = to_solver_based_model(m)
solution_cameo = solver_model.solve()
solution_cobra = m.optimize()
print(solution_cobra.f)
print(solution_cameo.f)
Output:
133.33333333333334
0.0
Cobra and cameo result are different. cameo do not solve the problem. Did I do something wrong?
Run 1: FVA on Recon 2 network with some custom objective function with no additional constraints to those already come with the model. This run takes 3-4 mins.
Run 2: Add the following three constraints into the above model, FVA does not finish (we stopped the run manually after 2 hours).
c6c0326e-f909-11e6-9a45-c5832ca45183: var_PPDOx_1 = 1 -> 1e-05 <= 1.0*PPDOx - 1.0*PPDOx_reverse_c99fa c6c1449c-f909-11e6-9249-c5832ca45183: var_PPDOy_1 = 1 -> 1e-05 <= 1.0*PPDOy - 1.0*PPDOy_reverse_a61f6 c6c1a68c-f909-11e6-9e90-c5832ca45183: 1 <= var_PPDOx_1 + var_PPDOy_1 <= 2
Environment info:
Solver: Cplex
Python: 3.5
When trying to import cameo.api, cameo.strain_design and its sub-packages I get the following gnomic import error:
~\Miniconda3\lib\site-packages\cameo\core\target.py in <module>()
16 import numpy
17 import six
---> 18 from gnomic import Accession, Feature, Del, Mutation, Ins, Type, Genotype, genotype_to_string, genotype_to_text
19
20 from cameo import ui
ImportError: cannot import name 'Accession'
I tried multiple versions of gnomic and cameo, but can't get around this issue.
Full error message:
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-17-68ffa8a21102> in <module>()
----> 1 from cameo.strain_design.heuristic.evolutionary_based import OptGene
2
3 optgene = OptGene(model)
4 from cameo.flux_analysis import lmoma
5 results = optgene.run(target="ADH21",
~\Miniconda3\lib\site-packages\cameo\strain_design\__init__.py in <module>()
15 from __future__ import absolute_import
16
---> 17 from cameo.strain_design.deterministic import OptKnock, FSEOF, DifferentialFVA
18 from cameo.strain_design.heuristic import OptGene
~\Miniconda3\lib\site-packages\cameo\strain_design\deterministic\__init__.py in <module>()
13 # limitations under the License.
14
---> 15 from .flux_variability_based import *
16 from .linear_programming import OptKnock
~\Miniconda3\lib\site-packages\cameo\strain_design\deterministic\flux_variability_based.py in <module>()
53 from cameo.flux_analysis.simulation import pfba, fba
54
---> 55 from cameo.core.strain_design import StrainDesignMethod, StrainDesignMethodResult, StrainDesign
56 from cameo.core.target import ReactionKnockoutTarget, ReactionModulationTarget, ReactionInversionTarget
57
~\Miniconda3\lib\site-packages\cameo\core\strain_design.py in <module>()
24
25 from cameo.core.result import Result
---> 26 from cameo.core.target import EnsembleTarget, Target
27 from cameo.visualization.plotting import plotter
28
~\Miniconda3\lib\site-packages\cameo\core\target.py in <module>()
16 import numpy
17 import six
---> 18 from gnomic import Accession, Feature, Del, Mutation, Ins, Type, Genotype, genotype_to_string, genotype_to_text
19
20 from cameo import ui
ImportError: cannot import name 'Accession'
Based on the principles presented in this publication (doi:10.1038/nchembio.971) and summarized here (http://dx.doi.org/10.1016/j.cbpa.2016.12.023) as:
To identify the most promising pathways out of many different possible routes, a comprehensive pathway analysis is recommended. Such an analysis compares different pathway candidates according to physicochemical properties, including resources consumption, thermodynamic feasibility, kinetic proficiency, toxicity and hydrophobicity of intermediates, as well as overlap with endogenous metabolism.
I suggest adding some sort of scoring or at least reporting of these intrinsic pathway parameters to the pathway predictor in cameo. This may contribute to coming to an informed decision on which pathway to choose out of those that were predicted by the tool.
For some reason the ~ doesn't do what it should do in ~cameo.io.load_model
. http://www.sphinx-doc.org/en/stable/markup/inline.html (see for example http://cameo.bio/02-import-models.html)
Otherwise, it will be removed in the process of deleting blocked reactions from the model leading to further problems downstream.
Sometimes cameo.api.design()
runs up to the end. Sometimes its infeasible.
Please checkout the cli
branch. You can simply run:
./bin/cameo -p vanillin -of csv -y -t
from cameo project folder.
If a problem repeatedly becomes infeasible in Phase II (that is, after CPLEX has achieved a feasible solution), then numeric difficulties may be occurring. It may help to increase the Markowitz tolerance in such a case. By default, the value of the parameter EpMrk is 0.01, and suitable values range from 0.0001 to 0.99999.
Sometimes slow progress in Phase I (the period when CPLEX calculates the first feasible solution) is due to similar numeric difficulties, less obvious because feasibility is not gained and lost. In the progress reported in the log file, an increase in the printed sum of infeasibilities may be a symptom of this case. If so, it may be worthwhile to set a higher Markowitz tolerance, just as in the more obvious case of numeric difficulties in Phase II.
Executing lmoma with larger models causes recursion depth be exceed. This occurs on a model we are building but can be replicated on included BIGG models.
Occurs on Ubuntu 14.04, 16.04, 16.10. Manjaro 16.10 with Cameo version 0.8.0 and python versions 2.7 and 3.5
Code to replicate:
import cameo
from cameo.flux_analysis import fba, lmoma
model = cameo.models.bigg.iJN746
ref = fba(model)
result = lmoma(model, reference=ref)
Increasing maximum recursion depth with sys.setrecursionlimit(2000)
also breaks, with python throwing a type error.
The search in the database is not very reliable. I already changed it to be lower-case only, which helped. Also, MetaNetX has mapping for things that are redundant, however I can only find one source and one name, where there should be sources and names or synonyms.
I cannot find L-Serine, L-Lactate, etc.
There are several algorithms to do this:
I just read the
http://cameo.bio/development.html
and found some out of date things due to the new cobrapy release.
Things like
Solver interface
Cameo deviates from cobrapy in the way optimization problems are solved by using a separate solver interface provided by the optlang package (see optlang_interface). The following benefits ....
I understood that cobrapy now also uses the optlang approach with all its advantages. This should be updated in the documentation.
From @hredestig on January 10, 2017 15:1
Original paper: http://journals.plos.org/ploscompbiol/article?id=10.1371%2Fjournal.pcbi.1003378
Used very effectively in http://www.sciencedirect.com/science/article/pii/S1096717616300350
Kristian has already done some work towards this goal https://github.com/biosustain/cameo/blob/master/cameo/flux_analysis/structural.py
Copied from original issue: DD-DeCaF/scrum#37
optswap [1] is an algorithm for recommending co-factor swaps for strain design - let's implement this in cameo using the pattern also used for knockout optimisation
[1] King ZA, Feist AM. Optimizing Cofactor Specificity of Oxidoreductase Enzymes
for the Generation of Microbial Production Strains—OptSwap. Ind
Biotechnol. 2013;9:
236–246. doi:10.1089/ind.2013.0005
Hi.
I was trying to search for some compounds using cameo.
When I run cameo search "poly-γ-glutamic acid"
I can find an hit.
Loading product database ...
Searching product database ...
The following products were found:
name formula mass InChI search_rank
MNXM77536 poly-L-glutamic acid 0
But I cannot find in in any universal_model
.
db = models.universal.metanetx_universal_model_bigg_rhea_kegg_brenda
db.metabolites.MNXM77536
AttributeError: DictList has no attribute or entry MNXM77536
Maybe disconnected metabolites should not be in api.products so that users are not mislead.
Cheers
make sure website and notebooks are updated to match new release
from cameo import models
model_orig = models.bigg.iJO1366
py = product_yield(model.reactions.EX_thr__L_e, model.reactions.EX_glc__D_e)
optswap = CofactorSwapOptimization(model=model, objective_function=py)
optswap.run(max_evaluations=2000, max_size=2)
gives a plot that never shows up instead we get
/Users/henred/venv/pyv35/lib/python3.5/site-packages/bokeh/io.py:589: UserWarning:
Cannot find a last shown plot to update. Call output_notebook() and show(..., notebook_handle=True) before push_notebook()
and this is the case with all the other heuristic optimization methods as well, e.g. OptGene
Here is a minimal script to cause a crash on my machine. The crash only occurs if cameo is imported after cobra.
# system_profiler SPSoftwareDataType
# > Software:
# >
# > System Software Overview:
# >
# > System Version: macOS 10.12 (16A323)
# > Kernel Version: Darwin 16.0.0
# brew list glpk
# > /usr/local/Cellar/glpk/4.60/bin/glpsol
# > /usr/local/Cellar/glpk/4.60/include/glpk.h
# > /usr/local/Cellar/glpk/4.60/lib/libglpk.40.dylib
# > /usr/local/Cellar/glpk/4.60/lib/ (2 other files)
import cobra
print(cobra.__version__)
# > 0.5.2
import cameo
print(cameo.__version__)
# > 0.7.1
model = cameo.models.bigg.iJO1366
# > GLPK initialization failed
# > [1] 77230 abort python3 cobrapy_cameo_crash.py
test_reactions_in_group_become_blocked_if_one_is_removed fails when rolling back changes to the model due variable not being properly removed
The final OptGene result object is empty.
When merging pathways with other manipulations, knock-in targets should be placed first to avoid missing identifiers when applying the remaining targets.
After my input for OptKnock:
‘optknock = OptKnock(model, fraction_of_optimum=0.00001, use_nullspace_simplification=False)’
The output is an error message ending with
solver status is 'infeasible' .
For OptGene: Either I get a 'notebook handlebar' error or the kernel crashes and using python in the terminal I get en empty result.
I attach model and code:
Ubuntu 16.04
Python 3.5.2
solver: cplex
I have tried flux variability analysis with cameo and cobra. But their results are different. I report my experiment in this notebook.
Moreover, cameo's fva runs 10 times slower in my machine as you see in the notebook.
What is the wrong with this code?
Hello,
I have been trying to perform the cobrapy's Ice Cream example (https://cobrapy.readthedocs.io/en/latest/milp.html)
in cameo:
from cameo import Model, Metabolite, Reaction
cone = Reaction("cone")
popsicle = Reaction("popsicle")
cone.variable_kind = "integer"
popsicle.variable_kind = "integer"
# constrainted to a budget
budget = Metabolite("budget")
budget._constraint_sense = "L"
budget._bound = starting_budget
cone.add_metabolites({budget: cone_production_cost})
popsicle.add_metabolites({budget: popsicle_production_cost})
# objective coefficient is the profit to be made from each unit
cone.objective_coefficient = cone_selling_price - cone_production_cost
popsicle.objective_coefficient = popsicle_selling_price - popsicle_production_cost
m = Model("lerman_ice_cream_co")
m.add_reactions((cone, popsicle))
print('Objective (%s): %s' % (m.objective.direction, m.objective.expression))
print('x:', m.optimize().x_dict)
print('y:', m.optimize().y_dict)
For cameo this results in the following:
Objective (max): 4.0*cone - 4.0*cone_reverse_29d6f + 1.0*popsicle - 1.0*popsicle_reverse_a0c73
x: OrderedDict([('cone', 0.0), ('popsicle', 0.0)])
y: OrderedDict([('cone', 0.0), ('popsicle', -0.6666666666666665)])
And for cobrapy in (I was not sure how to display the expression of the objective function, there are however both maximized):
x: {'popsicle': 1.0, 'cone': 33.0}
y: None
First of the fluxes differ, secondly the y-value correspond to metabolites and reactions for cobrapy and cameo, respectively. Clearly, I'm missing something here. I would greatly appreciate any explanation on this matter. Also I believe it would be good to state information explaining these differences on the cameo vs cobrapy page (http://cameo.bio/development.html#cameo-vs-cobrapy).
Thank you in advance
The travis-ci setup is not broken for pull-requests from forks since those do not have access to secret environmental variables ($SECRET_CPLEX_LINK in https://github.com/biosustain/cameo/blob/devel/.travis.yml#L26).
refactor unit-tests to not run test that require cplex when not available
because the reaction (still included in the first model) will erroneously point to the second model. Alternatively, model.add_reaction(s) could make a copy first.
Maybe this should be solved in cobrapy instead.
Hi! We should support metabolite turnover as in:
Brochado, A. R., Andrejev, S., Maranas, C. D., & Patil, K. R. (2012). Impact of stoichiometry representation on simulation of genotype-phenotype relationships in metabolic networks. PLoS Computational Biology, 8(11), e1002758. doi:10.1371/journal.pcbi.1002758
http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002758#s4
done when try.cameo.bio works again
A RuntimeError: Set changed size during iteration
is thrown when removing a metabolite with method="destructive"
.
This was tested in a Windows 10 OS, inside a Conda Python=3.4.5 environment, with the devel branch of Cameo.
A minimal example is provided in the attachment:
minimal_example.zip
Prevent cameo to knockout hard-fixed constraints such as ATPM during heuristic optimization process.
Suggestions: do not knockout reactions with fixed constraints other then 0.
done when having a first reviewed refactored version of cameo that doesn't subclass cobrapy core classes and passes all current tests
Hi,
We are trying to use constraints associated with indicator variables. However, they do not seem to be providing the expected impact on the fba solutions. In the below example, we want at least one of R1 and R2 to have a flux over 10^-6. Accordingly, we created two indicator variables (one for each reaction's constraint, i.e., >= 10^6). Then, we created an additional constraint which enforces that at least one of the indicator variables should be 1. As the example run output shows, these constraints do not seem to be taken into consideration. Is this a bug, or we are somehow setting things wrong? Thanks.
from cobra.core import Model, Reaction
from cameo.core import SolverBasedModel, Metabolite
from cameo.core.solution import Solution
from cameo.flux_analysis import fba
import optlang
model = Model('example_model')
r1 = Reaction('R1')
r1.name = 'R1'
r1.lower_bound = 0.
r1.upper_bound = 1000.
r1.objective_coefficient = 0.
r2 = Reaction('R2')
r2.name = 'R2'
r2.lower_bound = 0.
r2.upper_bound = 1000.
r2.objective_coefficient = 0.
r3 = Reaction('R3')
r3.name = 'R3'
r3.lower_bound = 0
r3.upper_bound = 1000
r3.objective_coefficient = 0
ACP_c = Metabolite(
'ACP_c',
formula='C11H21N2O7PRS',
name='acyl-carrier-protein',
compartment='c')
r1.add_metabolites({ACP_c: 1.0})
r2.add_metabolites({ACP_c: 1.0})
r3.add_metabolites({ACP_c: -1.0})
model.add_reactions([r1, r2, r3])
smodel = SolverBasedModel(description=model)
#smodel.solver.interface = optlang.cplex_interface
lb = 10 ** -6
metabolite = ACP_c
indicator_vars = []
for r in metabolite.producers():
var = smodel.solver.interface.Variable("var_%s" % r.id, type="binary")
c = smodel.solver.interface.Constraint(r.flux_expression, lb=lb, indicator_variable=var,
active_when=1) # When the indicator is 1, constraint is enforced)
smodel.solver.add(c)
indicator_vars.append(var)
expr = sum(indicator_vars)
c = smodel.solver.interface.Constraint(expr, lb=1, ub=len(indicator_vars))
smodel.solver.add(c)
df = fba(smodel)
for r in metabolite.producers():
print(r.id, df[r.id], r.forward_variable.primal, r.reverse_variable.primal)
print(smodel.solution.status)
print(smodel.solver)
print(smodel.solver.interface)`
R2 0.0 0.0 0.0
R1 0.0 0.0 0.0
optimal
\Problem name:
Ran 3 tests in 21.891s
Maximize
OK
_240ad1f1mf55em11e6mb6came9177c3519c1#0:
Subject To
ACP_c#0: R1 - R1_reverse_cda52 + R2 - R2_reverse_8c6d2
- R3 + R3_reverse_5c108 = 0
_240ad1fcmf55em11e6mae0ame9177c3519c1#1: var_R2 + var_R1
- Rg_240ad1fcmf55em11e6mae0ame9177c3519c1#1
= 1
_240ad1f9mf55em11e6ma1f3me9177c3519c1#0: var_R2 = 1 -> R2 - R2_reverse_8c6d2
>= 0.000001
_240ad1fbmf55em11e6m8477me9177c3519c1#1: var_R1 = 1 -> R1 - R1_reverse_cda52
>= 0.000001
Bounds
0 <= R1 <= 1000
R1_reverse_cda52 = 0
0 <= R2 <= 1000
R2_reverse_8c6d2 = 0
0 <= R3 <= 1000
R3_reverse_5c108 = 0
0 <= var_R2 <= 1
0 <= var_R1 <= 1
0 <= Rg_240ad1fcmf55em11e6mae0ame9177c3519c1#1 <= 1
Binaries
var_R2 var_R1
End
<module 'optlang.cplex_interface' from 'C:\Python35\lib\site-packages\optlang\cplex_interface.py'>
Process finished with exit code 0`
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.