• No results found

Simulated Annealing with Backbone Flexibility

As we have seen, the FlexBBInteractionGraph cannot perform single rotamer substi- tutions to move a single residue from one backbone conformation to another backbone conformation without breaking the backbone. Its options are to either restrict the alter- nate rotamer to belonging to the same backbone conformation as the current rotamer at a particular residue, or to assign multiple rotamers at once so that all of the residues that belong to the same backbone segment end up in the same backbone conformation. The restriction and the multiple-assignment options define the two basic rotamer substitution operations that make up the interface between the FlexBBSimAnnealer

and the FlexBBInteraction- Graph. The first type of state substitution is one in which the backbone does not move – the current state and the alternate state are rotamers originating from the same backbone conformation. The second type of state substitution is one in which the backbone does move, and all residues that belong to the same flexible-backbone segment will change their state.

7.4.1

Types of State Substitutions

While there are several possible ways in which the annealer could restrict its alternate rotamer choice, the way we have implemented is to have the graph provide a list of all

of those rotamers to the annealer, and then have the annealer pick one from among this list. By forcing the graph to tell the annealer which states are available, the annealer is freed from having to understand the relationships between various rotamers. This simplifies the annealer. This does not complicate the graph, which already has to understand whether various rotamers originate from the same backbone in order to represent the appropriate set of rotamer-pair energies.

The simultaneous assignment of multiple rotamers to several residues could also be handled in several ways. The way we have chosen is to have the annealer choose one new rotamer for a single residue which will bring that residue to a new backbone conformation and to have the graph choose the rotamers for all other residues that belong to the same flexible backbone segment. The graph communicates which rotamers it has chosen for the other residues whose states it has altered to the annealer through an input parameter to the multiple-assignment method call. This input parameter is an array representing the state assignment to each vertex in the graph.

The graph has to choose an alternate rotamer for each of those residues involved in the multiple assignment except the one residue the annealer specifies the alternate state for. The graph selects alternate rotamers with the goal of increasing the odds that the substitution will be accepted: it selects those rotamers that are more likely to fit. The graph selects the alternate rotamer for a residue as the rotamer on the alternate backboneb which has the same amino acid type as the current rotamer, and that minimizes the sum of the atom distances for all side-chain atoms among the set of rotamers on backboneb. That is, in the current rotamer assignment, the rotamer r on backboneb′ occupies some region of space. If the currently assigned rotamer is decent,

then the rotamer on the alternate backbone b that is most likely to fit into the region thatr vacates is the one has its atoms in close to the same space. It might be possible to generate metrics for volumetric proximity that do a better job matching rotamers from different backbones, however, we are content for now with the acceptance rates for backbone motion based on the atom-distance metric.

With a scheme to select alternate rotamers for those residues undergoing a backbone substitution, we are able to define a slight variation on the multiple- assignment-rotamer substitution. This variation makes pure backbone move: instead of specifying an alter- nate rotamer for one of the residues in a flexible segment, the annealer specifies which of the alternate backbone conformations it would like to try for the segment and then the graph selects an alternate rotamer for each residue. Since the amino acid sequence does not change at any position, and because the new rotamer assignment will be close

to the old rotamer assignment, this rotamer substitution type can be viewed as simply moving the backbone.

7.4.2

Rotamer Substitution Algorithm

The new interface between the simulated annealer consists of four methods that the interaction graph must support and that the annealer invokes:

• float considerSubstitution(int nodeIndex, int altState );

• float considerBackboneMove( int segmentIndex, int altBackbone, std::vector< int > & graphStateAssignment);

• float considerSubstitutionWithBackboneMove( int nodeIndex, int altState, std::vector< int > & graphStateAssignment );

• void commitConsideredSubstitution();

The algorithm for the considerSubstitution method is the same as for the PD- InteractionGraph; the vertex traverses each of its edges, at each edge retrieving the pair energy for the alternate rotamer, and then sums these pair energies. The difference in the sum of the energy for the alternate rotamer and the energy for the current energy (which has been cached) is the ∆E for the substitution.

The algorithm for the considerBackboneMove method is more complicated. Since the state assigned to several nodes changes, the graph must retrieve the energies stored in all edges incident upon any of those nodes that change. It does this by starting at one of the vertices in backbone segment that is undergoing a backbone move, and then makes a depth-first traversal of theintra-segment edges. The intra-segment edges are those that are incident upon nodes that are part of the same flexible backbone segment, and are marked in the graph with a boolean flag. Each vertex visited in the depth-first traversal makes its own edge traversal, summing the pair energies that its alternate state has with the other vertices in the graph. In order to prevent double- counting of those interaction energies stored in the intra-fragment edges, each vertex counts only the interaction energies stored on intra-fragment edges that connect the vertex to vertices with a higher index.

The algorithm for the considerSubstitutionWithBackboneMove method is the same as for the considerBackboneMove method, except that the vertex from which

the depth-first traversal begins can be assigned any alternate state, and not just the alternate state that is closest for its backbone to the current state.

The advantage of implementing the data structure for rotamer-pair energies as a graph could not be any clearer than in this case: the rather difficult task of computing the ∆E for a backbone move can be implemented simply with a well known and easy graph operation, a depth-first traversal.