Hi Jean,
There’s an article about it that’s under review just now. In the meantime, I would be happy
to privately share a copy of the manuscript if you would like.
Briefly, the input to kgen consists of:
1. a database of parts
2. a circuit “skeleton” or specification
3. a fitness function of the observables (and possibly the circuit itself)
and the output is a list of circuits made from the parts and fitness scores for each.
A good function for discovering simple oscillators is (negative) cross-correlation of two
output agents. That is what we use in the article and example.
The skeleton is essentially a list of part types that constitute a valid circuit, e.g. a two
operon circuit like this,
[ a gcc:Operator ] [ a gcc:Promoter ] [ a gcc:RibosomeBindingSite] [ a gcc:CodingSequence ] [ a gcc:Terminator ]
[ a gcc:Operator ] [ a gcc:Promoter ] [ a gcc:RibosomeBindingSite] [ a gcc:CodingSequence ] [ a gcc:Terminator ]
where “[ a Foo ]” is read as “some part with type Foo”. In the paper we also discuss, but
do not implement, mutating the circuit syntax.
The kgen program fills in the circuit with types from the database (that have the details
like rates, transcription factors and so forth), calls for the circuit to be simulated, evaluates
the result, mutates, evaluates again, and so forth.
Best wishes,
-w