next up previous
Next: Evolving Brick structures Up: Simulating Bricks Structures Previous: Embedded Solver

A Step-By-Step Example

In this section we build the NTP model for a sample brick structure in detail.

  
Figure 2.6: Sample structure with four bricks \( b_{1},\ldots ,b_{4} \) and a ground.

\resizebox*{0.7\textwidth}{!}{\includegraphics{lego/ex1.eps}}


We study a simple structure with four bricks and a ground (fig. 2.6).

In order to build the physical model, first we find the center of mass of all bricks (circles) and the center of the areas of contact between bricks (crosses), as shown on fig. 2.7. Each brick generates a force ( \( F_{1},\ldots ,F_{4} \)) and each area of contact, a joint ( \( j_{1},\ldots ,j_{5} \)).

  
Figure 2.7: Loads and joints have been identified on the structure of fig. 2.6.

\resizebox*{0.8\textwidth}{!}{\includegraphics{lego/ex2.eps}}


Adding an axis of reference, lists of loads (forces) and joints are generated (tables 2.2 and 2.3). For the sake of simplicity the x and y axis are in ``Lego units'': the width of a Lego unit is lw = 8 mm and the height, lh = 9.6 mm.
 
Table 2.2: Loads obtained from fig. 2.7. \( \beta \) = weight of a Lego brick unit (0.4 g). G = gravitational constant.
n position direction source magnitude
F1 (4,4.5) (0,-1) b1 \( 6\: \beta \)G
F2 (7,3.5) (0,-1) b2 \( 4\: \beta \)G
F3 (10,4.5) (0,-1) b3 \( 4\: \beta \)G
F4 (13,3.5) (0,-1) b4 \( 2\: \beta \)G



 
Table 2.3: Joints generated from fig. 2.7. The torque resistances \( \kappa _{1} \), \( \kappa _{2} \) are listed on table 2.1.
n nodes position knobs max. torque K
j1 (b1,b2) (6,4) 2 \( \kappa _{2} \)
j2 (b2,b3) (8,4) 2 \( \kappa _{2} \)
j3 (b2,G) (8,3) 1 \( \kappa _{1} \)
j4 (b3,b4) (12.5,4) 1 \( \kappa _{1} \)
j5 (b4,G) (12.5,3) 1 \( \kappa _{1} \)


From the layout we generate a graph that represents the connectivity of the structure (fig. 2.8).

  
Figure 2.8: Graph generated by the structure of fig. 2.7.

\resizebox*{0.65\textwidth}{!}{\includegraphics{lego/ex3.eps}}


Bricks and ground generate nodes on the graph and joints generate edges.

