Just thinking out loud.
How would a “Brourd bot” work, one based on next move selection by non-random energy considerations? If I have filled all the nucleotide positions and still have an unstable solution the “Brourd bot” would need to discriminate between which moves would produce no energy change, positive energy change, and negative energy change and how these moves would bring the solution closer to an acceptable solve. And then need rules for when to apply increasing or decreasing the energy effect of a move. (Zero energy moves may have special uses).
For example, we know a G boost in the first position of a hairpin loop causes an increase in negative energy which we usually want. Or a substitution of an AU pair for a GC pair causes a decrease in negative energy.
So it would need a catalog of expected energy effects for any type of move considered. And it would have to examine the native current state versus the target current state energy landscape to choose the next move. Presumably it would look at the red unstable states in both and try and alter the native current state by using the above ideas so that it better resembles the final desired target shape. That becomes a simultaneous solution problem.
I also wonder if a fuzzy logic implementation would be useful.
Not being a programmer, that is about as far as I’m likely to get.
If I’m not mistaken, this is the way that RNAInverse from the ViennaRNA package works. Which was (is?) running on EteRNA as “ViennaBot”. For the record, the algorithm not only takes into account the free energy of the current sequence relative to the target structure, but also the free energy of the misfold.
As far as I can tell, it didn’t perform very impressively, even disregarding constraints like all other bots… The main problem is that it’s too easy to get stuck in an impasse (in thermodynamics, you’d probably call that a local minima).
I would say, it’s probably not the way Brourd reached the point where he is now…
It must be a poor implementation of Brourd.
Perhaps he would explain how he solves them exactly…
move type-class: flip(pair), swap(pair, single nt),
location type-class: stack, loop(internal, hairpin, bulge, symmetric, asymmetric), paired(lonely, stack), unpaired-other. (WC, non-canonical).
energy effect type-class: zero, positive, neg.
comparison type-class: equal, less than, more than, large, small, between.
logical type-class: and, not, or, nand, nor
What am I missing so far?
I think you’re missing something that we could call non-transitivity. For example, it might be that from state A, there are moves x and y, both resulting in new states that are supposedly unfavorable, a positive contribution to free energy. And yet, from that same state A, the operation x+y transitions to a favorable outcome, a negative contribution to free energy. That’s the wall on which RNAInverse bangs its head.
I believe Brourd himself mentions something like that in one of his guides. But he has some rule or method of invoking it. I don’t know how it would be coded in an algorithm.
My point being that I think Brourd uses logic more than montecarlo simulation in his solution generation. We just don’t know what all it encompasses, and he may not either.
But a formal attempt at knowledge capture wouldn’t be a bad thing.
maybe ending with something like this: