To solve problems with the Flask, one has to map the problem to sets of atoms with binding sites, run the Flask simulator, and analyze the results. A closer examination of Flask binding site properties will help explain how they are used.
Problems involving rings of atoms can give insight
into simple membrane formation. Consider an attempt to form a
ring of atoms as in Figure 1a. Each A binding site has number 2.
When two free atoms are collided, they will form a molecule as shown in
Figure 1b because only one bond is formed from the two binding sites
If one of these modules is collided with a free atom, then a loop of
three atoms is formed as in Figure 1c. If two molecules with two
atoms each collide, then a molecule with a loop of four atoms will be
formed as in Figure 1d. No other types of molecules can be formed.
Figure 1 - Binding example. Atoms in (a) combine to form (b). The molecule in (b) combines with a free a atom to form (c). Two
molecules of form (b) combine to form (d). Not other configurations are possible
Figure 2a and b shows another attempt at forming a
loop. Each atom has an A
binding site and a B binding
site. Whenever two atoms are collided, a simple two atom molecule
is formed because both A and B bonds are formed. By
changing the binding sites to type onePer
a simulation will produce longer chains of atoms as shown in
Figure 2d and e. The onePer
type applies to atoms, not molecules, so any atom in a molecule can
only share one bond with any other atom, but loops can still be
formed. Molecules that are not loops have two free binding sites
in three forms: two A
sites, two B sites, or one A
and one B site. If a free atom collides with one of the first two
forms, then the line of atoms will be extended by one atom. If a
free atom collides with the third form, the loop is completed.
Because of the stochastic nature of the Flask control mechanism, the
Flask will have a number of all the structures early in the
simulation. Since not all collisions will form closed loops, the
chains of atoms can grow and form longer loops.
Figure 2 - (a) and (b)
illustrate simple binding. The remaining sub-figures illustrate onePer for forming chains
The nOf attribute
is used for a group of binding sites on the same atom. The number
n indicates the maximum number
of the nOf binding sites
that can form bonds. One use of this type of binding site is to
create a choice in binding. An atom with 1of binding sites A, B, and
only make a bond with one of the three sites in a non-deterministic
way. One must be careful in this version of the Flask that all
the nOf binding sites
associated with an atom have the same n.
Conditional binding sites are used to activate a
new binding site once all the other binding sites have been
filled. One use for this binding site type is to indicate that a
formed a solution to a problem. For example, consider
the arithmetic example from the Introduction.
But, one could add a conditional binding site named Solution to the sum atom.
When the sum atom had
attached to two value atoms,
the conditional binding site would fire. One use of this binding
is to link to an atomic machine that outputs the solution to the
sites are typically used in conjunction with conditional binding
sites. An atom can be constructed that looks for molecules that
have formed a solution to a problem by attaching only to molecules that
have all the binding sites that the atom has and sites for. If the atom
is an atomic machine, then some action can be formed. In other
cases, the atom with the and sites
will fire a conditional bond that would bind to an atomic
machine. See the examples in the following sections.
sites will only link to other atoms in the same molecule. This
type of site will not bind to free atoms. IntraMolecular binding
sites are useful when trying to form a structure of bonds in a molecule
while preventing attachment to external molecules or free atoms.
The second TSP example in a following section provides an example of
the use of this type of binding site.
attribute of a binding site is an arbitrary number that can be
used to encode some aspect of a problem onto the Flask model. One
use of this attribute is encoding path lengths as in TSP. Note
that atomic mass can be used to assign a value to an atom, while the
bond length is used to assign a value to a binding site and to any
bonds formed from the binding site.
To set up a simulation, one must map the real
world problem to be solved onto a set of atoms and their binding
sites. By carefully selecting binding sites and providing an
adequate number of atoms, a simulation run can then form molecules that
represent problem solutions. An atomic machine can be used to
find these solution molecules and output their structure. One
atomic machine in the Flask library will compare the bond lengths of
two solution molecules. The molecule representing the better
is retained; the other is released or destroyed.
There are two ways in which a problem can be defined and run on the Flask. The first involves using the FlaskRunner GUI application (see Figure 3). The user of this program defines atoms, binding sites, and events using windows dialogs. Once the problem is defined, the user can then use FlaskRunner to run the simulation and display results.
The second method is to use the Flask object library to define and run a problem. This method requires that the user prepare his or her problem by developing a Java program to create atoms and binding sites and calling the Flask object to run a simulation.
Figure 3 - FlaskRunner with pop up MoleViewer window. Click to enlarge.
- GUI for constructing, saving, and loading projects
- Runs simulations while producing an activity graph
- Molecular views to inspect solution molecules