We consider initially what the situation is for the first load alone (F1). This force is originated by the mass of brick number one, and so it points downwards, its magnitude being equal to the weight of a Lego brick of width six ( \( =6\: \beta \text {G} \), where \( \beta \) = 0.4 g is the per-unit weight of our Lego bricks, and G the earth's gravitational constant). According to equation 2.1, the capacity of each joint with respect to this particular load is the magnitude of the load, multiplied by the torque's arm and divided by the capacity of the joint (table 2.4). The value of the sign is 1 if the rotation is clockwise and -1 if counterclockwise.

 
Table 2.4: Capacities of the example network with respect to load F1. Each joint can support a fraction of the load equal to the torque capacity of the joint divided by the torque exerted by that particular force at that joint, which in turn is the arm length multiplied by the magnitude of the force. lw = width of a Lego brick = 0.8 mm.
Joint Force arm length (\( \delta ) \) relative capacity (\( \alpha ) \) sign
j1 F1 2 lw \( \frac{\kappa _{2}}{2\cdot 6\: \text {lw}\beta \text {G}} \) -1
j2 F1 4 lw \( \frac{\kappa _{2}}{4\cdot 6\: \text {lw}\beta \text {G}} \) -1
j3 F1 4.5 lw \( \frac{\kappa _{1}}{4.5\cdot 6\: \text {lw}\beta \text {G}} \) -1
j4 F1 8.5 lw \( \frac{\kappa _{1}}{8.5\cdot 6\: \text {lw}\beta \text {G}} \) -1
j5 F1 8.5 lw \( \frac{\kappa _{1}}{8.5\cdot 6\: \text {lw}\beta \text {G}} \) -1


With the true values2.4 for \( \kappa _{1} \) and \( \kappa _{2} \), the capacities of all joints in the example are far greater than the light forces generated by this small structure. To illustrate distribution of force we use fictitious values for the constants. Assuming \( \kappa _{1}=20\: \text {lw}\beta \text {G} \) and \( \kappa _{2}=45\: \text {lw}\beta \text {G} \), the capacities of joints \( j_{1},\ldots ,j_{5} \) relative to load F1 are respectively 1, 1, \( \frac{20}{27} \), \( \frac{20}{51} \) and \( \frac{20}{51} \), leading to the network flow problem (and solution) on fig. 2.9. Each edge was labelled with the capacity and (parenthesized) a solution.

  
Figure 2.9: Network flow problem generated by the weight of brick b1 on the sample structure of fig. 2.7, assuming \( \kappa _{1}=20 \) and \( \kappa _{2}=45\: \text {lw}\beta \text {G} \). The source is b1 and the sink G. Each node is labelled with a capacity, and (in parenthesis) a valid flow is shown: \( \phi _{1}(1,2)=1 \), \( \phi _{1}(2,3)=0.3 \), \( \phi _{1}(3,4)=0.3 \), \( \phi _{1}(4,G)=0.3, \) \( \phi _{1}(2,G)=0.7 \).

\resizebox*{0.7\textwidth}{!}{\includegraphics{lego/ex4.eps}}


The solution to this flow problem could have been obtained by a maximum flow algorithm. A greedy solver would reduce now the network, computing a ``remaining capacity'' for each joint (table 2.5

 
Table 2.5: Greedy solver: Residual joint capacities for the sample structure, after force F1has been distributed according to fig. 2.9. (*) Assuming \( \kappa _{2}=45, \) \( \kappa _{1}=20 \).
Joint Force Flow \( \phi _{F_{1}}(j) \) torque ( \( \text {lw}\beta \text {G} \)) residual capacity(*)
j1 F1 1.0 \( -1.0\cdot 2\cdot 6 \) [-33,57]
j2 F1 0.3 \( -0.3\cdot 4\cdot 6 \) [-37.8,52.2]
j3 F1 0.7 \( -0.7\cdot 4.5\cdot 6 \) [-1.1,38.9]
j4 F1 0.3 \( -0.3\cdot 8.5\cdot 6 \) [-4.7,35.3]
j5 F1 0.3 \( -0.3\cdot 8.5\cdot 6 \) [-4.7,35.3]


). The stress on joint j2 for example, is equal to \( -0.3\cdot 4\cdot 6\: \text {lw}\beta \text {G} \)(counterclockwise). If the initial capacity of j2 was \( [-\kappa _{2},\kappa _{2}]=[-45,45] \), the reduced capacity (according to eq. 2.3) would be [-37.8,52.2]. So when a flow network for F2 is generated, the reduced capacities of joints are used, incorporating the effects of the previous load. (table 2.6
 
Table 2.6: Greedy solver: capacities of the joints in the sample structure, with respect to force F2, after the loads resulting from F1 have been subtracted.
joint force arm length magnitude sign capacity (w.r.t. F2)
    (lw) ( \( \text {lw}\beta \text {G} \))   (see table 2.9)
j1 F2 1 4 1 1
j2 F2 1 4 -1 1
j3 F2 1.5 6 -1 \( \frac{1.1}{6} \)
j4 F2 5.5 22 -1 \( \frac{4.7}{22} \)
j5 F2 5.5 22 -1 \( \frac{4.7}{22} \)


and figure 2.10). In this example, there is no solution, so in fact the structure could not be proved stable.
  
Figure 2.10: Greedy solver: NFP problem for the second force.

\resizebox*{0.7\textwidth}{!}{\includegraphics{lego/ex5.eps}}


For the multicommodity solver, all forces are considered simultaneously. The capacities of each joint become boundary conditions on a multicommodity network flow problem. For example, we can write down the equation for joint number two by generating a table of all forces and their relative weights for this particular joint (table 2.7

 
Table 2.7: Relative weights of the forces from fig. 2.7 as they act on joint number two.
joint force arm length (lw) magnitude ( \( \text {lw}\beta \text {G} \)) sign
j2 F1 4 \( 6\cdot 4 \) -1
j2 F2 1 \( 4\cdot 1 \) -1
j2 F3 2 \( 6\cdot 2 \) 1
j2 F4 5 \( 2\cdot 5 \) 1


).According to the table, and per equation 2.2, if \( \phi _{1},\ldots ,\phi _{4} \)are the flow functions of forces \( F_{1},\ldots ,F_{4} \), the boundary condition for joint two is:

 \begin{displaymath}
\left\vert -24\: \phi _{1}(2,3)-4\: \phi _{2}(2,3)+12\: \phi _{3}(3,2)+10\: \phi _{4}(3,2)\right\vert \leq \kappa _{2}
\end{displaymath} (2.7)

a solution to this problem is a set of four flows \( \phi _{1},\ldots \phi _{4} \), each one transporting a magnitude of one from the origin of each force (Fioriginates at bi in our example) into the sink G, that also satisfies five boundary equations, analogous to eq. 2.7, one per joint. A multicommodity flow algorithm searches the space of all possible flows, using linear programming techniques, looking for such a solution.

Finally, using the embedded solver would mean that the genotype pre-specifies a unique direction of flow, and a weight for all joints, as in table 2.8

 
Table 2.8: Embedded solver: the genotype specifies direction of flow and a random weight for each joint. Together with the number of knobs of in the joint, these specify the percentage of flow in each direction. In this example, brick b3 has two outgoing joints, to bricks b2 and b4, with \( \omega w \)values of 3 and 1, respectively. This means that 75% of any loads going through b3 will pass on to b2 and the remaining 25% will rest on b4.
joint direction weight (w) knobs (\( \omega \)) \( \omega w \)
j1 \( b_{1}\rightarrow b_{2} \) 1 2 2
j2 \( b_{3}\rightarrow b_{2} \) 1.5 2 3
j3 \( b_{2}\rightarrow G \) 0.75 1 0.75
j4 \( b_{3}\rightarrow b_{4} \) 1 1 1
j5 \( b_{4}\rightarrow G \) 2 1 2


for example. Figure 2.11
  
Figure 2.11: DAG determined by the genotype of a structure using the embedded solver approach.

\resizebox*{0.7\textwidth}{!}{\includegraphics{lego/ex6.eps}}


shows the resulting DAG which determines all four flows (table 2.9)
 
Table 2.9: Flows generated by the embedded solution.
flow value
\( \phi _{1} \) \( b_{1}\rightarrow b_{2}\rightarrow G \)
\( \phi _{2} \) \( b_{2}\rightarrow G \)
\( \phi _{3} \) \( \frac{3}{4}b_{3}\rightarrow b_{2}\rightarrow G+\frac{1}{4}b_{3}\rightarrow b_{4}\rightarrow G \)
\( \phi _{4} \) \( b_{4}\rightarrow G \)


and thus the total torque for all the joints. Whereas in the greedy example we had the weight F1 of brick b1 flowing in part via \( b_{2}\rightarrow G \)(30%) and in part via \( b_{2}\rightarrow b_{3}\rightarrow b_{4}\rightarrow G \)(70%), in this embedded solver example, the only route allowed for the genotype is F1 is via \( b_{2}\rightarrow G \). Again, with the values for \( \kappa _{1} \), \( \kappa _{2} \) used in this example, the weight on joint j3 is excessive so the structure is not stable.


next up previous
Next: Evolving Brick structures Up: Simulating Bricks Structures Previous: Embedded Solver
Pablo Funes
2001-05-08