The research proposal and other papers...
Evolutionary
Shape Optimisation
Using a Voxel
Based Representation.
Peter James
Baron
MSc
Information Technology: Knowledge Based Systems
Department of
Artificial Intelligence
University of
Edinburgh
1997
Abstract
Shape optimisation within
constraint limits is a hard problem from the field of Mechanical
Engineering. The objective is to design
a shape which best satisfies some predetermined goal whilst at the same time
observing some constraints. Much work
has been done on various problems within this domain [Bentley 96][Chapman et al. 94] [Smith 95a][Watabe &
Okino 93], however the majority to-date has focused on parametric and other
highly restricted representations of the shapes being optimised. This thesis describes experiments performed
using a voxel based representation and an evolutionary optimisation
algorithm. As any attempt to perform
shape optimisation using an unrestricted object representation must use a highly
effective evaluation function in order to be able to deal with the varieties of
design that an evolutionary optimisation algorithm may produce, the work
detailed here was intended to first design and test suitable operators to deal
with the extremely large chromosomes required by a voxel representation, and by
then extending the work to permit evaluation from a commercial Finite Element
analysis package, it was expected that the program would be able to perform
real-world shape optimisation tasks with very few restrictions on the shapes
being tested. The results obtained
indicate that it is possible to circumvent the difficulties presented by a
voxel representation [Watabe & Okino 93], and that with suitable operators,
useful and unexpected results can be gained from a real-world optimisation task.
Acknowledgements
I would like to thank my primary supervisor
Dr. R. Fisher for his guidance, advice and assistance throughout all of the
stages of this project. I would also
like to thank Dr. F. Mills of the Department of Mechanical Engineering for his
assistance with the Mechanical Engineering side of things, and Andy Sherlock at
the Department of Mechanical Engineering for his invaluable advice and his
willingness to help with any and all aspects of the project.
During the past three years Andrew Tucson has been
an invaluable source of useful knowledge, good advice and friendship, and for
these gifts I wish to express my sincere appreciation.
Finally I want to thank Julie Humphrey who has
constantly reassured me that the effort is worthwhile and without whom it might
not have been.
Contents
1 Introduction
1
1.1 Introduction to the problem . . . . . . . . . . . . . . . .
1
1.2 Approach taken . . . . . . . . . . . . . . . . . . . .
2
1.3 Contributions made by this work . . . . . . . . . . . . . .
5
1.4 Outline of this thesis . . . . . . . . . . . . . . . . . .
5
2 Background and previous work 8
2.1 The
problems to be addressed . . . . . . . . . . . . . . .
8
2.2 The genetic algorithm . . . . . . . . . . . . . . . . . 11
2.2.1 Other search techniques . . . . . . . . . . . . . . . 12
2.2.2 Advantages of the genetic algorithm . . . . . . . . . . . 15
2.2.3 The standard genetic algorithm . . . . . . . . . . . . . 16
2.3 Introduction to shape optimisation . . . . . . . . . . . . . 19
2.3.1 The stress analysis model mathematics . . . . . . . . . . 20
2.3.2 Possible approaches to shape optimisation . . . . . . . . . 21
2.3.3 The voxel based approach to shape optimisation . . . . . . . 22
2.4 Miscellaneous relevant work on GA based
shape optimisation . . . 24
2.5 Conclusions . . . . . . . . . . . . . . . . . . . . 25
3 Design and testing of new operators 27
3.1 The
one-dimensional experiments . . . . . . . . . . . . . 27
3.2 A two-dimensional representation of a beam
cross-section . . . . . 31
3.3 The GA experiments . . . . . . . . . . . . . . . . . 32
3.3.1 Experiments using the naïve GA . . . . . . . . . . . . 33
3.3.2 Results obtained from the naïve GA . . . . . . . . . . . 33
3.3.3 Experiments with the rank selection pressure . . . . . . . . 36
3.3.4 Experiments with the constraint penalty
multiplier . . . . . . 40
3.3.5 Experiments with a dynamically changing
constraint penalty
multiplier . . . . . . . . . . . . . . . . . 46
3.3.6 A new operator: smoothing . . . . . . . . . . . . . . 53
3.3.7 An n-dimensional crossover operator . . . . . . . . . . . 56
3.3.8 An n-dimensional mutation operator . . . . . . . . . . . 60
3.3.9 Dynamic mutation operator probabilities . . . . . . . . . . 63
3.3.10 Comparison of modified GA with naïve GA . . . . . . . . 66
3.4 Conclusions about the simplified physics
model experiments . . . . 68
4 Transferring the solutions to real problems 71
4.1 Motivation
for this approach . . . . . . . . . . . . . . . 71
4.2 The annulus design problem . . . . . . . . . . . . . . . 72
4.3 Implementation details . . . . . . . . . . . . . . . . . 73
4.4 Results from the basic system . . . . . . . . . . . . . . 77
4.5 Improvements made to the system . . . . . . . . . . . . . 82
4.6 Conclusions about the real-world system . . . . . . . . . . . 90
5 Conclusion
92
5.1 Summary
of conclusions . . . . . . . . . . . . . . . . 92
5.2 Further work . . . . . . . . . . . . . . . . . . . . 94
Appendices 95
A Rolls Royce annulus problem specification 95
B Ansys macro listings 99
B.1 Full
optimisation macro mask listing . . . . . . . . . . . . 99
B.2 Single optimisation macro listing . . . . . . . . . . . . .
109
C Results log files 110
C.1 Log of
basic GA results on annulus problem . . . . . . . . . .
110
C.2 Log of improved GA results on annulus problem . . . . . . . . 116
Bibliography 123
Chapter One.
Evolutionary Shape Optimisation Using a Voxel Based
Representation.
1.1
Introduction to the problem.
Shape
optimisation is the process of attempting to discover the optimum shape to
perform some given task, frequently within some pre-determined
constraints. In some simple cases the
solution may be readily apparent, even trivial, for example; to maximise volume
and minimise surface area the shape required is a sphere. However in most cases the solution is not so
easily found. Engineering knowledge and
a sound understanding of the underlying physics of a problem may enable a
well-trained person to make a good guess as to a suitable form, but this leaves
open the possibility of major improvements being totally overlooked and may not
be sufficient if the problem being addressed is very highly constrained.
This thesis examines two
different shape optimisation problems and will attempt to show that the
combination of genetic algorithms with suitable operators and a voxel based
representation, forms an effective tool for solving this type of problem.
The first optimisation
addressed in this thesis is that of minimising the amount of mass in
load-bearing beams, whilst ensuring that the maximum stress they are capable of
withstanding remains above a given minimum level. This is tackled first by means of a mathematical model which
contains some simplifying assumptions about the physics of the situation. Although this is not very realistic in terms
of a real-world analysis, it has the advantage of being very quick to run which
makes it a suitable test-bed for experimentation with the operators and the
parameters of the GA being used.
The second optimisation is
that of designing a minimum mass annulus for a jet-turbine engine which must
withstand several different forces without exceeding the maximum stress limits
in any one of several key areas. This
problem does not have any simplifying assumptions, and so is analysed in full
by a commercial Finite Element analysis package; Ansys 5.3*
. As the evaluation function is very
time-consuming it was necessary to design several new GA operators which
increase the rate of improvement considerably.
Previous work in this field includes:
n
[Bentley
96] which has successfully evolved a wide range of shapes and structures using
geometric primitives as building blocks.
n
[Chapman
et al. 94] which addresses issues in
structural topology design using pixels as design primitives with a standard
GA.
n
[R
Smith 95a] which uses a GA with a parametric representation to optimise the
same annulus problem covered in Chapter 4 of this thesis.
A more detailed description of shape optimisation
and stress analysis will be presented in Chapter Two.
1.2 Approach
taken.
The representation of the
problem space chosen for this work is that of voxels+
, which are a method of partitioning the search area or volume into rectangular
regions or boxes which are then assigned a binary full/empty value.
A Voxel Representation of a Part. The Original Part.
Figure 1.1
This approach has many advantages over the
alternatives including:
n
The
ability to represent any shape without restriction.
n
The
ease with which an existing engineering solution can be converted into voxels.
n
A
natural mapping to the traditional binary chromosomal representation frequently
used by GAs.
n
The
simplicity with which domain knowledge can be integrated into the solution.
However in
[Watabe & Okino 93] the authors object that voxels suffer from several
apparently fatal weaknesses when used to represent this type of problem
including:
n
The
occurrence of small holes in the final shape.
n
The
long length of the chromosomes.
n
The
expectation that cross-over would be ineffective.
n
The
lack of smoothness in the final shape’s outline.
It will be
shown during the early experiments described in Chapter 3 that these objections
do not constitute a problem when addressed with appropriate operators and GA
optimisations.
The choice
of voxels as a representational form was motivated by several key points. The previous work which has made use of
voxels has tended to either avoid using domain knowledge in the operator
design, or has concentrated on very low resolution voxel grids in an attempt to
avoid huge chromosomes. Voxels also
offer some important advantages over other representations, including the
ability to generate unexpected designs, the ease with which the user can initialise
the population to the previous best solution and quick incorporation of domain
knowledge in the form of areas of voxels with fixed values.
Genetic Algorithms (GAs)
have proven themselves to be a highly flexible search technique, able to find
good solutions to a diverse range of problems in many different fields
[Goldberg 89]. They use evolutionary
computation techniques to search large and difficult fitness landscapes in
order to find near-optimal solution vectors.
[Michalewicz 92] describes
“evolution programs” as a sub-class of the range of algorithms which rely on
analogies to natural processes. In
[Michalewicz 92] he writes:
“… a population of individuals (potential solutions) … undergoes a
sequence of unary … and higher order … transformations. These individuals strive for survival: a
selection scheme biased towards fitter individuals selects the next
generation. After some number of
generations, the program converges - the best individual hopefully represents
the optimum solution.”.
In this thesis the term GA
will be substituted for Michalewicz’s “evolution programs” to reflect the fact,
widely recognised in the field of evolutionary computation, that the original
definition of GA (as using only binary chromosomes, simple crossover and
bitwise mutation) is far too narrow and explicit to encompass this rapidly
growing field.
As the nature of the voxel
representation leads inevitably to extremely large search areas the use of GAs
is an obvious choice. A further
introduction to the theory of GAs can be found along with a more detailed description
of shape optimisation, stress analysis and the voxel based representation in
Chapter 2.
1.3 Contributions made by this work.
During the
first set of experiments a number of new and modified operators were designed
and tested, and some of them proved to be extremely effective at reducing the
amount of time taken for the GA to achieve a good solution. Several other operators were found which
directly address the issues raised by [Watabe & Okino 93] and solve the
problems described by them.
The second set of
experiments extends the range of previous work in this domain to use a
commercial FE package to perform the optimisation. Two sets of experiments were performed, firstly a simple
adaptation of the GA to the new problem was tested. Although these experiments did discover some difficulties when
using Finite Element Analysis with a voxel based representation, further work
resulted in the design of a set of solutions to those difficulties and some
very interesting results were obtained from the analysis.
The work
in this thesis will show that a genetic algorithm using a voxel based
representation, whilst suffering from several difficulties, is by no means an
implausible approach to the problem of shape optimisation. The benefits obtained by using this
representation may in many cases out-weigh the disadvantages, thus making it an
appropriate technique for optimisations where the optimum is unknown or where
engineering insights are to be used to assist the process.
1.4 Outline of
this Thesis.
The task was addressed as a
series of experiments, each of which built on the results of the previous
steps; the format of this thesis reflects this approach, with the majority of
the work being presented in the order of experimentation and with appropriate
comments where one set of experiments suggested the approach to be taken next.
Final Annulus Design from the Results Set.
Figure 1.2
The majority of Chapter 2
deals with the background explanations of GAs, shape optimisation and stress
analysis necessary to understand the rest of the thesis. An investigation was then made into the
current state of the art in shape optimisation, with particular reference to
the use of GAs to perform the search.
The results of this study are presented in Section 2.3.
Initially, a two dimensional
shape optimisation problem was undertaken using simplifying assumptions in the
stress analysis model. This allowed
rapid evaluations of the shapes produced by the GA, thus permitting in-depth
investigation into the effectiveness of various modifications to the basic
optimisation technique. A description
of these experiments, their results, and the optimisations made can be found in
Chapter 3.
Once the GA code was running
effectively on this simplified problem, the level of realism in the stress
analysis model was increased by using a commercial Finite Element package to
perform the shape evaluation. At this
point the experiments were using a realistic representation of all stresses
involved in the shapes generated by the GA.
Chapter 4 gives details of the approach taken, the results and the
difficulties encountered during this final stage of the experimentation.
Chapter 5
contains the conclusions arrived at during this study and the recommendations for future work.
The
Appendices include details of the annulus design problem specification, the
macros uses to make Ansys perform the optimisation and some results data files.
Chapter Two.
Background and Previous Work:
2.1 The problems to be addressed.
The first
optimisation addressed in this thesis is the design of a beam cross-section
which minimises the amount of material in the beam, whilst leaving it capable
of supporting a given minimum mass.
This problem will be approached using a simplified model of the physics
involved in order that the speed of evaluation is as fast as possible. The second optimisation is the design of an
annulus for the centre of a jet-engine’s turbine propeller, which must be as
light as possible but still be able to withstand stresses in two different
directions at various key positions.
This will be evaluated using a full commercial Finite Element Analysis
(FEA) package in order that all of the forces and stresses experienced by the
part are simulated as accurately as possible.
The beam
optimisation was chosen as an example of a sufficiently hard problem that, even
when using a simplified model of the physics involved, the solution surface
would be extremely complex. An
additional reason for the choice of this problem is that a good solution is
well-known to engineers. The ‘I’ beam
(shown in Figure 2.1), which is commonly used in sky-scraper construction, is
generally accepted as being a good form for a beam cross-section to gain
maximum strength for minimal mass.
Issues to be addressed in this optimisation were;
n
How
well does a standard GA perform on a complicated problem using a voxel
representation?
n
Can
operators be designed that overcome any perceived flaws in the standard GA?
n
What
alternative operators can be designed to improve the GA performance in regards
to voxel based optimisations?
n
What
adjustments should be made to the balance of operators to further increase the
rate of optimisation?
An ‘I’ Beam Cross-Section.
Figure 2.1
The
annulus design problem is specified in detail in a document supplied by Rolls
Royce to Richard Smith during his time with the Mechanical Engineering
department of Edinburgh University, which is included as Appendix A. As specified by Rolls Royce, the annulus
design is very tightly constrained, ie: the figures given for maximum stress
represent a reasonably good solution.
This was expected to cause some difficulties as a random population
initialisation would probably create an initial population which contains only
invalid solutions.
The choice
of a voxel based representation was expected to raise some difficulties when
the solutions produced were analysed by the FE package. This is because FEA does not cope well with
sharp corners and will normally not use uniformly sized meshes. Voxels are by definition uniform in size,
and though it would in theory be possible to subdivide edge voxels into a finer
grid, the FE package used for this analysis (Ansys v5.3) could only recognise
elements which connect at their major vertices. Thus in order to subdivide the voxels into a finer grained mesh
would involve at least one intermediate step and a lot of extra processing, as
seen in Figure 2.2.
Figure 2.2
One
further issue was of concern at the beginning of the experimental work
described here; what would be the best way of getting Ansys 5.3, a commercial,
stand-alone, GUI driven FE package, to perform the analysis of the GA produced
voxel shape representations? This was a
particularly worrying problem as all of the work was performed on PC compatible
machines, which are not noted for the flexibility of their inter-process
communications systems.
These problems and their
solutions are described in detail in Chapter Three for the beam and Chapter
Four for the annulus optimisation.
2.2 The
genetic algorithm.
`Genetic Algorithm’ is the
term which has come to cover the use of evolutionary directed algorithms for
searching complex parameter spaces to find a near-optimal solution. This technique requires the formulation of a
suitable `fitness’ function which can evaluate any solution possible within the
representation chosen and return a valid fitness score. The search is performed by maintaining a
population of potential solutions and allowing them to interbreed (crossover),
mutate and die. The selection of
survivors from one generation to the next is based on each individual’s fitness
score relative to the population as a whole, thus those individuals with better
fitness scores have a higher probability of surviving and breeding in the next
generation.
The sequence of data which
represents an individual member of the population of solutions is called a
chromosome, taking its name from the DNA sequence in humans as this whole
technique is based on an analogy to nature’s evolutionary processes. Each item of data in the chromosome is
called a gene following the same naming convention. Genes in a traditional GA are single bits, however floating point
numbers and more complicated data types have also been used [Michalewicz 92]
(pages 2-9) and [Davis 91].
Crossover is the process of
taking some genes from one `parent’ and swapping them with the genes in the
same position on the chromosome of the other parent. This has the effect of propagating short gene sequences throughout
the population and as the chromosomes are more likely to reproduce if they are
fit, only sequences which make chromosomes fitter will spread through the
population. Mutation is the method
whereby new genetic variations can enter the population and generally consists
of randomly changing the value of a small number of randomly chosen genes.
A more complete description
of the theory and implementation details of conventional genetic algorithms can
be found in [Holland 75], and [Michalewicz 92] (Chapter Five) includes details
of some of the possible modifications to the basic approach which extend the
power and capabilities of this optimisation technique.
2.2.1 Other
search techniques.
Exhaustive
search is the procedure of iteratively supplying an evaluation function with
every single parameter setting within the scope of the problem being
studied. It is impossible to do this in
a reasonable amount of time for most real-world problems due to the range and
the number of parameters which define the problem. In a voxel based representation of a beam using a two-dimensional
grid divided into 32x64 voxels, the total problem space is 2 2048!
Random search involves
iteratively trying different randomly selected parameter settings whilst always
remembering the best solution found.
For large problem spaces this is ineffective due to the small
probability of randomly choosing good parameter settings, this is especially
true when a large portion of the solution space constitutes invalid solutions
due to violations of the problem constraints.
Stochastic
hill-climbing (SHC) is an optimisation technique based on the concept of
hill-climbing. In a well-behaved
function optimisation problem, the solution space may often be visualised as a
smooth surface in multiple dimensions as shown in Figure 2.3. Given a randomly selected initial parameter
setting, a steepest-ascent hill-climbing algorithm will evaluate the solution
function and find a single point on the surface. By varying the problem parameter settings and re-evaluating the
function, other points can be found which will either be worse, the same or
better than the previous solution.
Repeatedly varying the parameters and keeping the best solution from a
set as the starting point for the next iteration will result in continual
progress up the hillside, when no solution is better than the current starting
point the algorithm has achieved an optimal solution.
The type
of problem which can be solved by hill-climbing in this simplistic formulation
is highly limited. Most real-world
problems involve far more complex solution surfaces with many bumps and pits
which represent local optima as seen in Figure 2.4.
Figure 2.3
Uneven Solution Surfaces May Have Many Local Optima.
Figure 2.4
SHC attempts to address
these more complicated problems by adding the capability to randomly
reinitialise the current starting point when no more improvement is possible
from the position found. The best
solution found is continually recorded, so that after a given number of
iterations the SHC can report the parameter settings which produced that
solution.
A major problem with SHC is
that when a solution space with a very large number of local optima is faced,
the chance of a random re-initialisation of the parameters producing a solution
which is on the same hill as the global optima is very small. Another problem is encountered when
constraints are applied to the solution space.
Figure 2.5 shows a very simple optimisation problem which has been
complicated by the addition of a constraint limitation. SHC can only find the optimum for this
problem if it starts somewhere on the line going straight up the hill through
it. From this it is apparent that the
probability of SHC finding a good solution is reduced drastically by the
addition of problem constraints.
Constraint Limitations Cause Difficulties For Hill Climbers.
Figure 2.5
Simulated
annealing is an approach to optimisation which comes from an analogy with the
annealing process used to toughen materials such as metals or glass. The process uses heating, followed by a
long, slow cooling period to alter the molecular structure of the materials
being treated. Similarly the
optimisation technique permits acceptance of lower quality solutions with a
probability dependent on a ‘temperature’ variable which gradually decreases
over the length of the run. This
technique is capable of escaping local minima in the search space and will
therefore find a good solution to many optimisation problems. Although it does not suffer from any of the
major drawbacks in the other techniques discussed previously, simulated annealing
does require great care in the establishment of the initial and final
temperatures and the rate of cooling.
2.2.2
Advantages of the genetic algorithm.
Genetic
Algorithms provide a good balance between exploiting the best solutions and
exploring the search space [Michalewicz 92]
(page 15) which gives them a huge advantage over random search (all
exploration) and hill climbing (all exploitation). The cross-communication of information (via cross-over operators)
within a GA [Michalewicz 92] (page 3) implies the possibility of continual
improvement over the entire search time period. This constitutes an important advantage over the random reseeding
used in SHC. GAs are also ideally
suited to parallel computation because each member of the population can be
processed simultaneously [Michalewicz 92] (page 9). This implies the ability to gain considerable processing speed
improvements through a parallel implementation of the algorithm, which is not
possible with simulated annealing as it is an iterative algorithm with
cumulative result variables.
A major advantage of the GA
is the relative ease with which new operators can be formulated and added to
the existing selection. This is
primarily due to the total separation of operators from one another. To add a new operator which directly
addresses a perceived difficulty with the optimisation is simply a matter of
designing an algorithm which will fix the problem if it is applied in a
suitable area, and will do nothing (or act to prevent the problem occurring) if
applied elsewhere. After a short period
of experimentation it is usually possible to find an appropriate probability
setting for the new operators - usually by trying settings 10 or 20 percent
apart.
This ease of design for new
operators permits incorporation of domain knowledge which can greatly increase
the search efficiency, in the same way that heuristics can improve a standard
depth-first or breadth-first search.
As the
voxel representation selected for this thesis codes directly into a very long
sequence of binary digits, the solution space is highly uneven and the problem
is very tightly constrained; Genetic Algorithms are therefore the natural
choice of search algorithm for this problem.
2.2.3 The
standard genetic algorithm.
The basic GA used as a
foundation for all of the experiments outlined in this thesis varies somewhat
from the GA described by [Holland 75].
Many of the variations were introduced to maximise the speed of
operation as it was realised that the optimisations being performed would be
very time intensive and that even small improvements in the run-time would be
useful.
The GA
overall logic is shown below in Figure 2.6 and at this level of detail the
algorithm is very similar to that included in [Michalewicz 92] as Figure
0.1.
GA control
logic
begin
initialise population
pass
¬ 0
while pass < number_of_passes do
Evaluate
population
Display
population
Select
survivors for next generation
Apply
operators to new population
pass ¬ pass + 1
end while
end
Control logic for the standard Genetic Algorithm.
Figure 2.6
Initialisation
is performed entirely by random numbers, with every gene in each chromosome
being set to either a one or a zero.
These chromosomes map directly into the voxel grid, where a one
represents the voxel is occupied and a zero indicates an empty space. After the chromosome is initialised in this
way, a connectivity check is performed and all voxels which are not connected
by a chain of active voxels to a given ‘seed point’ are set to empty space. This eliminates all of the loose or floating
voxels and can lead to an invalid chromosome if the two ‘seed points’ at the
top and bottom centre of the grid are not connected to each other - if this is
the case then the initialisation is performed again.
Evaluation
uses the stress analysis values returned from the function described in Section
2.3.1 to calculate a ‘fitness’ value for each chromosome according to the
following formula (Equation 2.1).
F = V + S/(smax x 1000) + k
x max{(S - smax),0}
where:
F = Fitness
V = Count of active voxels
S = Maximum stress of any voxel
k =
Constraint penalty multiplier
smax = The stress constraint value
The Fitness Formula.
Equation 2.1
This
formula must be minimised and can be interpreted as meaning that a greater
number of active voxels implies a higher fitness value. A larger value of maximum stress also causes
a higher fitness value (though this value will never exceed the contribution
provided by even a single extra voxel).
The rest of the formula is zero unless the stress exceeds the
constraint, at which point it will increase the fitness value by an amount
proportional to the amount by which the constraint has been broken.
The
display routine is included so that the progress of the GA can be visually
monitored as the optimisation progresses, it would also be a useful feature if
user-guided analysis was added to the capabilities of the program at a later
stage of development.
Survivor
selection is achieved through use of the Genitor
rank selection algorithm described in Section 3.3.3. This algorithm has several advantages over fitness proportionate
selection methods including the removal of the need to scale the fitness values
returned from the evaluation algorithm and the ease with which the amount of
selective pressure can be altered through variation of a single parameter. A full discussion of this approach can be
found in [Whitley 89]. The rank
selection procedure gives ‘fit’ individuals a better chance of surviving into
the next generation than unfit individuals by using the fitness values to
create an ordered list of the population and then returning randomly selected
indices to that list with a progressively higher probability towards the
‘fitter’ end of the list. It is used to
generate a new population of selected chromosomes which replaces the previous
population after the selection is complete.
The
operators used in the standard GA were two-point crossover and bitwise (or uniform) mutation [Michalewicz 92] (page
21) however the algorithm was designed to allow the addition of new operators
and the replacement of the old ones with a minimum of code alterations. Two point crossover involves randomly
choosing two ‘parent’ chromosomes, selecting any two genes at random along the
length of the chromosome and then taking the sequence of genes between those
two points and swapping it with the same gene sequence from the other
‘parent’. Bitwise mutation simply
alters the value of randomly selected genes in randomly selected chromosomes.
Unless mentioned otherwise
the GA used the standard settings described below in the experiments that
follow.
Mutation
Rate = 0.001 per bit
Crossover
Probability = 0.3 per chromosome
Population
Size = 20
Ranking
Pressure = 1.5
Chromosome
Length = 2048 bits
2.3
Introduction to shape optimisation.
A
worthwhile problem from the area of Mechanical Engineering is that of
optimising a beam to support various loads with a minimal amount of
material. Currently these optimisations
are frequently done by hand, by a person with long experience, who will then
often use a Finite Element package for stress analysis to ensure that the
resulting beam meets the various requirements.
This
section presents an introduction to the theory and mathematics required for
stress analysis, lists some previous work in the area of shape optimisation and
describes the differences between that work and the approach taken here.
2.3.1 The
stress analysis model mathematics.
A simplified stress analysis model requires very
little mathematics, is quite easy to implement and can be used to generate some
interesting results. The mathematics
for the model used in the early experiments is shown as Equation 2.2.
s = - My
I
Where:
s = total stress within a given area
M = bending moment (amount of force being
applied to the beam)
y = distance of the area from the neutral
axis of the shape
I = second moment of area
=
ò y² dA
A = size of the area being
analysed
Equation 2.2.
The neutral axis of a shape is defined as a
horizontal line which passes through the centroid of mass of the shape. As a voxel representation uses areas which
are all of uniform size and density, the centroid of mass can be found by taking
the average of the positions of all occupied voxels.
The second moment of area is approximated by
calculating Equation 2.3.
I » S (y²A)
Equation 2.3.
2.3.2 Possible approaches to shape optimisation.
There are
many possible approaches to shape optimisation problems, in this section a few
of the more common techniques will be briefly described.
The
parametric approach to shape optimisation involves creating a parameterised
model of an initial shape. Some of the
parameters can be constants, which allows the designer to apply domain
knowledge to reduce the size of the search space. Other parameters will be allowed to vary due to the optimisation
process. These are normally restricted
to a range, defined as the maximum and minimum values that are permitted. Figure 2.7 shows a parameterised representation
of an aircraft wing cross-section.
A Parameterised Wing Cross-Section.
Figure 2.7
The cell-growth method of
shape optimisation uses an analogy with biological cellular growth to evolve
suitable shapes. The cells are given
‘growth rules’ when they are created, and then when they develop according to
those rules the resultant shapes are evaluated for their fitness values. The growth rules are treated as chromosomes
and the search is performed using a GA to optimise the rules. Some dynamic feed-back during the growth
process is possible using a variation on this approach which involves
continually evaluating the developing shapes.
If an area is suffering from very high stress for example, then more
cells can be encouraged to grow in that area by adjusting the local growth
parameters.
Primitive building blocks
have been used by [Bentley 96] to evolve complex shapes using his Generic
Evolutionary Design system. This system
uses ‘clipped, stretched cuboids’ as the spatial partitioning representation
and a GA performs the search by modifying genotypes which represent each
individual design. This technique has
enjoyed some great successes and has been used to evolve designs for tables,
steps, heat sinks and many other components.
2.3.3 The
voxel based approach to shape optimisation.
Previous
work on shape optimisation has primarily concentrated around parametric
representations of simple machineable shapes and has produced some very useful
results [Smith 95a]. The parametric
representation, which uses a series of parameters which are varied to alter the
shape being represented, is a common choice for shape optimisation problems due
to the simplicity with which restrictions on the shapes can be
incorporated. As noted previously,
unrestricted shape optimisation representations will frequently lead to
‘breaking’ the evaluation function and so parametric representations are often
used to prevent this from happening.
This project uses a voxel
based space representation which divides the shapes being optimised into a
uniform grid of rectangles or boxes.
Each subdivision is represented by a binary value which indicates
whether the voxel is empty or full.
Similar work has been done by [Chapman et al. 94] and [Shoenauer 95] however [Chapman et al. 94] used only standard GA operators and so suffered from the
problems raised by [Watabe & Okino 93], and [Schoenauer 95] became
concerned about the size of the chromosomes required to represent detailed or
real-world problems and moved into alternative forms of problem representation.
Voxels may have any
dimensionality, however representations of more than three dimensions are not
required for the approach to shape optimisation taken here. Early experiments were performed in both one
and two dimensions in order to explore the possibilities and gain insights into
the problem area and the operation of the Genetic Algorithm.
The binary voxel
representation leads naturally to very long chromosomes and the problems
concomitant with the huge search spaces that they impose. However it also allows far more complex and
varied shapes than a parametric representation - which is limited by the user’s
choice of what aspects of the representation will be controlled through the
parameters. In particular, holes in the
material are entirely possible and even probable if there is a small low-stress
area in a high-stress region - a parametric approach can only create holes
where the user is expecting them to be required and has defined some
appropriate ‘hole-control’ parameters to represent them.
Voxels are
limited in that they can only form an approximation to a curve, however as the
number of subdivisions used is increased, the approximation becomes more
accurate and this can easily be controlled to suit the user’s accuracy
requirements (Figure 2.8). There is a
trade-off to be made in this situation however; the higher the number of
subdivisions, the longer each individual evaluation will take. Thus the user must attempt to set the level
of accuracy to be just sufficient if the amount of time taken by the analysis
is also a consideration.
Lo-resolution Voxel Grid Hi-Resolution
Voxel Grid
Figure 2.8
2.4
Miscellaneous relevant work on GA based shape optimisation.
[Watabe & Okino 93] describe shape design and
optimisation by use of Free-Form Deformations (FFD) which use a matrix of
control points to deform a default shape.
This work includes three criticisms of a voxel based representation
method for shape optimisation problems:
n
Long
chromosomes.
n
Creation
of small holes.
n
Valid
parents don’t often make valid children.
The crossover technique used
in this work is to take a sub-set matrix of the control points and swap with
the other parent. Three sets of
experiments are described and the results are very good. The third set of experiments uses a Finite
Element Method package in an attempt to minimise mass for a given maximum
stress.
The paper: [Chapman et
al. 94] covers genetic algorithms for shape optimisation under stress
constraints. They use a one-point
crossover claiming better results than from uniform crossover, a result which
will be confirmed by the experiments detailed in Section 3.3.7. The work includes a simple rule for avoiding
isolated pixels in the final representation by requiring a level of
connectivity (4 directional) to a given ‘seed’ pixel, a concept which was
adapted to the experiments performed here and extended to require two ‘seed’
voxels, one at each end of the voxel grid.
They also assert that balancing a penalty parameter (for beams that fail
the stress constraint) is critical for obtaining good results, as too high a
penalty will produce beams that fall too far within the constraint (with the
corresponding extra material this entails).
This result is again confirmed by the experiments detailed in Section
3.3.4.
In [Bentley 96] a
description of a very powerful generic shape
optimisation tool is given. This system
uses clipped, stretched cuboids as a primitive which is used to partition space
into occupied/void areas. The results
are very impressive and the system has developed designs for a large number of
different parts and components. The
emphasis is very much on the generality of the method, and it includes a
technique which allows the user to easily specify the evaluation function from
a library of already developed evaluation programs.
2.5 Conclusions.
This
chapter has introduced the basic theories behind genetic algorithms, shape
optimisation and stress analysis, and has described the problems to be
addressed in later chapters. Previous
work in this field has tended to concentrate on parametric representations and
this has evolved good designs for aircraft wings and other components. The voxel based approaches to this problem
have also been successful with work by both [Chapman et al. 94] and [Schoenauer 95] being done on a side-view beam
topology optimisation problem with interesting results.
The rest of this thesis will
describe the investigations undertaken on two separate problems from the field
of shape optimisation using a voxel based representation and a modified GA to
perform the search.
The first investigation will deal with an
artificially simple example in order to experiment with GA operators with the
intention of designing a selection of good, new, general purpose operators that
perform well in a voxel based design space.
The second investigation is intended to take those operators and the
knowledge gained about the GA, and try to apply it to a real-world optimisation
problem.
The operators designed and
described in Chapter Three were also intended to be easily adaptable to a
three-dimensional voxel representation, however this intention has yet to be
proved.
This work will necessarily be restricted to just
these two optimisations due to time limitations, however as the investigations
have been successful, future work could extend the discoveries to virtually any
two-dimensional shape optimisation problem which can be evaluated by a FEA
package. This includes stress, loading,
heat, liquid flow and electro-magnetic field optimisations.
Chapter Three.
Design and Testing of New Operators:
The
techniques for the design of effective Genetic Algorithms are many and varied
[Holland 75][Davis 91][Michalewicz 92] and a great deal of time can be spent
adjusting parameters and trying different operators to obtain the most
effective balance between convergence on a good solution and exploration of the
problem domain. The stress analysis GA
was initially used to evolve results for simplified versions of the problem
area in order that the optimisations suggested by early results could be
investigated rapidly. The simplified
physics model of the beam’s stresses uses the mathematical approximations
described in Section 2.3.1 in order to permit rapid calculation of the fitness
of each individual in the population.
The work described in this
chapter details early experiments with a one-dimensional chromosome followed by
the extension of the experiments to two-dimensions and the subsequent GA
optimisations. A comparison is then
made between the results gained from the naïve GA and the results made possible
following the addition of new operators.
3.1 The one
dimensional experiments.
The first experiments were performed on a
one-dimensional chromosomal representation of a beam cross-section. This very simple case was chosen as the
starting point for the experiments as the expected results are well understood
[Gere & Timoshenko 84] (pages 251-261) so it permits cross-checking of
actual results gained against expected results. The programming involved in the Genetic Algorithm was not very
complicated, and neither was the implementation of the simplified stress
analysis physics model being used at this time, however it seemed reasonable to
take this opportunity to verify their operation together.
The material and force parameters used for this
initial set of runs were:
Area
Represented = 0.75m²
Maximum
Stress Allowed = 100 000 000 Pa (Steel)
Bending
Moment = 200 000 Nm (Force applied)
The GA used settings of:
Mutation
Rate = 0.005 (per bit)
Crossover
Probability = 0.25 (per
chromosome)
Population
Size = 60
Ranking
Pressure = 3
Chromosome
Length = 64 bits
The
mutation operator was the standard uniform
mutation [Michalewicz 94] which flips bits in the chromosomes with each bit
having an equal probability of being altered.
The crossover operator used was also standard; the uniform crossover
[Michalewicz 94] gives every bit in one parent’s chromosome a set probability
of being swapped with the corresponding bit from the other parent. The GA used a roulette wheel selection mechanism with standard ranking (refer to [Whitley 89] for a good description of
the most common selection mechanisms and their influence on diversity and
convergence). An elitist
mechanism was also implemented whereby the best solution found in any
generation was guaranteed to survive unaltered into the next generation.
The
fitness function described in Chapter Two as Equation 2.1 was designed to
minimise the area of the beam cross-section (number of active voxels) whilst
remaining capable of withstanding the maximum allowed stress, with a penalty
value being applied to any solution which broke that strength constraint. A small additional factor was included in
the fitness calculation based upon the maximum stress point in the beam. This has the effect of causing the valid
solutions to continue to evolve towards the best possible solution (in this
case a beam which minimises area and
minimises the maximum amount of stress present).
A valid
solution for this simplified model of the physics is any shape which does not
exceed the maximum stress constraint, and the best solution would be the shape
with minimal mass and the lowest value for its’ maximum stress point. For the purpose of this one-dimensional test
virtually any shape at all will be valid.
The row labelled `solution’ in Table 3.1 represents the number of
generations taken to find a valid solution with the minimum required mass (mass-optimal).
Categories of solutions.
Figure 3.1
The best possible solution for this simple problem
has all of the mass evenly divided with as much separation between the two
areas as possible. By looking at the
stress analysis equations in Section 2.3.1 it is clear that the further apart
the two stress bearing components are, the lower the maximum stress encountered
in the beam will be.
Ten trials
of this program produced the results shown in Table 3.1. In each case a mass-optimal solution was
found rapidly and then evolution continued towards the expected best solution
for this problem (though it rarely found that solution during the period of the
trial). Each trial was allowed to
continue for 1000 generations (1000 Generations x 60 Population = 60000
Evaluations).
Trial |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Solution |
134 |
140 |
163 |
114 |
121 |
153 |
108 |
231 |
121 |
119 |
Best |
- |
- |
- |
464 |
- |
- |
- |
905 |
- |
- |
Number of generations required to find solutions.
Table 3.1
These
results show a mass-optimal solution being found after an average of 8424
evaluations, followed by a highly variable amount of time spent searching for
the best possible solution. This is the
type of behaviour expected from a Genetic Algorithm with a strong selection
pressure for mass reduction and a much lower emphasis on optimality.
To confirm
that the stress analysis mathematics was correctly implemented, the result of
this particular problem was calculated independently, assuming that an ‘I’ beam
is the best solution. For a steel beam
0.5m high the expected value for the second moment of area is approximately
0.001m4. Inspection of the
variables generated by the stress analysis routine revealed a value of 0.00145m4
for the fittest member of the population when the chromosome represented a beam
0.516m high. This result indicates that
the second moment of area is being calculated correctly and from this and
Equation 2.2 it is clear that the stress calculations must also be correct.
Having
determined that the GA and the mathematics involved in the stress analysis
fitness function both work as desired, the experiments progressed to a more
complex treatment of the problem; the representation of the beam cross-section
was expanded to include two dimensions, vertical and horizontal.
3.2 A
two-dimensional representation of a beam cross-section.
The
one-dimensional representation was incapable of representing a complete ‘I’
beam and so made do with representing the top and bottom surfaces, omitting the
vertical web from the calculations
entirely. The two-dimensional
representation is theoretically capable of representing the web, however the
additional mathematics required to simulate the vertical and horizontal forces
and calculate the stresses which necessitate the existence of a web are
sufficiently complex that it would require the use of a finite-element method
package. In order to maintain the
advantages to optimisation available from extremely fast evaluations, it was
decided to continue to use the same simplistic model of the physical forces
applied to the one-dimensional problem and to treat the consequent absence of a
properly designed web as an unavoidable side-effect.
The code
modifications required to extend the beam cross-sectional representation to two
dimensions were minor because the original representation was already dealing
with the width of the beam, although as a single binary parameter which
represented a whole line. The new
representation used was a two-dimensional array of binary cells, a change that
required the addition of an x component to the calculations finding the centroid
of the shape. This simple change
increased the size of the chromosomes from 64 bits to 32 x 64 = 2048 bits,
creating a search space of 22048 which is extremely large even for a
GA.
Large
search spaces can prove problematical for all forms of search unless they have
an extremely simple solution space, for example: A problem with only a single well-defined optimum can be searched
easily by even a simple technique such as hill-climbing. However most real-world problems are far
more complicated than this and consequently increasing the size of the search
area decreases the probability of the global optimum being found.
3.3 The GA experiments.
The
following experiments were intended to improve the performance of the GA on a
reasonably simple two-dimensional beam analysis problem in order that the
optimisations discovered would be available for the more complex real-world
analysis detailed in Chapter Four of this thesis. To try to ensure that the alterations and improvements made to
the GA here will also prove beneficial to the real-world problem, it was
decided not to concentrate on fine-tuning any of the various parameters
available but rather to focus on the design and operation of various new
operators. Parametric variations were
restricted to an absolute minimum and were used only to determine the
approximate values required to gain reasonable advantages from the new
operators.
In the
following experiments the following parameter settings remain constant unless
mentioned otherwise:
Beam
Dimensions = 0.05 x 0.10 metres
Bending
Moment = 13000 Newton
Young’s
Modulus = 2.0e8 Pascal
Voxel Grid = 32 x 64 voxels
3.3.1 Experiments using the naïve GA.
The first
set of experiments with a 2D representation treated the chromosome as a long
one-dimensional binary string which wrapped around at the vertical edges onto
new lines to form the two-dimensional cross-section. The GA used a standard two-point
crossover operator and the uniform
mutation operator described in Section 2.2.3.
It used settings of:
Mutation
Rate = 0.001 (per bit)
Crossover
Probability = 0.35 (per
chromosome)
Population
Size = 20
Ranking
Pressure = 3
Chromosome
Length = 2048 bits
3.3.2 Results obtained from the naïve GA.
With this
particular optimisation problem, the difficulty lay not in getting a valid
solution, as even a solid beam will satisfy that requirement, but in getting a
near optimal-mass solution. The first
experiments were relatively unsuccessful in this regard, despite showing a
tendency to evolve towards the same known best case found in the 1D trials, the
results after 2000 generations were full of small holes and had extremely
uneven inner edges. This can be seen in
the typical end-of-run results shown in Figure 3.2 (the numbers represent the
fitness values of each individual).
Typical End of Run Results From the Naïve Ga
Figure 3.2
The stresses were
concentrated at the vertical extremes of the beam, so the material in the
middle contributes less towards the total maximum stress that the beam can
withstand than the material at the top and bottom. The GA even in this simple standard form rapidly removed material
from the middle of the cross-section, and in the later stages of the
experiments was observed to be moving material from low stress areas into high
stress areas where holes were left near the extremities. However this first naïve GA approach took an
extremely large number of evaluations in order to make significant progress,
and this is not acceptable as later experiments will have a greatly increased
evaluation time when the FE package is integrated. The rate of improvement was also seen to decrease as the run
continued, levelling off to almost none at all by the end of the run. This means that the GA was not finding any
further improvements to the chromosome, and as the results are visibly poor it
indicates a general weakness in the operators being applied.
Figure 3.3 shows a graph of
fitness values versus generation number for a typical selection of three of the
ten trials performed with this program.
The horizontal axis represents the generation number at which the
results were found and the vertical axis represents the fitness values. Fitness values should be minimised for this
optimisation, so the lower the fitness value, the better the quality of that
individual solution.
The steepness of the curve
during the first two hundred generations indicates that improvements were being
made rapidly during this period, but as the optimisation approached the
five-hundredth generation the rate of progress had diminished
considerably. This effect was expected
as the GA will rapidly find most of the obvious optimisations available and
then the search will have to work harder to find any further worthwhile
improvements. The problem with these
results was that the naïve GA levelled off too early; the quality of solution at the end of the trial indicates that
there were still many improvements to be made but the rate of improvement
visible on the graph is almost zero.
Further work detailed in
this chapter was therefore concentrated towards improving the operators and
parameter settings for the GA, in order to achieve greater benefits during the
early search period, and to produce better quality final results.
3.3.3
Experiments with the rank selection pressure.
This
experiment was intended to discover the effect of changing the rank selection
pressure variable used in the Genitor-type ranking algorithm [Whitley 89]. The pressure variable controls the
proportional selection from the population based on the fitness ranked position
within that population. A selection
pressure of 1.0 results in a totally random selection (all members have equal
probability of being selected), and higher selection pressures result in
increasing probability that the fittest members of the population will be
selected. The Genitor paper suggests
that 1.5 is a suitable value to be used for many experiments, producing a good
balance between population diversity and the rate of fitness improvements.
Implementation
of the algorithm is exactly as given in the Genitor paper*
:
linear_selection( pressure : float )
index = Population_size *
(pressure - Ö (pressure2 - 4 * (pressure - 1) * random(1.0) ) ) / 2 / (pressure - 1)
The Genitor Linear_Selection() Function.
Figure 3.4
The
population is sorted by its fitness values using a linked-list bubble-sort
algorithm before the Genitor selection procedure is invoked, thus the result of
the linear_selection() routine is an index to the linked-list, which in turn
holds the position of the selected individual in the population.
The
survivors selection procedure is simply to invoke this procedure once for every
member of the population, each time copying the selected member of the old
population into consecutive elements of the new population array.
The
Genetic Algorithm used to perform the searches was the same as described in
Section 2.2.3: ten trials were executed
and the number of iterations per trial was set to 2000.
Figure 3.5
is a plot of the fitness of the best individual from the population averaged
over all ten trial runs (on the vertical axis) against the generation number
(on the horizontal axis). It shows the
full set of results and clearly indicates that at selection pressures of 1.1 and
even 1.3, there is insufficient differentiation between the poor members of the
population and the fit ones. This
results in chromosomes which violate the problem’s constraints being selected
frequently enough to significantly degrade the average results. The large steps visible in both of these
lines are caused by selection of individuals who are extremely unfit due to
large constraint penalties being applied.
Figure 3.6
is a more detailed examination of the 1.3, 1.5, 1.7 and 1.9 selection pressures
in which we see the expected results of higher pressures producing steeper
fitness curves but ultimately resulting in similar overall fitness levels after
40000 evaluations. The 1.5 line is very
slow to converge with the 1.7 and 1.9 lines, indicating that it takes
significantly longer before it produces solutions of equivalent quality.
The very
low selection values do not appear to cause enough selection pressure to avoid
repeated constraint violations, although this may be affected by adjusting the
Constraint Penalty Multiplier. The
lower selection values also result in a slightly worse result after 2000
generations. As a consequence of these
trials further experiments will be performed using a rank selection pressure of
1.7, as the suggested 1.5 is too close to the border-line where the constraints
are being violated regularly and it also does not converge rapidly enough to
the better solutions found at higher rank pressure levels.
3.3.4
Experiments with the constraint penalty multiplier.
The purpose of these
experiments was to investigate the effects of changing the constraint penalty
multiplier k used in the fitness
function (Equation 2.1), and to find an appropriate value for this variable
which maximises the search capabilities whilst avoiding an excess of non-viable
solutions. The constraint penalty
multiplier (hereafter referred to as the penalty value) is applied to the
fitness value of any chromosome which has a maximum stress value greater than
the constraint level, this will lower the relative fitness of that chromosome
reducing it’s probability of survival into the next generation.
The
penalty value is multiplied by the amount of stress which exceeds the stress
constraint, so the effect on a chromosome’s fitness depends on the degree to
which it is non-viable. This approach
permits chromosomes which are only slightly over the constraint limit to
survive for a while, thus increasing the population diversity at and around the
stress constraint level.
The
Genetic Algorithm used was as described in Section 2.2.3 except that the
vertical web which runs through the
middle of the ‘I’ beam was enforced after the operators were applied and before
the evaluation function was called.
Enforcing the web avoids the complicating issue of the amount of mass
added by the web itself. A crooked web
would contain more mass than a straight one, but the simple model of the
physics being used for the evaluation stage does not contain any forces that
would encourage a straight web. Rather
than try to factor out the effect that the different randomly evolving webs
would have on the final fitness values, it was considered to be more sensible
to avoid the issue entirely in this way.
A population size of 20 and
an initial run length of 1500 generations was used. The optimisation was
performed ten times with each of the penalty values 1E-3, 5E-4, 1E-4, 5E-5 and
1E-5. Other parameters were set as
follows:
Beam dimensions = 0.05m x 0.10m
Bending moment = 13000 Newton
Voxel grid size = 32 x 64 voxels
Crossover probability = 0.3 (per chromosome)
Mutation probability = 0.001 (per gene)
Rank selection pressure = 1.7
Stress constraint = 2.0e8 Pascal
The web was enforced.
The first
results graph (Figure 3.7) for these trials shows a plot of the average fitness
of the best individual from the population over the ten trials against the
generation number. This graph is
somewhat misleading as it indicates that as the penalty value is reduced the
average fitness of the population tends to improve, unfortunately this is at
the cost of increasingly poor solutions.
What is not clear from this graph alone is that most of the fittest
individuals at the lower penalty values are non-viable in that they break the
constraint limit - often by a considerable amount.
The second graph (Figure
3.8) shows the maximum stress level of the best individual from the population
averaged over the ten trials against the generation number, the stress limit
constraint is marked as a horizontal line for reference. This graph clearly shows the difficulty with
the lower penalty values - the data for 1E-5 is almost entirely above the
constraint limit meaning that the majority of the solutions from the population
were non-viable.
To be able to see the
results for the 1E-3 and 1E-4 penalty values a considerable expansion of scale
is required, Figure 3.9 shows the data from Figure 3.8 expanded about the
constraint limit line (which is again included in the graph). Here even though the Maximum Stress average
is very noisy data, we can see that the higher penalty values cause maximum
stress to be further below the constraint limit than the lower penalties. The average for the penalty value 1E-4
actually crosses the constraint limit several times, but always returns to
viable solutions after a short while.
Higher
penalty values prevent recurrent violation of the stress constraint, but very
high penalties reduce the available search space by forcing solutions to stay
further within the limits. Even in the
long trials the higher penalty values have this restrictive effect. This is in keeping with the results found by
[Chapman et al. 94].
As the standard genetic
algorithm verifies the viability of the initial population by using the fitness
evaluation function (which incorporates the penalty value), the
fitness/generation curves do not start at the same place for different trials
but instead indicate that a lower average initial fitness can be achieved by
using lower penalty values. This effect
can be extremely useful, as a more fit initial population reduces the length of
search required in order to achieve a given quality of result.
An ideal constraint penalty
would allow the search to utilise the possibilities beyond the constraint limit
at the beginning of the search and would cause more solutions to be valid as
the search progresses towards it’s conclusion.
This would encourage a fitter starting population, allow maximum
population diversity initially and ensure that the eventual result population
contains useful solutions.
These results suggest that a
dynamically varying penalty value may result in more rapid optimisation in the
early stages of the search whilst avoiding the problem of non-viable final
solutions. This possibility was
investigated and the results are included in the next section.
3.3.5
Experiments with a dynamically changing constraint penalty multiplier.
These
experiments investigate the efficiency of using a dynamically changing
constraint penalty multiplier rather than the static values used in the
previous set of experiments. The
rationale for this approach is that it may be good for the search if it is
allowed to break the constraints during the early stages of the optimisation,
but that the results at the end of the run must
contain viable solutions.
The
constraint penalty multiplier must start off low and increase as the
optimisation continues, therefore the generation number will be used as the
variable which controls the function:
f(generation) = constraint
penalty multiplier
Equation 3.1
A linear
function could be used to test this approach, however it is apparent that not
only should the optimisation end with viable solutions, it should spend some
time optimising the viable solutions before the end of the run. A more suitable curve function is:
constraint penalty
multiplier = constraint base * ( 1.0 -
e (- alpha * n) )
where n is
the generation number.
Equation 3.2
This can
be seen for several values of (alpha*n) in Figure 3.10 which shows the
constraint penalty multiplier for each generation to fifteen hundred. The function describes a smooth curve from
zero to a maximum, which is a proportion of the constraint base value
determined by the value of alpha*n used.
A higher value of alpha*n makes the curve more pronounced and results in
a higher proportion of the constraint base value at the final generation.
The
Genetic Algorithm used was as described in Section 2.2.3 with a population size
of 20 and an initial run length of 1500 generations. The optimisation was performed ten times with each of the alpha*n
values 0.5, 0.75, 1.0, 2.0 and 3.0.
The graph
(Figure 3.11) shows the average fitness over ten trials for each of the tested
alpha*n values plotted against the generation number. This graph shows the effect of very low constraint penalty
multipliers in the first half of the run;
the fitness curves go up from reasonable starting values to very poor
results during the first four hundred generations, peaking at various points
depending on the alpha*n value being used.
It can be seen that the higher alpha*n values result in worse early
results, but better results later on in the run, although the alpha*n = 0.75
line is anomalous in that it leads to a better final result than the 1.0 line.
The reason for the poor
fitness values early in the run from higher alpha*n values is that the
constraint penalty multiplier increases faster for the higher alpha*n values,
thus the solutions are being penalised more strongly than those with lower
values. The better final results appear
to be due to the rapidly increasing penalty multiplier values forcing the
search into a viable search space earlier, thereby giving the search more time
to do fine-tuning on the final solution.
Comparing
the fitness graph results with the data in Figure 3.12 which shows the maximum
stress values over the same time period leads to some further insights into the
behaviour of the fitness curves. The
lower values of alpha*n lead to greater violations of the stress limit
constraint, to the point where alpha*n = 0.5 doesn’t produce any viable
solutions at all during the 1500 generations.
Typically the higher values lead to viable solutions sooner, with the
exception of alpha*n = 1.0 which takes longer to descend than alpha*n = 0.75. This can be seen more clearly in Figure 3.13
which shows a detailed view of the second half of the optimisation period and
indicates that at alpha*n = 1.0 there were no viable solutions produced during
the run.
Figure
3.13 shows that once the solutions enter the viable region by descending below
the stress limit they rarely exceed that limit again, and indeed tend to remain
at a fairly constant distance from the limit.
This is possibly due to the constraint penalty multiplier value which,
by continuing to increase, makes it less and less likely that a non-viable
solution will be more fit than a viable one.
The fitness values at the
end of the optimisation are not very much different than those obtained for
good constant values for the constraint penalty multiplier. Table 3.2 contains the end of run fitness
values for both constant penalty multipliers and the dynamic penalty
multipliers, entries followed by a * are invalid solutions which exceeded the
constraint penalty at the end of the run.
Constant constraint penalty multiplier values:
0.001 |
0.0005 |
0.0001 |
0.00005 |
0.00001 |
925.999 |
916.599 |
919.843 |
908.123 |
861.650 * |
Dynamic constraint penalty alpha*n values:
0.5 |
0.75 |
1.0 |
2.0 |
3.0 |
1004.231 * |
936.266 |
957.609 * |
932.259 |
924.466 |
End of Run Values for Average Fitness.
Table 3.2
The intention of this
approach was to allow maximum population diversity initially, but ensure that
the eventual resultant population contains viable solutions, and in this regard
the concept appears to be successful.
As long as the alpha*n value is set to ensure a suitable constraint
penalty multiplier value at the end of a run, the prevalence of invalid
solutions in the early stages of the optimisation is not a problem for the type
of problem being addressed here. This
technique is obviously not suitable for optimisations of uncertain length or
when the optimisation may be stopped before convergence and a viable solution
will be required.
The fitness curve graph
(Figure 3.11) shows that the eventual fitness of the best individuals varies
very little, which indicates that the precise setting of the alpha*n value is
not critical. However the evidence of
both the fitness curves and the maximum stress curves is that a high value of
alpha*n is better for the search, resulting in better final solutions and
avoiding the danger of non-viable populations by a larger margin. Further experiments which use dynamically
varying constraint penalty multipliers would have used an alpha*n value of 2.0,
however, as it can be seen from the Table 3.2, the constant constraint penalty
multipliers consistently perform better than the dynamic ones, therefore constant
constraint penalty multipliers were used during the following experiments.
3.3.6 A new
operator : smoothing.
The
smoothing operator experiments were an attempt to directly address some of the
weaknesses of the voxel representation by devising a new specialised operator
which should aid the search by reducing the number of small holes and ragged
edges produced by the GA. The new
operator was intended to be capable of easy expansion from two-dimensions to
n-dimensions in order that it would continue to be useful in the case of three-
(or more) dimensional problems using the voxel representation. This would be an important issue for shape
optimisations which are not capable of being represented by a simple
cross-section, for example if a beam was to have a varying cross-section along
its entire length then it would be necessary to represent it using
three-dimensional voxels.
The GA
parameters used were the same as the standard GA described in Section 2.2.3 and
the new operator was applied in addition
to the previous mutation and cross-over operators. The population size was set to twenty, and the number of
generations was limited to fifteen hundred.
The new
operator was designed to set a region of voxels to the average value of the
previous contents of the voxels. Thus,
if a region consisted primarily of ‘on’ voxels then the whole region would be
set ‘on’ and similarly for ‘off’. This
would achieve the desired results by filling isolated holes in solid regions,
and would also eliminate the ragged edges where they overlap into the empty
regions.
The size
and location of the region to be affected was selected at random, however the
size was restricted to a minimum of 2 voxels per dimension and a maximum of 1/4
of the dimensions of the voxel grid.
These restrictions were imposed in an attempt to ensure that the
smoothing operator would always have an effect when applied, and that the
effect would not be to wipe out a huge area of the voxel grid. Because the location of the region was
selected randomly, the operator was written in such a way that the region would
‘wrap-around’ to the opposite side of the voxel grid if it exceeded any of the
grid’s boundaries.
In order
to check the efficiency of the new operator, the modified GA was run ten times
with each of the probabilities 0.0, 0.2, 0.4, 0.6, 0.8 and 1.0 of smoothing
being applied on a per chromosome basis.
The
results of the smoothing operator on the population can be seen in Figure 3.14
which plots the average fitness values of the best member of the population
over the ten trial runs against the generation number, for each of the six
different smoothing probabilities applied.
This graph shows that the smoothing operator definitely increases the
rate at which the fitness improves during the early part of the runs; the
increased steepness of the curves and the generally lower final values at
generation 1500 are good evidence that the operator is beneficial. There is
some ‘ideal’ rate of application for this operator as witnessed by the improvement
from 0.0 through to 0.6 and then the decrease in effectiveness from there to
the 1.0 probability level. The best
result from these trials was gained at 0.6 and so that will be the probability
of smoothing used in further experiments.
Comparing
Figure 3.15 which displays some typical end-of-run population members with the
earlier results in Figure 3.2, shows just how effective this domain specific
approach to operator design has been, especially at eliminating isolated holes
and reducing ragged edges.
This set
of experiments was intended to address two separate issues in operator
design; firstly, will specially
designed operators function as wanted when reducing particular undesirable
effects during the optimisation process;
secondly, can such operators be designed so that they can be expanded to
n-dimensions with relative ease? The
answer to both of these questions is a definitive ‘yes’. The rate of improvement in average fitness
values and the increased quality of the final results produced using the new
smoothing operator argues strongly for the first answer, and because the design
of the operator relies on the geometry of the problem representation, the
expansion to further dimensions should be extremely straight-forwards too.
The next two sets of
experiments take the concept of n-dimensional operators further by attempting
to formulate appropriate operators to replace the standard two-point cross-over
and bit-wise mutation.
3.3.7 An
n-dimensional crossover operator.
The
two-point crossover operator which had been used up to this point treated the
chromosome as a one-dimensional string of bits and therefore suffered from a
problem with linkage - voxels which
are adjacent in a two-dimensional grid are not necessarily adjacent in the
one-dimensional string. This separation
increases the possibility that useful building blocks (areas of the grid which
contribute to a higher overall fitness evaluation) will be disrupted during the
crossover procedure. The paper
[Cartwright & Harris 93] describes the use of the UNBLOX crossover operator
which was specifically designed to overcome these limitations with conventional
two-point crossover. This operator
swaps a rectangular area of the grid instead of the sub-string swapped by
two-point crossover, if the area overlaps an edge of the grid then it is made
to ‘wrap-around’ to the opposite side.
The size and location of the area to be swapped are both selected at
random, and in this implementation the area was restricted to a minimum size of
two voxels per dimension in order that the operator would always have some
effect when applied.
The
crossover operators were used with the standard probability of 0.3 per
chromosome and no changes were made to the standard algorithm or to any of the
other parameter settings described in Section 2.2.3.
The graph
in Figure 3.16 shows the results of ten trials using three alternative
crossover operators, including the UNBLOX operator. The other two were the standard two-point crossover and another
fairly common technique called uniform crossover [Michalewicz 92] which swaps
genes between the two parents using a fifty percent probability for each
individual gene to be swapped or left where it was. The horizontal axis again represents the generation from which
the values were obtained and the vertical axis represents the average fitness
of the best chromosomes from each of the ten trials at the end of each
generation. The fitness axis scale has
been adjusted to commence at a non-zero value in order to display greater separation
between the three lines.
The
results confirm that the UNBLOX operator does indeed perform better than either
the two-point crossover or the uniform crossover techniques on this
problem. The rate of descent of the
UNBLOX line is quicker, indicating that the population converged to good
solutions faster with this approach than with the other two, and the eventual
end result after the fifteen hundred generations has a slightly better fitness
value than those produced by the other techniques. The improvement was not as large as had been expected and after
further thought it was realised that for this particular problem the optimal
solution would be represented by a binary string consisting of a series of ones
followed by a series of zeros, followed by another series of ones. This solution does not contain any
inherently two dimensional features which would be destroyed by the two-point
crossover, and so the UNBLOX operator only significantly improved the early
stages of the search while the chromosomes were still converging towards the
optimum.
The
uniform crossover operator performed badly due its poor schema preservation qualities [Michalewicz 92][Holland 75], so it
will not generally perform well on problems which rely heavily on solution
sub-structures propagating through the population as the optimisation
progresses.
UNBLOX is
a useful crossover operator which consistently out-performs either two-point or
uniform crossover on this problem, the work described by [Cartwright &
Harris 93] seems to indicate that it can be used on other problems with similar
results. Extension of the algorithm to
further dimensions would be a simple matter and the arguments supporting its
use on this two-dimensional problem also apply to voxel based representations
of problems with more dimensions.
3.3.8 An
n-dimensional mutation operator.
The
standard mutation operator being applied to this problem relies on randomly
flipping bits in order to permit the search to enter new areas of the solution
surface. This approach does not apply
any domain knowledge to the issues of mutation, and so it should be possible to
get improved performance from the GA by designing mutation operators which
directly address some of the perceived problems with the optimisation. These problems have been mentioned
previously in Section 3.3.6 which discussed the smoothing operator.
A new
mutation operator was designed which alters the contents of a randomly selected
rectangular area of the voxel grid, it is referred to here as the ‘two dimensional’
operator. This operator can easily be
modified to work in n-dimensions and works by affecting a relatively small area
of the chromosome very intensively.
A second, somewhat altered
version of this mutation operator was also designed and tested in these
experiments called the ‘two by two’ area mutation operator. This operator uses a fixed mutation square
of two by two voxels and was designed to be applied only if at least one voxel
in the mutation area is already active.
The theory behind this operator is that most of the modifications need
to be made to the surface or interior of the evolving shape and that very
little benefit will result from flipping isolated voxels in the middle of the
void areas. The choice of a fixed two
by two area was motivated by the observation that most of the irregularities on
the surfaces would fit into such an area and that with only sixteen
permutations possible (four binary bits), the probability of mutating a poor
quality area into a more fit variation would be reasonably high.
The new operators were
applied in addition to the original
bitwise mutation operator, with a probability of 0.25 per chromosome of being
applied. After each application there
is a decreased probability of the same operator being applied again, with the
probability of a further application being decreased to one half of its
previous value each time. The
experiments were performed ten times for each of the three alternative mutation
combinations, over a period of fifteen hundred generations.
The graph in Figure 3.17
shows the effect of the two new mutation operators alongside the results
obtained when neither of them was applied.
The generation number is plotted along the horizontal axis and the
average fitness of the best individual from the population at each generation
is plotted vertically.
The addition of the two
dimensional operator generally results in better performance than the bitwise
operator alone, though the two lines do meet between generations 300 to
400. The steeper descent of the two
dimensional operator line indicates that early performance was especially
improved, and the final result after fifteen hundred generations is
significantly better than previously.
The two by two operator offers a similar rate of improvement during the
early stages of the trial, a slightly better performance between generations
100 to 600 and finally converges with the two dimensional operator’s line at
about generation 1000. This seems to
indicate that although offering early benefits to the optimisation, it is not
significantly better than the two dimensional operator in the long run.
In
conclusion, two new mutation operators were designed with the particular
intention of directly addressing the perceived problems with the prior
optimisations. Both of the new
operators were found to be more effective than the previous uninformed bitwise
mutation, producing benefits to both the rate of early improvement and the
final quality of solution generated.
In the
absence of any other clearly distinguishing features, the two by two operator
will be used during the further experiments as it offers a slight code speed
advantage over the two dimensional mutation operator outlined above.
3.3.9 Dynamic mutation operator probabilities.
Dynamically
varying operators have been used in many different studies of the GA, most
relevantly [Tucson & Ross 96] who concluded that the applicability of this
approach depends very much on the problem under consideration. The theory behind this approach is that some
operators are more effective during a particular phase of the
optimisation. For example, the
smoothing operator described in Section 3.3.6 generally performs large scale
changes to the chromosomes, and this makes it ideal for chopping away all of
the excess material during the early stages of the optimisation. However towards the end of the optimisation,
most of the changes which will improve the chromosomes are very small. This is due to the fact that the
optimisation generally moves closer towards the problem constraints as it
progresses and hence almost any large scale alteration is likely to cause a
constraint violation.
Similarly
the two by two mutation operator makes small changes in the chromosome, and
while these are certainly very important during the early stages, they become
the major source of progress when the
population is close to convergence.
This
experiment will use a dynamically varying mutation probability factor in the
otherwise standard GA* to test
this theory and see if any significant benefits can be achieved by this
approach. The mutation probability will
start at 0.5 and increase by 0.00025 per generation until it reaches a maximum
of 0.8, which will occur after 1200 generations. The probability will stay at that level for the remaining 300
generations of the 1500 generation trial period. The starting value of 0.5 was chosen as it had been used in a previous
experiment with the two by two mutation operator and had produced some good
results. The ending value was set to
0.8 because it is sufficiently larger than 0.5 that the dynamic probability
effects should be visible. The speed of
0.00025 was calculated after deciding that the mutation probability should stop
changing before the end of the trial run.
The graph
in Figure 3.18 shows the fitness curves for the static two by two mutation at a
probability of 0.25 and the dynamic mutation probability. The vertical axis represents the fitness
value versus the generation which is numbered horizontally. The two curves represent the average values of
the best individual at each generation over the ten trial runs.
Figure
3.18 show that the static mutation operator starts off achieving better results
and continues to do well right through the first 400 generations. It has the most significant advantage (over
the dynamic probability) at approximately generation 310 where the two curves
have their greatest vertical separation.
From this point on the dynamic probability starts to catch up, and it
achieves equal results near generation 800 when the dynamic probability value
would have been:
0.5 + 0.00025 * 800 = 0.7.
The two curves cross and the
dynamic probability continues to perform increasingly better until at the end
of the trial run the dynamic probability average fitness was 861.399 compared
with the static mutation’s average fitness value of 906.699.
On the basis of this experiment it appears that dynamic mutation
probabilities have a positive effect on the efficiency of the
optimisation. However the poor early
results suggest that it may not work very well for short analyses or when the
rate of early improvements is particularly critical. Following this result it was decided that the dynamic mutation
probabilities would only be enabled when the experiments seem to need very high
mutation rates towards the end of a run.
3.3.10
Comparison of modified GA with naïve GA.
After
incorporating all of the most beneficial alterations and new operators
discovered during the previous set of experiments the modified GA was run for
ten trials of two-thousand generations in order to compare it’s results with
those gained for the naïve GA earlier.
The comparison can be seen in the graph Figure 3.19 which shows the
fitness curve generated for the original GA and the same curve for the final
modified GA.
The settings used to achieve
these results were:
Population Size = 20
Ranking Pressure = 1.7
Crossover Probability = 0.35 (per chromosome)
Bitwise Mutation = 0.001 (per bit)
Two By Two Mutation Starting = 0.25 (per chromosome)
Two By Two Mutation Maximum = 0.75 (per chromosome)
Two By Two Mutation Speed = 0.00025 (per generation)
Smoothing Mutation Starting = 0.5 (per chromosome)
Smoothing Mutation Ending = 0.25 (per chromosome)
Smoothing Mutation Speed = -0.000125 (per generation)
The modified GA performs better than the original
one throughout the optimisation period, with considerably better optimisations
being found during the first ten generations and producing final results which
are about 11% better than those found by the naïve GA. Also significant is the fact that the
modified GA found almost no further improvements during the last thousand
generations, the average best fitness over this time altered only from 846 to
838. Looking at the final results
produced from this run in Figure 3.20, it is clear that they are very close to
the theoretical global optimum for this problem.
3.4
Conclusions about the simplified physics model experiments.
The
experiments described in this chapter were intended to find new operators and
better parameter settings for a naïve GA, thereby improving it’s performance
ready for application to a complicated real-world problem. The focus has not been on fine-tuning the
parameter settings for this particular optimisation, but rather on determining
the effects of the various parameters.
Similarly the new operators were not designed to solve the unique difficulties uncovered by the
experiments, but to address issues relating to a generalised n-dimensional
voxel based representation.
The
results have shown that although a naïve GA does indeed suffer from the
problems suggested by [Watabe & Okino 93], a small selection of operators
informed only by domain knowledge about the representation, will effectively
solve each of these difficulties and permit the production of useful results.
The final
system uses a normal bitwise mutation operator in addition to the two new
mutation operators, smoothing and two by two.
Both of the new mutation operators are applied using a time-varying
probability in order to maximise their effects at the appropriate stages of the
optimisation. The smoothing operator
rapidly cuts away unwanted areas of material during the early stages of the
optimisation and can help to smooth ragged edges and fill small holes later
on. The two by two mutation operator is
highly effective at both smoothing off ragged edges and at filling in small
holes in the material if they occur in undesirable places. The two-point crossover operator has been
replaced by the n-dimensional UNBLOX operator described in work by [Cartwright
& Harris 93], and this alteration directly answers the issue of whether the
children produced by crossover will be valid with any degree of
reliability. Finally the Genitor style
ranked survivor selection [Whitley 89] permits easy control over the degree of
exploitation versus exploration that occurs, and also separates the proportion
of fit individuals selected from their actual fitness values, making the whole
GA less sensitive to changes in the type of evaluation function being applied.
Chapter Four.
Transferring the solutions to real problems.
The
motivation for the experiments detailed in Chapter Three was to produce an
effective GA which can quickly and efficiently optimise a two-dimensional shape
optimisation problem represented by a voxel grid. The work so far has used an evaluation function based on a highly
simplified physics model of the forces and stresses involved in a beam loading
problem. The experiments in this
chapter will detail how the same improved GA was then modified to use a
commercial Finite Element Analysis (FEA) package called Ansys* as it’s evaluation function, and how
the combination of the optimised GA and Ansys worked to optimise an annulus
design problem which has been under research by Rolls Royce. It will be seen that although several major
difficulties were encountered in both the inter-package communications and in
the optimisation itself, the difficulties were not insurmountable and the final
system was capable of producing both interesting and useful results.
4.1 Motivation for this approach.
There were
several different motivations for taking this approach to extending the
experiments. It was considered
important to ensure that the arguments put forwards in Section 3.3 were correct
and that the optimisations made to the GA would still be applicable to a much
harder real-world problem. Engineers do
need to solve this type of shape optimisation problem and if this approach is
successful then it could assist them to achieve better results. GA optimisations can easily be modified into
hybrid systems [Tucson et al. 97] and
in this case the computer would rely on an engineer’s practical experience and
knowledge of the problem domain to direct key choices in the optimisation
process. Finally, GAs are also an ideal
tool with which to address this type of problem, as the population of final solutions will allow engineers to choose the
one they consider most appropriate using any further criteria which were not
built into the fitness function.
4.2 The annulus design problem.
The
annulus design problem comes from a specification supplied by Rolls Royce plc
to Richard Smith during his time in the Mechanical Engineering Department at
Edinburgh University. The full original
specification of this problem is included as Appendix A. The problem is to design an annulus which is
to function as the hub of a jet-engine turbine propeller. This part will be subject to extreme forces
due to its high speed of rotation and the attachment of the turbine blades to
its outer circumference.
The actual optimisation assumes that the part is
axisymmetrical around the axis of rotation, and consequently it reduces to the
two-dimensional shape optimisation problem shown as Figure 4.1.
Annulus Axisymmetric Cross-section.
Figure 4.1
The
optimisation as performed for these experiments involved reducing the mass of
the annulus whilst observing a series of four separate stress constraints. The constraints relate to the hoop stresses
at the inner and outer circumferences and the radial stresses along the
centre line of the annulus from the hub to the rim. Hoop stresses are those that go around the annulus, effectively
into and out of the page given the cross-sectional picture in Figure 4.1. Radial stresses are those which go from the
hub to the rim (or vice-versa) or left and right in Figure 4.1.
4.3
Implementation details.
The GA fitness function was defined as:
fit = -weight[b] + (1.0 / total_stress)
Equation 4.1
Constraint
penalties were applied if any of the four constraints limits were broken, and
the constraints were ordered in importance by using 4*K*
for the most important, 3*K for the second most important, 2*K for the next and
1*K for the least important constraint.
In order to allow the GA program to use Ansys as its
evaluation function, it was first necessary to find some way of communicating
data about the shape to be optimised and the final evaluation value between the
two programs. The Ansys manuals
describe a method whereby it should be possible to link the entire Ansys
program into a user supplied program as a library, however this relies on the
use of a Fortran compiler and for the PC compatible version of Ansys it would
need to be a Windows™ Fortran compiler.
This approach was problematical due to the difficulties involved in
getting a suitable compiler and because the GA as written and optimised so far
was entirely written in C.
An
alternative method of communication was attempted whereby the GA program would
‘call-out’ to Ansys using command line specifiers to control the Ansys
program. It would also read and
interpret the files that Ansys writes to preserve the results of an
evaluation. This method was implemented
and worked satisfactorily for very small problems, however the ‘call-out’ made
use of the C ‘system()’ command which in turn uses a DOS™ type command box in
order to interpret the command specified.
This resulted in very slow evaluations as the DOS box takes two seconds
(per evaluation) to open, and also permitted a memory leak from either the
Windows DOS box or the Ansys program to gradually use up all available system
resources which would eventually cause a crash after approximately ten
generations with a population of twenty individuals.
After
detailed study of the Ansys ‘Programmer’s Manual’ a third alternative was
discovered which involved the use of the Ansys internal macro programming
language. This macro language whilst
insufficiently powerful for the implementation of the full GA, does include
instructions which perform counted loops and can ‘call-out’ to other
programs. A memory leak problem was
anticipated with the ‘call-out’ function, however by changing the orientation
of the optimisation in this way, the ‘call-out’ would only be necessary once
per generation instead of once per individual evaluation. Therefore if the memory leak was from the
DOS box the program could reasonably expect to evaluate twenty times as many
generations before crashing from the leak, which might be acceptable if no data
is lost when the program stops. The
reduced frequency of ‘call-outs’ also meant that the speed lost due to the
start-up time for the DOS box would not be such a problem.
A simple
macro was devised which looped a user-specified number of times and performed a
‘call-out’ to a small C program on each iteration. This worked extremely well, and did not suffer from memory leak
problems even after one-thousand iterations.
The memory leak was therefore in Ansys itself, which would not be a
problem as the new approach only involves starting Ansys once and then
permitting the macro to control the optimisation process.
Ansys
requires two different data files in order to define the shape which it is
attempting to optimise; the nodal position file and the element connection
file. The nodal position file specifies
where in the optimisation space the nodal points are located. Each node has a number which is used in the
element connection file to specify which nodes are connected together to form
elements. Connected nodes form the
corners of the voxels which combine to form the shape to be optimised. Figure 4.2 shows how these files combine to
define the optimisation shape. The
nodes are represented by the circles, and the lines represent the connections
between them. In this implementation,
the node position file is constant which allows it to be set up during the
initialisation phase and thereby saves valuable processor time. The element files are created from the
chromosomes just before the GA program releases control back to the Ansys
macro.
Nodes are Connected Together to Form Elements.
Figure 4.2
Interpreting
the files required by Ansys was achieved by detailed reference to the
Programmer’s manual and cross-checking with the output produced from a very
simple analysis performed on a fully occupied rectilinear grid. The appropriate routines were added to the
existing GA code and a command-line interpreting capability was also added so
that the Ansys macro could easily command the GA program to initialise the
population or produce the next generation, as appropriate. Other functions added to the GA code
included the ability to convert the chromosomes into the representation
expected by the Ansys program and write these out in a series of standard files
used by the macro. With these
modifications in place the evaluation macro which would control the Ansys
evaluations was written.
A listing
of the full Ansys macro can be found in Appendix B as Listing B.1 followed by
an abbreviated macro which was originally used to check that the evaluation
would perform as desired. This
abbreviated macro, included as Listing B.2, performs the following operations:
n
Set
the evaluation mode to Batch processing
n
Restrict
the amount of excess data that Ansys produces to an absolute minimum
n
Instruct
Ansys to output data about the stresses produced
n
Set
up the properties of the materials to be used
n
Establish
the element types to be used to represent the voxels
n
Read
the file specifying the locations of all of the corner point nodes
n
Define
the type of analysis to be performed
n
Specify
the rotation speed of the annulus
n
Set
the level of accuracy of analysis required
n
Read
the file specifying the nodal connections which form the voxel elements
n
Select
a subset of the nodes defining the extreme right-hand edge of the annulus
n
Apply
the force which simulates the attachment of the turbine blades
n
Instruct
Ansys to perform the evaluation
n
Output
the relevant results for both Bore and Hoop stresses to standard files
n
Exit
The complete analysis macro commences by calling the
GA program (called ‘stress.exe’) with command line options to initialise the
population. It encloses the above
evaluation commands with a loop that iterates a user specified number of times,
calling the GA program at the end of each loop in order to generate the next
generation of chromosomes. Due to
restrictions in the macro language it was not possible to construct suitable filenames for the output files for each
individual member of the population, so the analysis portion of the macro was
simply repeated twenty times inside the loop with a different set of filenames
for each repetition. This obviously
fixes the population size to twenty individuals, however the GA program is
capable of modifying the macro instruction file before the analysis
commences. This permits a simple
addition to the program to create the appropriate number of evaluation
instructions if a variable population size is desired.
4.4 Results
from the basic system.
The purpose of these first experiments was to determine
if the Ansys macro-language/GA hybrid system would work as intended and also to
see how well it performs on the annulus optimisation problem.
The
settings used for the GA were:
population size = 20
cross-over rate = 0.3
mutation rate = 0.8
smoothing rate = 0.8
rank selection pressure = 1.7
horizontal size of area = 62 voxels
vertical size of area = 27 voxels
constraint
penalty = 0.00005
The settings used for the annulus were:
horizontal size of area = 0.25 metres
vertical size of area = 0.05 metres
radius of hole = 0.10 metres
blade force = 10e5 Newton/radian
Young’s modulus = 2.238e11 Pascal
material density = 8.221e3 kg/m3
revolution speed = 1571.0 radian/second
The constraints to be
observed were:
hub hoop stress < 1330 MPa
rim hoop stress < 396 MPa
inner radial
stress < 741 MPa
outer radial
stress < 334 MPa
The basic
system was applied without further modifications to the annulus optimisation,
however the problem as specified by Rolls Royce is extremely tightly constrained
which meant that the attempts to solve this problem using random population
initialisation violated all of the stress constraints by large amounts, and the
rate of improvement in the population, when extrapolated beyond the time period
allocated to the experiments, indicated that a valid solution would not be
found for some considerable number of generations still to come.
To circumvent this problem the population was
instead initialised with a selection of variations on the annulus design supplied
by Rolls Royce, which were modified further by an intensive random mutation
operator which added and removed small areas of material over the surface of
the annulus design. This kind of
intelligent initialisation is reasonable as a user will often want to start the
GA with the existing designs in order to see what improvements can be
made. Even when a totally new shape is
being designed, the user will normally have some expectation about the final
form, and this could be drawn by hand and scanned into the program. The intelligent initialisation approach
meant that the initial population was not unreasonably far outside of the
stress constraints, yet supplied the optimisation with sufficient variation
that the population did not rapidly converge onto a single solution. Some of the results from this basic system
can be seen in Figure 4.3 which shows six members of the population after
seventy-five generations.
Results of the Basic Annulus Optimisation After 75 Generations.
Figure 4.3
The
results shown in Figure 4.3 are extremely poor, the lack of symmetry around the
horizontal axis and the uneven surfaces are just the most visible failings in
this set of results. Another problem
which becomes visible when using Ansys to analyse an individual was that
extremely high stress values were present in the corners of many of the voxel
areas.
The graph
shown as Figure 4.4 shows the fitness curve for these results, with the
generation represented on the horizontal axis and the fitness value of the best
individual of the population shown as the vertical axis. Due to the fact that the fitness values
returned by this evaluation are negative, the curve is vertically inverted
compared with the curves produced for Chapter Three.
Although the first
thirty-five generations show a substantial rate of improvement this is mainly
due to the violations of the stress constraint becoming less severe. At the fifty-second generation the first
valid solution is found and the curve from there on is almost level, indicating
that no further significant improvements were found. The graph indicates that the GA is performing the optimisation
correctly and is capable of producing a valid solution when supplied with an
initial population that breaks the stress constraints, however it also shows
that the rate of optimisation is very poor.
The results of this initial
experiment are only moderately encouraging; without any special operators being
designed for the new problem domain, the GA has managed to take a population of
poor annulus designs and improve them.
The first stage in this process was to obtain a viable solution, and the
GA achieved this during the first fifty-two generations. The second stage should involve improving
the solution to try to find a near-optimal answer, but the GA only managed to
improve the fitness value from -108.245 at generation 52 to -107.156 at
generation 75.
A further investigation into
the reasons for this failure was made, and the fitness log file produced during
the optimisation was examined to try to find an explanation. The log file is included in Appendix C as
Listing C.1 and it is clear from the predominance of extremely large negative
numbers in the final twenty generations that the majority of the population is
violating at least one and probably several of the stress constraints. This indicates that the stress constraints
are so tight that even minor changes to a valid chromosome can result in
extreme violations of them.
The
experiments with the basic system operating on the annulus problem have
highlighted several major problems which the optimisation must overcome in
order to be successful:
n
Random
initialisation of the population was found to produce results that violated all
of the constraints so badly that it would take a very long run just to get a
valid solution.
n
It
takes a very long time to find a valid solution even when initialised with
reasonable designs.
n
Valid
solutions when found contained small holes and protuberances and were not
symmetrical.
n
The
constraints imposed are extremely tight and cause a proliferation of invalid
solutions from even small changes in the chromosome.
n
Extremely
high stress values for both hoop and radial stresses are present in the corners
of many of the voxel areas.
These
problems are addressed in Section 4.5.
4.5
Improvements made to the system.
In order
to improve the efficiency of the optimisation process several improvements were
made to the GA and to the form of the analysis. Firstly, in order to reduce the search space of the problem being
optimised, a symmetry constraint was imposed, with the axis of reflection
defined to be horizontal through the middle of the shape. The GA was modified to reconstruct the final
shape in its entirety only when producing the element definition files to be
accessed by Ansys. This simple
modification reduces the search space from a typical size of 22542
for a 62 voxel by 41 voxel grid, to 21302 which represents a 62
voxel by 21 voxel half-grid. The centre
line along the axis of symmetry is not mirrored as it is now enforced by the GA
to be always turned on. This also
provides a guaranteed central line of elements for the stress measurements to
be taken from.
One of the
problems that was highlighted in the first set of experiments is that the FE
package does not deal very well with sharp corners. This is a general failing in FE packages and not a particular
weakness of Ansys, but it constitutes a very major problem given the use of a
voxel based representation. In an
attempt to alleviate this problem a second type of element was defined by the
optimisation macro. The new element
type is triangular and is created by specifying connections between groups of
three nodes in the element connection file.
These triangular elements are added to the shape at all suitable
‘steps’, which are identified by convolving the voxels in the shape against a
series of four matching template masks .
If each square in the mask matches the value of the voxels surrounding
an empty voxel then the appropriate triangular element is created in the
‘step’. The convolution masks and the
triangles which they cause to be inserted are shown in Figure 4.5.
Convolution Masks for Triangle Insertion Process.
Figure 4.5
The
triangular elements were applied in order to smooth off the corners left at
voxel ‘steps’, so it was expected that the artificially high stress levels
reported by the FE evaluation at the corners of the voxel areas would be
removed.
The small
holes appearing in the material may be due to one or more of several different
causes:
n
The
holes are appearing in low stress areas and are a valid part of the solution.
n
They
are caused by the mutation operators and would be removed if the optimisation
was allowed to progress further.
n
They
are an attempt by the GA to represent a lower density material indicating that
although material is needed at that location, it need not be as strong as the
basic material being used.
Regardless
of which of these explanations is accepted, the reality is that current
manufacturing processes would find it extremely difficult to produce a solid
annulus with these small holes present, so it is therefore desirable to modify
the operators to try to eliminate them, or at least reduce the number of them
present. This was accomplished very
easily by modifying the two by two mutation operator (the operator which can
either fix holes or cause them to appear) to only mutate areas where, as well
as at least one voxel being turned on, at least one of the four voxels is also
turned off. The result of this modification
is that the two by two mutation operator can now only mutate at the boundaries
of the shapes being formed, and consequently it should also help reduce the
number of small protuberances.
The improved GA for annulus optimisation used the
same settings as the basic system for all parameters except that the
chromosomal grid was set to 21 voxels high, which is mirrored due to the
symmetry constraint to produce a voxel grid height of 41 voxels.
The
analysis was permitted to continue for 114 generations and this took
approximately twenty-four hours in total.
The fitness curve for this analysis is shown as Figure 4.6 which shows
the generation number on the horizontal axis and fitness on the vertical axis,
the data line represents the fitness of the best member of the population at
each generation. This graph shows a
considerable improvement in the GA performance over the basic system. The population once again starts without
any valid individuals but some extremely rapid early improvements followed by
regular small advancements generate the first valid member after only
thirty-one passes. Once again the GA
has difficulty improving upon this first valid individual, however examining
the detail of the portion of the graph where valid individuals were created
(Figure 4.7) reveals constant small improvements being made with occasional
larger changes. The fitness log for
this run is included in Appendix C as Listing C.2.
Some of the final population
created by the improved GA is shown in Figure 4.8 which displays three of the twenty individuals and
shows a clear improvement in quality over the results generated
previously. The small protuberances
have been totally eliminated and only a few members of the population contain
small holes. The rate at which a valid
solution was found is considerably faster than the basic implementation, and
once found, the GA continued to improve upon this solution even to the very
last pass of this trial.
Final Annulus Cross-Sections From Improved GA
Figure 4.8
After using Ansys to examine
the solutions produced by this optimisation, it was possible to confirm that
the triangles are indeed working as expected and the amount of stress in the
regions immediately surrounding a step which has been smoothed is far less than
for the steps which have not been smoothed.
Figure 4.9 shows the stress values calculated by Ansys for the voxels
surrounding steps in two typical runs and clearly shows how the triangles
permit the excess stress to be distributed in a more even pattern. Darker shades indicate higher stress levels
in both of these pictures.
Without Smoothing Triangles.
With Smoothing Triangles.
Figure 4.9
Examination
of the final results of these experiments reveals several unexpected features,
in particular the overhanging component in the cob of the annulus is extremely
interesting. A trial analysis using
Ansys to evaluate the shape with the overhang replaced with a more conventional
sloping solid cob resulted in violations of both the maximum radial stress constraint
and the inner hoop stress constraint.
Several different adjustments were made but the violations could not be
easily repaired. These results imply
that the overhang is a genuine benefit to the annulus design, permitting a
lower mass solution than is possible without it’s presence. A parametric representation of the annulus
would probably not have discovered this result because there is no obvious
reason to suspect that an overhang will
be beneficial, and so there would be no incentive to provide variable
parameters which would allow the overhang to form. This unexpected discovery thoroughly vindicates the choice of a
voxel representation, and validates the points made in Section 2.3.3
Another
interesting result is the presence in the best individual of the population of
two short horizontal holes near the point where the neck of the annulus
connects to the rim. This is unexpected
as the operators have been heavily biased against producing such holes which
implies that they too offer genuine advantages to the annulus design. The holes appeared just before the end of
the trial run and it would be interesting to see if they remain after many
further generations or whether they are just fore-runners of some larger change
in the shape.
4.6 Conclusions about the real-world system.
The Best Annulus Design From the Final Set of Experiments
Figure 4.10
This
Chapter has described the experiments which extended the work from Chapter
Three to deal with a real-world problem using a full commercial Finite Element
Analysis package.
Two sets
of experiments were performed: the first set took all of the previous work and
applied it directly to the new problem domain.
As was expected, this was not very successful due to problems with
population initialisation, holes and protuberances, lack of symmetry and
extremely high stress values due to the sharp corners caused by the voxel
representation.
The next
set of experiments applied the same principle of directly addressing the
problems that was used successfully in Chapter Three, this time via operator
modifications and additions to the representation used. These experiments were considerably more
successful, providing much faster early improvements leading to valid individuals
very quickly. The rate of further
improvements after discovery of a valid individual was also much greater which
lead to continual progress throughout the whole optimisation run.
The final
results gained from the improved optimisation process contained several
interesting features and should be viable annulus designs according to the
stress figures produced by Ansys.
Chapter Five.
Conclusion:
The work described in this
thesis was intended to find a set of suitable operators to permit effective
optimisation of a voxel based representation using an evolutionary
algorithm. The experiments then
attempted to discover whether the combination of the GA coupled with the voxel
based shape representation could perform a real-world analysis task with
worthwhile results.
5.1 Summary of Conclusions.
The choice of a voxel based
representation for this problem was contrary to some of the arguments in the
literature [Watabe & Okino 93], but the results showed that with a
combination of good operator design and a careful, principled and informed choice
of the domain knowledge to be applied, the problems of small holes, long
chromosomes, meaningless crossover and uneven edges can be avoided. The advantages to be gained from the voxel
representation make the additional effort required to get good solutions a
worthwhile endeavour.
The experiments which were
performed on the beam cross-section optimisation were evaluated by a fitness
function which makes simplifying assumptions about the physics of the situation
in order to permit rapid investigations into the design and implementation of
better operators. They included:
implementation of the Genitor rank selection algorithm due to [Whitley 89];
discovering the effect of changing the constraint penalty multiplier;
experimenting with a dynamically changing constraint penalty multiplier;
development of the new mutation operator called ‘smoothing’; implementation of
the UNBLOX crossover algorithm [Cartwright & Harris 93]; creation of
another new mutation operator called ‘two by two mutation’ and experimentation
with dynamically changing mutation probabilities. These experiments resulted in considerable improvements in the
effectiveness of the GA at searching for solutions to the beam optimisation
problem, eventually reaching the point where the GA was finding a near optimal
solution in less than a thousand generations (Section 3.3.10).
The annulus design
experiments used the knowledge gained from this first stage of operator design
and testing, and applied it to the real-world problem of optimisation of a
turbine annulus for minimum mass within multiple stress constraints, using the
Ansys commercial FE analysis package to perform the evaluations. These experiments were quite unsuccessful
initially, with very poor results being generated and several difficulties with
the interactions between voxels and the FE package being discovered. However, using the knowledge about the GA
gained during the beam analysis and by directly addressing the problems as they
manifested themselves in the voxel grid, it was possible to solve these
difficulties and achieve a successful optimisation system. The final system was able to optimise an
annulus design which initially failed several of the stress constraints and was
quite heavy, into a light-weight annulus which met all of the constraints.
One of the
key issues involved in taking an approach that involved two separate
optimisation stages, was whether the operators designed for the simple beam
optimisation problem would work effectively on a much harder problem like the
annulus design? The results gained from
the annulus design experiments seem to indicate that this is the case, which is
an important result for researchers who are dealing with similar long
evaluation period GAs and who may wish to design operators in a more interactive
way.
A very
important result was gained from the final set of annulus design experiments;
the generation of an annulus with an overhanging ledge in the cob was totally
unexpected and argues strongly for the use of unbounded representational
approaches such as voxels. It is highly
unlikely that a person designing a parametric representation for the annulus
optimisation would include parameters to represent such a ledge, unless they
already expected that it would be required.
The
real-world optimisation system used to evolve an annulus design was not
directed towards that problem in particular.
By modifying the macro which controls Ansys it should be possible to use
the same system to evolve designs for many different two-dimensional
components, provided that Ansys is capable of evaluating the fitness of the
individuals. The restriction to
two-dimensions is not necessary either, however no work was done using these operators
on a three-dimensional optimisation so it is not known whether they will work
as desired (although it would appear to be likely).
5.2 Further work.
Further
developments and improvements to this optimisation program should address the
weaknesses of the system as it stands, some simple code additions should also
be mentioned. These will now be
considered in turn:
1. The GA
requires a better means of initialising the population to a prepared design
shape. It should be a relatively easy
step to add code that will take a scanned image of a design and allow the user
to clean it up and use it for initialisation of the population. Such a modification would simplify the
incorporation of preconceived solutions into the design space, and would also
be extremely useful for design modifications if the program was developed into
a hybrid system.
2. The system
has not yet been tested on three-dimensional problems and no experiments have
yet been performed to test the effectiveness of the n-dimensional operators in
more than two-dimensions. The key issue
in such experiments would be to see if the operators do extend to
three-dimensions as easily and effectively as was predicted in Chapter Three.
3. The major
weakness of the voxel representation was not due to the long chromosomes or any
of the other predicted problem areas.
Rather it was due to the fact that finite element analyses do not deal
very well with the sharp corners or the voxels. It may be possible to rewrite the Ansys macro to use the
'auto-meshing' capabilities of the package; auto-meshing permits the Ansys
program to subdivide the outline of a shape into suitable elements for analysis
itself. This approach would involve a
further change of representation from voxels to the auto-meshed outline of the
shape under consideration, but this should be irrelevant as the two
representations would be functionally equivalent.
4. Finally, on
a technical note, the optimisation fails after a large number of generations
due to the creation and constant expansion of a ‘page’ file maintained by
Ansys. It would aid both the execution
speed and the usefulness of the system if some way of preventing its’ growth or
destroying this file between generations could be found.
In
summary, with only a few modifications to the GA program, it should be possible
to allow this system to use human input and create a hybrid system which will
work with an engineer present to assist in the design process. Such systems are becoming increasingly
popular as they combine the search power of a GA with the knowledge and design
intuition of experienced engineers [Tucson et
al. 97].
Appendix A - Rolls Royce disc optimisation problem
specification (ref. E/ASS/40002) is available from the author or from Dr. F.
Mills at Dept. of Mechanical Engineering, Edinburgh University.
Appendix B Ansys macro listings
Listing B.1: Full optimisation macro mask listing
This
appendix contains the macro mask that is used to build the input file to Ansys
to perform the full optimisation.
/batch !put Ansys into batch processing
mode
/uis,msgpop,3 !limit the number of warning messages
produced
/prep7 !enter the pre-processor mode
/nolist
/nopr
/nop !turn off most of the text file
outputs
outres,all,none
outres,strs,last !set the output mode to dump stresses
only
time,1 !set the time stage for the
optimisation to occur at
uimp,1,ex,,,**** !mask statement for the material properties
uimp,1,dens,,,**** !mask statement for the material density
et,1,plane42,0,0,1,,2,0 !element type 1 is rectangles
et,2,plane2,,,1,,2,0 !element type 2 is squares
finish
/syp,"f:\stress",1 !make the stress.exe program initialise the
population
/prep7
nread,nodes,dat,f:\ !read in the node position data file
antype,STATIC !specify the type of analysis to be
performed
omega,0,****,0,0 !mask statement to set the rotational velocity
eqslv,iter,1e-005,0 !set the equation solver limits of accuracy
finish
*do,pass,0,loops,1 !for a user specified number of loops do
/prep7
numcmp,elem !compress the element numbers down to
start from 1
eread,elems00,dat,f:\ !read the element connection file
nsel,s,loc,x,****,**** !mask statement to select the rightmost
column of nodes
f,all,fx,**** !mask statement to apply the blade load
force to selected nodes
nsel,all !select all nodes again
/solv
solve !solve the analysis
/post1
/output,xsol_00,log,f:\ !specify the output file
etable,table,s,x !dump the radial stresses into the output file
pretab,table
/output,zsol_00,log,f:\ !specify the output file
etable,table,s,z !dump the hoop stresses into the output
file
pretab,table
/output
finish !finish output processing mode
/prep7 !do it all again for the next 19
members of the population…
esel,all
edele,all
numcmp,elem
eread,elems01,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_01,log,f:\
etable,table,s,x
pretab,table
/output,zsol_01,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems02,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_02,log,f:\
etable,table,s,x
pretab,table
/output,zsol_02,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems03,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_03,log,f:\
etable,table,s,x
pretab,table
/output,zsol_03,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems04,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_04,log,f:\
etable,table,s,x
pretab,table
/output,zsol_04,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems05,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_05,log,f:\
etable,table,s,x
pretab,table
/output,zsol_05,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems06,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_06,log,f:\
etable,table,s,x
pretab,table
/output,zsol_06,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems07,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_07,log,f:\
etable,table,s,x
pretab,table
/output,zsol_07,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems08,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_08,log,f:\
etable,table,s,x
pretab,table
/output,zsol_08,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems09,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_09,log,f:\
etable,table,s,x
pretab,table
/output,zsol_09,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems10,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_10,log,f:\
etable,table,s,x
pretab,table
/output,zsol_10,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems11,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_11,log,f:\
etable,table,s,x
pretab,table
/output,zsol_11,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems12,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_12,log,f:\
etable,table,s,x
pretab,table
/output,zsol_12,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems13,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_13,log,f:\
etable,table,s,x
pretab,table
/output,zsol_13,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems14,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_14,log,f:\
etable,table,s,x
pretab,table
/output,zsol_14,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems15,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_15,log,f:\
etable,table,s,x
pretab,table
/output,zsol_15,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems16,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_16,log,f:\
etable,table,s,x
pretab,table
/output,zsol_16,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems17,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_17,log,f:\
etable,table,s,x
pretab,table
/output,zsol_17,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems18,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_18,log,f:\
etable,table,s,x
pretab,table
/output,zsol_18,log,f:\
etable,table,s,z
pretab,table
/output
finish
/prep7
esel,all
edele,all
numcmp,elem
eread,elems19,dat,f:\
nsel,s,loc,x,****,****
f,all,fx,****
nsel,all
/solv
solve
/post1
/output,xsol_19,log,f:\
etable,table,s,x
pretab,table
/output,zsol_19,log,f:\
etable,table,s,z
pretab,table
/output
finish
/syp,"f:\stress" !call the stress.exe program to generate
the next generation
/prep7
esel,all
edele,all !delete all the elements to leave the
system clean
*enddo !end of for loop
Listing B.2 Single optimisation macro listing
/batch !put Ansys into batch processing
mode
/uis,msgpop,3 !limit the number of warning messages
produced
/prep7 !enter the pre-processor mode
/nolist
/nopr
/nop !turn off most of the text file
outputs
outres,all,none
outres,strs,last !set the output mode to dump stresses
only
time,1 !set the time stage for the
optimisation to occur at
uimp,1,ex,,,223800000000.000000 !set the material’s Youngs modulus value
uimp,1,dens,,,8221.000000 !set the material’s density value
et,1,plane42,0,0,1,,2,0 !element type 1 is rectangles
et,2,plane2,,,1,,2,0 !element type 2 is squares
finish
/syp,"f:\stress",1 !make the stress.exe program initialise the
population
/prep7
nread,nodes,dat,f:\ !read in the node position data file
antype,STATIC !specify the type of analysis to be
performed
omega,0,1571.000000,0,0 !set the rotational velocity of the annulus
eqslv,iter,1e-005,0 !set the equation solver limits of accuracy
finish
/prep7
numcmp,elem !compress the element numbers down to
start from 1
eread,elems00,dat,f:\ !read the element connection file
nsel,s,loc,x,0.347984,0.352016 !select the nodes to apply force to
f,all,fx,224399.478571 !apply the force to the nodes
nsel,all !select all nodes again
/solv
solve !solve the analysis
/post1
/output,xsol_00,log,f:\ !specify the output file
etable,table,s,x !dump the radial stresses into the output file
pretab,table
/output,zsol_00,log,f:\ !specify the output file
etable,table,s,z !dump the hoop stresses into the output
file
pretab,table
/output
finish !finish output processing mode
Appendix C Results
log files
Listing C.1 Log of basic GA results on annulus problem
The
format of these files is:
Generation Number : fitness
0 fitness 1 fitness 2 ... fitness 19
1 : -42932.375355 -209052.043278 -366222.725516 -177921.441817 -290383.502632 -204717.638115 -383428.754670 -149488.406312 -210767.469526 -274748.083995 -299505.669458 -120901.038435 -252522.230075 -377815.136390 -390323.154032 -192801.527640 -158886.531250 -261009.410987 -253844.248821 -255119.580400
2 : -42932.375355 -192801.527640 -210767.469526 -192801.527640 -290383.502632 -196517.325499 -149294.406311 -253969.098581 -206613.760103 -211263.427786 -161835.724010 -252030.590813 -249666.813568 -258225.203667 -410058.101044 -115619.653922 -205433.928061 -256991.346884 -156798.467123 -207461.492518
3 : -42932.375355 -44122.208632 -250060.025003 -177708.965719 -263667.765633 -78624.839133 -258296.914046 -211263.427786 -106925.388304 -202542.499690 -259175.200558 -160472.183664 -42932.375355 -158686.967882 -146031.188406 -188856.054211 -156798.467123 -108204.632130 -225885.370146 -144272.084068
4 : -42932.375355 -43558.811498 -225515.726612 -145914.420455 -154900.736163 -376506.668266 -324827.820724 -273849.672397 -106925.388304 -199532.264419 -88522.798834 -42677.194010 -268729.756541 -55287.905629 -144272.084068 -144272.084068 -319877.895688 -76804.905379 -43642.997481 -218997.164334
5 : -42677.194010 -108745.288764 -41165.448989 -144272.084068 -40011.338148 -379005.216762 -43558.811498 -388031.637565 -55287.905629 -44198.294526 -58864.539302 -269974.331478 -218997.164334 -43558.811498 -141282.379258 -42677.194010 -146044.623574 -43642.997481 -106965.544765 -157113.183425
6 : -40011.338148 -52849.520737 -42076.767242 -148885.889172 -211045.631199 -173141.170431 -44098.723471 -388031.637565 -40336.240788 -40011.338148 -41165.448989 -146108.866156 -41044.708056 -43383.245081 -107440.458598 -41544.530026 -315581.782211 -40011.338148 -409644.958301 -144272.084068
7 : -40011.338148 -146108.866156 -41544.530026 -398423.700875 -41544.530026 -41044.708056 -42076.767242 -402264.330353 -133035.602144 -317505.435520 -170945.798095 -145659.837706 -145024.582836 -124929.602305 -151672.666770 -114599.417809 -41044.768089 -135768.564719 -180816.657632 -118605.761249
8 : -40011.338148 -44135.823197 -41105.530798 -73891.477348 -100343.623077 -41044.708056 -35048.991381 -116415.012551 -504957.670094 -41044.768089 -46339.790514 -154947.405396 -114704.734773 -118605.761249 -153203.003157 -41044.768089 -317505.435520 -58324.407626 -41044.708056 -41812.723425
9 : -35048.991381 -316254.609307 -73831.164427 -40890.652761 -41074.874779 -42169.085328 -41105.530798 -41105.530798 -54563.126489 -441843.303268 -76247.062142 -46339.790514 -113703.504565 -241599.264192 -21018.368779 -117361.720546 -314676.670188 -145559.788427 -101048.531939 -71480.653982
10 : -21018.368779 -490525.281716 -45847.837620 -44716.433491 -113703.504565 -54563.126489 -33457.099977 -41059.973388 -41260.050089 -46173.668269 -71445.406383 -74746.085732 -114023.256966 -317319.290293 -310157.374655 -74702.381589 -75735.889772 -240461.078222 -44658.271307 -84856.692010
11 : -21018.368779 -54563.126489 -44658.271307 -45847.837620 -264496.696514 -23774.718548 -111812.956484 -73666.909096 -114108.187600 -45847.837620 -490004.720262 -240530.583645 -80454.671345 -74141.974418 -402077.893855 -79614.737010 -47364.845086 -41260.050089 -318888.751744 -84856.692010
12 : -21018.368779 -302491.442518 -128942.190072 -41113.411986 -264496.696514 -44658.271307 -48120.085981 -25287.183891 -81124.050792 -74562.634477 -52857.961825 -404302.353515 -86616.330567 -264496.696514 -42205.315422 -54563.126489 -402729.634974 -23774.718548 -46508.553673 -48171.263281
13 : -21018.368779 -21018.368779 -23774.718548 -53888.897282 -42582.699273 -53188.791522 -61427.313107 -53331.786775 -167001.740976 -23774.718548 -109731.433664 -164398.268449 -48628.172143 -42190.123814 -45278.177605 -52857.961825 -264496.696514 -81124.050792 -73346.927757 -45457.802473
14 : -21018.368779 -44602.705110 -61746.628617 -53188.791522 -128833.050545 -13895.732149 -162113.533775 -42582.699273 -18712.630467 -30821.444523 -42582.699273 -24341.533161 -45278.177605 -45457.802473 -73346.927757 -53331.786775 -21018.368779 -53061.157822 -254946.350827 -42190.123814
15 : -13895.732149 -44602.705110 -45310.094091 -20887.174779 -30720.845961 -162113.533775 -42582.699273 -53188.791522 -21018.368779 -29248.952301 -52115.832458 -35312.744528 -42159.894878 -13895.732149 -42054.321316 -44602.705110 -42190.123814 -148731.101534 -60121.363268 -36324.185273
16 : -13895.732149 -13895.732149 -35713.171438 -44887.407743 -44092.541165 -162113.533775 -49941.366662 -20936.966139 -161393.637355 -43519.877222 -44407.582865 -44437.384692 -13645.193402 -30720.845961 -41329.060025 -59949.124917 -299084.904579 -256659.092919 -45310.094091 -127088.338912
17 : -13645.193402 -44287.188141 -13833.208955 -46438.671877 -30720.845961 -45310.094091 -359078.735487 -41308.900453 -38610.273608 -73987.227403 -43519.877222 -43519.877222 -86330.795338 -26093.229297 -22991.686994 -60950.551845 -44407.582865 -39852.357348 -30202.884152 -359522.244995
18 : -13645.193402 -38227.038449 -49618.780356 -13932.785299 -39852.357348 -41199.866996 -198408.519853 -22856.542975 -38610.273608 -41308.900453 -37930.722905 -359522.244995 -44510.710499 -43310.717651 -47123.540616 -31793.262151 -366258.818317 -10026.175602 -13593.905365 -172540.854491
19 : -10026.175602 -101066.117203 -22856.542975 -74691.768412 -231576.230155 -13645.193402 -47123.540616 -13645.193402 -266413.209407 -37782.090840 -13470.533343 -13632.986240 -13932.785299 -43536.426991 -36026.994329 -10026.175602 -37729.035338 -13593.905365 -38145.154474 -14032.531478
20 : -10026.175602 -13468.500816 -13593.905365 -266413.209407 -14194.135061 -62681.861398 -10026.175602 -14367.814985 -13932.785299 -13470.533343 -13645.193402 -36376.196028 -14032.531478 -47048.387265 -271443.443637 -49705.300025 -13645.193402 -24490.812955 -36227.259172 -59278.938080
21 : -10026.175602 -16115.330097 -169020.276753 -25891.316397 -18072.906333 -52319.135884 -152605.305003 -101443.391957 -39074.262134 -31378.356968 -14367.814985 -36044.890748 -13813.026241 -22503.678319 -36897.067564 -13884.435323 -14330.114708 -17293.503818 -13645.193402 -14508.206604
22 : -10026.175602 -29150.396868 -18210.708017 -16728.929325 -39119.383446 -36317.377497 -17020.160070 -14980.572190 -13645.193402 -10988.778740 -169020.276753 -17367.108694 -518668.122855 -14082.433362 -13813.026241 -35855.515616 -52258.928722 -10026.175602 -284055.257299 -22503.678319
23 : -10026.175602 -462496.923789 -10848.394763 -17485.361094 -12797.654448 -18255.803605 -29150.396868 -169020.276753 -11705.154144 -36733.833340 -52258.928722 -139631.331438 -10847.532560 -46701.983894 -105100.356368 -18653.068238 -13634.589821 -17590.763735 -39209.493249 -13415.652746
24 : -10026.175602 -10026.175602 -11415.696934 -10536.371081 -284596.761227 -17590.763735 -11324.926845 -22606.261799 -10854.037361 -139538.165645 -28812.499961 -18181.206594 -10890.778740 -18653.068238 -39815.469248 -414991.821548 -11677.035010 -6804.666657 -37655.460056 -16972.410392
25 : -6804.666657 -273273.860556 -17560.316143 -11903.661788 -43217.030164 -14873.517457 -322134.572096 -10170.572021 -10890.778740 -22543.210339 -16972.410392 -11510.927072 -12122.499104 -9485.269850 -82704.701357 -14421.114707 -10552.896453 -139538.165645 -17590.763735 -8030.568855
26 : -6804.666657 -8176.462163 -11510.927072 -10456.831617 -11603.149291 -30385.369356 -8040.068148 -273423.675168 -14421.114707 -12818.976180 -206133.935120 -14610.893522 -13693.474186 -58125.700617 -10628.515587 -17160.603692 -16972.410392 -10890.778740 -139631.331438 -25052.878329
27 : -6804.666657 -11093.672048 -31439.242312 -10914.218025 -10628.515587 -6804.666657 -273393.841893 -66742.831276 -140088.009185 -13652.918194 -71733.765392 -8040.068148 -57845.383651 -8045.483449 -15598.511975 -259037.816018 -10485.530870 -41017.337832 -15402.433251 -23103.569963
28 : -6804.666657 -14374.939934 -363521.929985 -40382.526330 -11093.672048 -10666.137831 -41887.968706 -7826.083214 -24054.271664 -69935.996566 -40337.549794 -365569.705114 -12344.833494 -23103.569963 -8535.739936 -92437.296530 -154007.531365 -66742.831276 -10646.780160 -11343.327089
29 : -6804.666657 -33725.153402 -19082.181354 -10666.137831 -40400.894753 -8372.843517 -6804.666657 -104790.431158 -40755.441412 -40337.549794 -222327.263418 -8535.739936 -32502.052233 -10401.622009 -11093.672048 -11783.221864 -7597.676260 -10552.085709 -130467.270784 -12344.833494
30 : -6804.666657 -8372.843517 -22807.047994 -48924.076079 -67160.462807 -134952.031587 -106427.432820 -10987.552428 -22922.003293 -10420.021808 -13799.313945 -12847.560524 -233514.168738 -40337.549794 -10666.137831 -70256.814757 -24108.488390 -6804.666657 -7534.417639 -17582.990632
31 : -6804.666657 -233509.879769 -9880.728969 -14193.624244 -7534.417639 -10141.942623 -10045.845656 -10676.990702 -20251.126083 -24499.134099 -10987.552428 -11008.823978 -8635.829384 -10666.137831 -8372.843517 -13053.079494 -19918.366264 -58286.161205 -158349.030877 -6804.666657
32 : -6804.666657 -7696.484381 -13541.704044 -41464.521350 -5463.868524 -179838.175868 -11698.684570 -7050.689188 -57827.847746 -9880.728969 -15633.993379 -84325.485146 -24499.134099 -10685.841615 -58935.845174 -11741.044342 -38229.728788 -8372.843517 -170284.416266 -11008.823978
33 : -5463.868524 -16548.541503 -36797.714561 -10571.712973 -57722.847746 -13541.704044 -10874.585646 -473928.742505 -217392.828601 -9880.728969 -163886.057122 -122603.671353 -37860.233142 -11008.823978 -57532.722390 -1813.401289 -8372.843517 -9880.728969 -12184.720038 -10685.841615
34 : -1813.401289 -9880.728969 -57722.847746 -8372.843517 -101736.577080 -57442.697506 -9880.728969 -5463.868524 -11008.823978 -21502.036523 -56952.281938 -17204.586471 -12554.117333 -57532.722390 -12191.055583 -12184.720038 -24050.801905 -12732.190316 -222407.526338 -10571.712973
35 : -1813.401289 -1786.209577 -1689.635026 -368625.964876 -9395.994297 -9880.728969 -12944.863976 -33590.285109 -9880.728969 -12191.055583 -67522.379208 -26931.234308 -18055.601310 -77092.894449 -5463.868524 -13166.600824 -81622.556028 -101301.457945 -17204.586471 -19237.334836
36 : -1689.635026 -17204.586471 -68256.986658 -1689.635026 -10903.790244 -333556.717302 -1786.209577 -18055.601310 -19237.334836 -29733.880021 -12055.309934 -9410.829439 -9880.728969 -10206.365346 -4869.339476 -101151.162755 -23984.216415 -1786.209577 -32758.621939 -61398.312156
37 : -1689.635026 -9410.829439 -43741.119841 -230271.458136 -19001.271635 -31344.164213 -4869.339476 -72591.365306 -10903.790244 -17780.497517 -155073.330361 -22083.731946 -36055.534243 -333032.874123 -25740.422443 -34371.224596 -17411.976669 -18055.601310 -12422.844638 -28066.695539
38 : -1689.635026 -126455.899053 -21304.070743 -333032.874123 -287623.752484 -17411.976669 -30391.177426 -26700.610276 -25740.422443 -10905.505897 -155073.330361 -28739.147787 -17411.976669 -1578.331163 -17411.976669 -16784.981198 -12422.844638 -74801.284991 -1689.635026 -19001.271635
39 : -1578.331163 -154217.332810 -25688.060240 -17625.373873 -335625.088999 -25919.596955 -17411.976669 -66845.626107 -17411.976669 -15226.211283 -125265.786032 -1566.017310 -18853.519234 -14449.562244 -3110.010432 -18927.594564 -28739.147787 -17411.976669 -28739.147787 -73571.914212
40 : -1566.017310 -73206.335523 -28739.147787 -1545.155109 -14449.562244 -27192.379228 -335693.926317 -17054.777896 -15226.211283 -17209.846783 -51026.654117 -17411.976669 -2741.997501 -17887.270293 -17411.976669 -1626.484514 -17217.907292 -26233.381074 -70494.336684 -28739.147787
41 : -1545.155109 -51411.437624 -1506.540505 -27192.379228 -15066.451241 -16969.104674 -184067.517000 -21884.577138 -51026.654117 -17054.777896 -41877.561431 -17619.218300 -70563.622925 -14449.562244 -2598.115922 -17785.709462 -70008.671648 -1626.484514 -8018.871134 -45597.733138
42 : -1506.540505 -15697.904853 -3114.420443 -102427.667007 -14449.562244 -11077.527703 -1520.144086 -64037.561692 -13614.633928 -17619.218300 -27905.301506 -1545.155109 -410391.997249 -2598.115922 -2127.762562 -80490.979394 -1606.508910 -15634.129964 -69283.344105 -51411.437624
43 : -1506.540505 -221073.207471 -2598.115922 -346922.263353 -11077.527703 -27300.221555 -3114.420443 -1533.169015 -13614.633928 -1559.550108 -1492.933814 -25285.778718 -410391.997249 -16026.343598 -2127.762562 -27652.984593 -25931.801504 -4017.253721 -11261.044677 -9077.429128
44 : -1492.933814 -16026.343598 -1506.540505 -50289.159235 -13244.826595 -2275.908045 -3820.171955 -3068.340056 -47225.168170 -11077.527703 -2598.115922 -3345.011627 -3002.183868 -4017.253721 -25188.840839 -10645.196860 -13614.633928 -11328.773613 -295259.450714 -3590.811170
45 : -1492.933814 -13614.633928 -5031.604773 -11328.773613 -10973.773882 -119740.944118 -3105.164001 -3151.809263 -2345.605384 -31564.405518 -13614.633928 -3275.119033 -2173.276152 -44869.894434 -2863.604238 -2415.359923 -116352.755572 -23190.756569 -10577.390987 -49683.812095
46 : -1492.933814 -22164.082774 -127523.609564 -3275.119033 -13614.633928 -21068.270534 -11339.110931 -125758.212230 -11300.029124 -2688.095879 -12783.016496 -14115.974236 -3495.453729 -1862.086232 -23266.128103 -20498.436696 -11328.773613 -10973.773882 -3151.809263 -2265.744872
47 : -1492.933814 -11607.744906 -124492.999777 -3818.856370 -20498.436696 -20200.128662 -3495.453729 -3723.359480 -13614.633928 -38508.327014 -1484.331749 -130069.920042 -30258.190611 -126132.989515 -1492.933814 -15674.754096 -1492.933814 -23266.128103 -2265.744872 -10973.773882
48 : -1484.331749 -3975.862591 -364642.072924 -42618.544766 -24201.271367 -11607.744906 -1477.498154 -128449.248238 -10973.773882 -11122.382650 -30088.667853 -27073.533035 -19869.218497 -1492.933814 -1458.310638 -3600.021674 -1492.933814 -1103.066418 -20464.470512 -1491.374713
49 : -1103.066418 -329492.738015 -30705.852848 -114650.567402 -9321.187172 -11122.382650 -1470.186214 -29823.491580 -69342.108345 -2090.355121 -1492.933814 -243108.023493 -372395.739982 -10151.153782 -2289.254156 -249661.178928 -7183.769410 -51469.505012 -983.269538 -1458.310638
50 : -983.269538 -1470.186214 -9321.187172 -51714.426317 -2090.355121 -983.269538 -19311.014255 -30678.071032 -7183.769410 -3963.027896 -56790.285771 -29864.058541 -53732.702182 -2289.254156 -1103.066418 -6865.611258 -2289.254156 -11247.075088 -1103.066418 -2031.451547
51 : -983.269538 -983.269538 -18708.384783 -132066.277270 -2071.863520 -3026.639116 -21643.425197 -2289.254156 -1470.186214 -5982.397830 -473151.804540 -9194.791513 -1511.859917 -4449.682937 -3438.782511 -1470.186214 -2289.254156 -301262.054809 -6228.667248 -963.678400
52 : -963.678400 -1470.186214 -983.269538 -2406.410179 -2071.863520 -2109.843166 -3202.686220 -18615.238142 -2979.136005 -1511.859917 -6404.517906 -1477.498154 -2165.924647 -56249.575634 -13817.182967 -300688.148420 -3374.135381 -473031.685406 -983.269538 -983.269538
53 : -963.678400 -2406.410179 -50361.459691 -113556.886902 -2071.863520 -108525.955379 -1470.186214 -1392.011090 -1454.876621 -1477.498154 -6404.517906 -18781.238142 -921.327219 -1498.502346 -397053.432275 -983.269538 -22237.024590 -10066.809732 -108.245089 -963.678400
54 : -108.245089 -921.327219 -25431.228903 -3667.223895 -1477.498154 -993.055665 -911.037492 -6404.517906 -2071.863520 -1466.678791 -108525.955379 -1688.124828 -5954.953031 -992.911865 -20291.223934 -1640.473321 -29603.229065 -6404.517906 -908.923160 -51239.141022
55 : -108.245089 -2291.361822 -993.055665 -5954.953031 -1791.621718 -108.069035 -114779.817248 -911.037492 -992.911865 -45857.380803 -132990.644058 -51239.141022 -12312.199938 -5954.953031 -921.327219 -330375.964658 -8323.314294 -1478.988822 -76923.305645 -61637.749753
56 : -108.069035 -33614.547429 -8478.980546 -1478.988822 -3723.899918 -897.427689 -3760.125205 -17668.070999 -78400.116308 -2500.622762 -1998.733356 -3224.706394 -1478.988822 -1791.621718 -61352.583960 -8229.151612 -911.037492 -4395.811801 -45812.271000 -149235.503167
57 : -108.069035 -3723.899918 -1478.988822 -8229.151612 -64351.188687 -191177.195218 -1998.733356 -2036.688387 -8478.980546 -3723.899918 -149235.503167 -1024.468786 -3224.706394 -7971.654723 -135215.129481 -8478.980546 -3224.706394 -275493.645769 -108.454432 -3296.736335
58 : -108.069035 -7588.059007 -205393.695603 -110.884086 -191315.341859 -149190.415139 -17383.863291 -64351.188687 -5629.971324 -3723.899918 -19302.345622 -1534.303703 -1478.988822 -4018.981190 -20071.292529 -55625.357940 -376375.686853 -7111.949911 -13364.328228 -48767.870100
59 : -108.069035 -5637.102900 -48677.218440 -26237.455870 -209.530997 -1267.171639 -288561.288813 -3723.899918 -66768.569507 -35661.244212 -424173.415472 -76052.384297 -230.607560 -6058.380187 -7484.731282 -192095.278892 -7111.949911 -18922.530309 -107.921906 -17383.863291
60 : -107.921906 -76052.384297 -48632.074421 -7588.517899 -2573.477017 -7484.731282 -108.069035 -48122.005988 -76231.858924 -48677.218440 -446682.789878 -107.921906 -209.530997 -43864.424435 -18553.708189 -1449.270025 -48677.218440 -107.660933 -35355.615258 -107.921906
61 : -107.660933 -107.660933 -7484.731282 -107.921906 -107.808993 -107.660933 -4945.810297 -162378.229862 -125504.558154 -107.921906 -6509.060955 -7256.457107 -3778.239241 -349.317614 -12926.904944 -109.542505 -46579.127073 -107.921906 -55093.907586 -107.921906
62 : -107.660933 -1070.615026 -47578.111066 -108.125957 -5507.336830 -13604.348056 -109.426482 -107.730297 -107.921906 -4354.455517 -46640.565394 -29208.031611 -107.921906 -13193.176008 -60440.831590 -330.308324 -7840.191290 -169887.547250 -3778.239241 -5424.467684
63 : -107.660933 -6051.888989 -1070.615026 -158341.693288 -297.180466 -107.753002 -250.540370 -13972.499953 -17538.835509 -13193.176008 -5850.800441 -3873.125657 -107.921906 -345.870719 -15291.776516 -247.447551 -369964.887632 -9178.258742 -3778.239241 -1389.496162
64 : -107.660933 -23009.721968 -1070.615026 -17045.389320 -3347.347354 -53325.368040 -107.529358 -11369.211944 -13852.571984 -369801.275645 -111.742583 -297.180466 -127.554242 -107.858763 -2627.189692 -109.433632 -13972.499953 -109264.452879 -37886.699463 -956.217189
65 : -107.529358 -21077.038485 -28974.130692 -147.422666 -3849.849838 -109.540323 -2672.691602 -17362.752012 -849.153997 -119936.837034 -2467.271499 -109264.452879 -13331.241819 -23966.943471 -109.521660 -107.492030 -372660.016234 -107.660933 -11369.211944 -126760.916337
66 : -107.492030 -109.521660 -1407.171032 -107.660933 -147.422666 -3442.358849 -373032.784717 -480077.567041 -109.540323 -60852.050504 -126175.644784 -22536.296180 -189.161183 -12809.902105 -13554.635128 -16675.916383 -107.660933 -110.945045 -108.147733 -107.767625
67 : -107.492030 -299290.754496 -2666.558881 -109.521660 -3687.794696 -29048.171399 -189.161183 -107.767625 -22067.673362 -60852.050504 -289309.061724 -112.159407 -3867.286122 -55416.120949 -107.767625 -700.783884 -14147.449740 -109.540323 -109.521660 -4617.224873
68 : -107.492030 -1045.980611 -22067.673362 -3847.808703 -183963.647368 -2879.964967 -107.767625 -17788.480427 -789.160825 -71190.344691 -3687.794696 -109.540323 -108.673137 -109.521660 -22067.673362 -14396.375460 -1786.866510 -107.394671 -299290.754496 -46082.243431
69 : -107.394671 -71152.154952 -5833.329449 -5287.436364 -109.540323 -196505.925886 -26458.127016 -789.160825 -109.521660 -24975.471619 -2006.653127 -1313.601435 -822.465346 -108.673137 -174312.791953 -46299.498942 -107.492030 -108.832673 -35020.597800 -108.673137
70 : -107.394671 -80518.841811 -108.832673 -107.394671 -899.146570 -12130.988066 -111.451436 -107.492030 -5701.527280 -789.160825 -109.543434 -174312.791953 -113.221343 -179125.775704 -397472.817985 -1607.556424 -107.460924 -425400.216898 -174312.791953 -207276.595271
71 : -107.394671 -540.318095 -111.451436 -107.588459 -17540.383429 -2809.687779 -107.460924 -425375.775029 -789.160825 -111.451436 -10167.528903 -168787.066774 -107.156403 -107.394671 -8312.006135 -390500.802872 -107.460924 -49322.129472 -1449.169768 -107.492030
72 : -107.156403 -74251.306798 -789.160825 -112.043995 -41642.101466 -5873.045759 -167611.876095 -540.318095 -36123.663663 -415892.777958 -38879.891844 -2809.687779 -111.451436 -425347.448733 -338961.241741 -107.492030 -789.160825 -789.160825 -24160.183117 -111.451436
73 : -107.156403 -53082.080554 -162083.439140 -6236.467499 -138.526095 -24230.902597 -540.318095 -338826.019958 -338961.241741 -6966.684517 -36123.663663 -111.451436 -154657.130544 -111.680372 -41642.101466 -4598.204569 -24184.727548 -5873.045759 -16189.779474 -415866.899707
74 : -107.156403 -4694.207680 -23250.748546 -107.156403 -540.318095 -24230.902597 -464748.851476 -123063.005565 -24241.397308 -6504.778766 -6236.467499 -11611.008354 -111.290941 -5236.732836 -338826.019958 -5873.045759 -39693.645220 -36793.292618 -56381.077617 -24230.902597
75 : -107.156403 -107.156403 -34218.297855 -11586.642553 -4628.069883 -437950.208467 -107.156403 -6465.495060 -39498.648331 -18347.113255 -4694.207680 -49957.760526 -7041.059179 -24235.056391 -20555.159148 -15054.811499 -49443.363430 -11671.601840 -30901.851394 -24134.556710
76 : -107.156403 -24235.056391 -24241.397308 -233761.479074 -4975.034737 -10131.271971 -1428.875268 -107.156403 -4689.447639 -6441.540401 -13278.960961 -6965.972043 -173.358609 -11502.301636 -30901.851394 -20555.159148 -39498.648331 -42315.610584 -7041.059179 -433129.760453
Listing C.2 Log of improved GA results on annulus
problem
1 : -519.127652 -25469.040464 -38741.839373 -34615.431274 -10606.135338 -34519.742952 -14222.408915 -23797.616974 -48351.807943 -35030.691820 -48189.131951 -11050.829568 -28834.271105 -12525.561590 -16227.428227 -37014.685508 -34378.742284 -33908.540987 -37869.677305 -25636.994494
2 : -519.127652 -32849.191527 -25636.994494 -35030.691820 -31890.327894 -35030.691820 -34378.742284 -32463.137979 -46368.124145 -458790.084751 -37869.677305 -13209.598799 -42529.310861 -24069.205730 -519.127652 -37014.685508 -28834.271105 -25469.040464 -11050.829568 -23797.616974
3 : -519.127652 -457707.405480 -32849.191527 -70537.943815 -519.127652 -3377.094628 -519.127652 -13209.598799 -24069.205730 -32310.042887 -30207.521438 -20805.418050 -32519.336519 -519.127652 -34477.470920 -13209.598799 -77772.506771 -32463.137979 -519.127652 -42529.310861
4 : -519.127652 -519.127652 -519.127652 -13209.598799 -30207.521438 -31553.356403 -3377.094628 -30207.521438 -519.127652 -3608.671949 -519.127652 -30207.521438 -77772.506771 -77772.506771 -32388.839286 -21255.113213 -32849.191527 -3377.094628 -32310.042887 -32519.336519
5 : -519.127652 -30207.521438 -519.127652 -29008.657161 -3377.094628 -519.127652 -519.127652 -38922.215537 -22888.028563 -2321.386849 -499.860965 -32310.042887 -690535.921115 -28491.892405 -47906.898792 -519.127652 -118110.746425 -150323.516198 -519.127652 -4205.825318
6 : -499.860965 -23425.320669 -519.127652 -833.215955 -11752.723667 -29008.657161 -221310.733668 -519.127652 -31012.109744 -30207.521438 -28491.892405 -675770.928039 -513439.393126 -150323.516198 -38922.215537 -690.422419 -519.127652 -21478.049753 -22888.028563 -519.127652
7 : -499.860965 -513004.792906 -22703.354948 -129820.347234 -499.860965 -507720.060609 -27921.118752 -29328.946756 -43672.549134 -519.127652 -607.338058 -833.215955 -519.127652 -499.860965 -1562.948215 -782.112309 -575.019921 -690.422419 -29008.657161 -690.422419
8 : -499.860965 -833.215955 -29063.715490 -499.860965 -129820.347234 -499.860965 -833.215955 -499.860965 -499.860965 -46286.559919 -499.860965 -499.860965 -575.019921 -575.019921 -553.259603 -690.422419 -28007.200705 -690.422419 -622787.125635 -294699.804114
9 : -499.860965 -622787.125635 -47473.694571 -499.860965 -918334.989162 -499.860965 -499.860965 -833.215955 -819.949268 -29063.715490 -499.860965 -352421.338954 -377226.365895 -575.019921 -519.127652 -833.215955 -575.019921 -292334.772720 -55481.859007 -499.860965
10 : -499.860965 -499.860965 -499.860965 -622787.125635 -917666.952513 -499.860965 -499.860965 -294042.862499 -4271.276497 -166.119436 -25856.606359 -322.240913 -575.019921 -575.019921 -499.860965 -1686.197916 -293545.404655 -2951.253504 -833.215955 -499.860965
11 : -166.119436 -499.860965 -575.019921 -293545.404655 -522.807139 -499.860965 -917666.952513 -499.860965 -322.240913 -1824.824110 -208910.689887 -88900.941196 -2951.253504 -499.860965 -575.019921 -575.019921 -166.119436 -499.860965 -499.860965 -499.860965
12 : -166.119436 -462.571132 -575.019921 -2951.253504 -166.119436 -499.860965 -6576.301895 -2951.253504 -575.019921 -322.240913 -1824.824110 -322.240913 -166.119436 -499.860965 -166.119436 -499.860965 -499.860965 -575.019921 -88900.941196 -575.019921
13 : -166.119436 -322.240913 -144.856216 -462.571132 -84354.633588 -499.860965 -499.860965 -166.119436 -322.240913 -322.240913 -519.127652 -426.531601 -575.019921 -376936.040593 -3009.605403 -166.119436 -166.119436 -1987.107870 -575.019921 -462.571132
14 : -144.856216 -7336.370394 -499.860965 -1282.838414 -2264.696901 -540.497388 -166.119436 -166.119436 -118506.359981 -65907.717729 -575.019921 -166.119436 -462.571132 -166.119436 -426.531601 -322.240913 -462.571132 -166.119436 -166.119436 -575.019921
15 : -144.856216 -719462.507750 -19586.951704 -166.119436 -1282.838414 -540.497388 -411.467486 -16757.410455 -322.240913 -358.863844 -166.119436 -166.119436 -144.856216 -575.019921 -78147.232695 -872755.445886 -2546.770061 -166.119436 -575.019921 -144.856216
16 : -144.856216 -166.119436 -540.497388 -272.608585 -78147.232695 -575.019921 -83945.649528 -575.019921 -274077.270312 -144.856216 -261.152449 -16757.410455 -166.119436 -575.019921 -166.119436 -166.119436 -1792.212062 -575.019921 -166.119436 -166.119436
17 : -144.856216 -166.119436 -120022.935623 -83945.649528 -144.856216 -166.119436 -32094.060563 -2735.053364 -144.856216 -144.856216 -166.119436 -166.119436 -540.497388 -575.019921 -74003.267575 -144.856216 -575.019921 -6100.799012 -540.497388 -166.119436
18 : -144.856216 -144.856216 -5084.120870 -32094.060563 -144.856216 -69845.590697 -978.704891 -540.497388 -144.856216 -352466.442601 -144.856216 -540.497388 -166.119436 -49838.964576 -144.856216 -144.856216 -83832.570489 -144.856216 -3141.218970 -144.856216
19 : -144.856216 -144.856216 -978.704891 -144.856216 -144.856216 -144.856216 -1202.971157 -144.856216 -166.119436 -49838.964576 -237.070497 -144.856216 -23656.820994 -771.055136 -144.856216 -5084.120870 -3141.218970 -144.856216 -893.797669 -83142.092798
20 : -144.856216 -144.856216 -23656.820994 -6801.064374 -49778.617372 -49838.964576 -54385.012971 -5084.120870 -144.856216 -83142.092798 -34381.703021 -315445.266566 -166.119436 -131186.214533 -144.856216 -893.797669 -144.856216 -144.856216 -1791.656297 -893.797669
21 : -144.856216 -144.856216 -23656.820994 -144.856216 -241.178226 -23656.820994 -134562.612375 -144.856216 -893.797669 -893.797669 -3353.751687 -144.856216 -144.856216 -1584.055141 -70525.763352 -997.757649 -261.805258 -23656.820994 -144.856216 -23529.554264
22 : -144.856216 -3353.751687 -1584.055141 -4976.843074 -144.856216 -976.600741 -144.856216 -19119.346941 -9868.417255 -144.856216 -893.797669 -893.797669 -893.797669 -424126.965680 -241.178226 -117.713648 -144.856216 -134562.612375 -23656.820994 -144.856216
23 : -117.713648 -144.856216 -3353.751687 -241.178226 -424126.965680 -19119.346941 -276.267547 -144.856216 -472190.056950 -398.584035 -1584.055141 -893.797669 -20673.910734 -893.797669 -93476.794570 -144.856216 -893.797669 -893.797669 -52016.374345 -640.555135
24 : -117.713648 -472190.056950 -3353.751687 -424126.965680 -52016.374345 -1022.326375 -640.555135 -42925.032605 -93476.794570 -239193.372559 -1584.055141 -514.629885 -37366.429777 -398.584035 -398.584035 -52016.374345 -241.178226 -241.178226 -3136.880721 -3353.751687
25 : -117.713648 -297915.141970 -52016.374345 -3136.880721 -52016.374345 -241.178226 -2262.657789 -514.629885 -14239.247412 -241.178226 -117.713648 -239193.372559 -280117.681641 -52016.374345 -6888.382490 -6502.722819 -37366.429777 -1021.269857 -7439.016237 -3353.751687
26 : -117.713648 -52016.374345 -1021.269857 -6475.633607 -642158.928958 -6502.722819 -241.178226 -2262.657789 -2262.657789 -3353.751687 -5923.859801 -117.713648 -117.713648 -3136.880721 -241.178226 -6888.382490 -52016.374345 -2262.657789 -2262.657789 -239193.372559
27 : -117.713648 -117.713648 -2262.657789 -2089.577272 -6502.722819 -117.713648 -672100.076900 -117.713648 -6475.633607 -117.713648 -275473.012427 -249832.188142 -2262.657789 -3324.544460 -117.713648 -132138.881727 -151128.760206 -241.178226 -6708.454799 -52016.374345
28 : -117.713648 -430667.183194 -117.713648 -132138.881727 -151128.760206 -117.713648 -117.713648 -228937.130575 -117.713648 -117.713648 -117.713648 -151128.760206 -117.713648 -5053.740891 -2089.577272 -4142.743382 -6475.633607 -241.178226 -18532.570933 -1154.958866
29 : -117.713648 -117.713648 -4142.743382 -117.713648 -117.713648 -407187.039954 -3813.961519 -117.713648 -36032.703638 -698907.842794 -18532.570933 -117.713648 -1154.958866 -135770.378920 -5053.740891 -1339.223544 -117.713648 -55554.961562 -117.713648 -151128.760206
30 : -117.713648 -117.713648 -117.713648 -9745.999416 -117.713648 -117.713648 -117.713648 -246.966016 -140227.974780 -117.713648 -25766.715332 -4187.573875 -117.713648 -117.713648 -258.974213 -151128.760206 -339.960729 -87.106501 -31205.633783 -117.713648
31 : -87.106501 -20893.838180 -246.966016 -87.106501 -87.106501 -339.960729 -117.713648 -117.713648 -87.106501 -87.106501 -4187.573875 -258.974213 -32685.107141 -87.106501 -87.106501 -119.211599 -117.713648 -246.966016 -265.447798 -117.713648
32 : -87.106501 -6997.449001 -4187.573875 -117.713648 -87.106501 -87.106501 -87.106501 -4187.573875 -117.713648 -87.106501 -246.966016 -246.966016 -1819.235827 -257781.589831 -87.106501 -87.106501 -974.044579 -87.106501 -87.106501 -3061.560523
33 : -87.106501 -87.106501 -87.106501 -15974.706703 -87.106501 -30273.738988 -1819.235827 -87.106501 -246.966016 -87.106501 -5915.540450 -144983.402105 -1819.235827 -87.106501 -87.106501 -6997.449001 -87.106501 -87.106501 -117.713648 -246.966016
34 : -87.106501 -32102.300548 -30273.738988 -327.627211 -87.106501 -23839.314473 -1823.502515 -87.387541 -87.106501 -15974.706703 -87.106501 -30273.738988 -15974.706703 -80185.021259 -286.265493 -17833.822602 -16182.550343 -87.106501 -246.966016 -139762.272790
35 : -87.106501 -32505.037412 -327.627211 -16578.372750 -15974.706703 -87.106501 -17833.822602 -556.571154 -32102.300548 -87.106501 -70825.025949 -17893.569686 -314.897819 -286.265493 -83877.627854 -126608.429508 -1738.149389 -32838.509313 -87.106501 -87.106501
36 : -87.106501 -9766.343108 -556.571154 -681.049234 -25089.439646 -87.106501 -1164.160679 -15974.706703 -16578.372750 -87.106501 -83877.627854 -30490.802320 -87.106501 -17833.822602 -33691.052553 -70825.025949 -16578.372750 -755.401983 -32505.037412 -286.265493
37 : -87.106501 -15974.706703 -15974.706703 -556.571154 -25089.439646 -87.106501 -21926.815169 -556.571154 -556.571154 -681.049234 -681.049234 -87.106501 -286.265493 -16501.289907 -770.817318 -25089.439646 -32505.037412 -87.106501 -1258.070044 -9766.343108
38 : -87.106501 -770.817318 -25089.439646 -25522.758782 -1294.371569 -87.106501 -556.571154 -15974.706703 -17885.687652 -14100.238204 -87.106501 -770.817318 -139071.485994 -32173.257129 -15974.706703 -770.817318 -460697.030756 -25089.439646 -1258.070044 -556.571154
39 : -87.106501 -556.571154 -87.106501 -15974.706703 -25089.439646 -1258.070044 -556.571154 -80712.656496 -14100.238204 -15974.706703 -87.106501 -8450.673917 -14100.238204 -1258.070044 -627649.377640 -770.817318 -556.571154 -87.106501 -14443.320065 -83706.941463
40 : -87.106501 -87.106501 -87.106501 -556.571154 -1258.070044 -2401.492397 -23839.314473 -1258.070044 -770.817318 -87.106501 -87.106501 -290.547949 -14100.238204 -87.106501 -8514.030722 -15974.706703 -770.817318 -556.571154 -8450.673917 -1258.070044
41 : -87.106501 -87.106501 -2401.492397 -10304.852826 -1272.770075 -8008.693758 -6666.691941 -215.535657 -8119.617369 -1504.154883 -126261.279495 -1258.070044 -8450.673917 -87.106501 -8009.273231 -15974.706703 -14100.238204 -15725.499420 -115694.124065 -36788.755816
42 : -87.106501 -87.106501 -16955.255083 -8119.617369 -10304.852826 -226.899221 -66051.128836 -8009.273231 -70841.193097 -215.535657 -8008.693758 -135677.505610 -1504.154883 -2401.492397 -71107.124751 -1504.154883 -8009.273231 -1504.154883 -1258.070044 -8119.617369
43 : -87.106501 -71107.124751 -2401.492397 -70841.193097 -16955.255083 -107949.592971 -167100.791141 -215.535657 -10304.852826 -87.106501 -1264.148498 -87.106501 -1504.154883 -135677.505610 -87.106501 -2401.492397 -77756.452046 -2401.492397 -71107.124751 -6346.364601
44 : -87.106501 -42503.269759 -137283.048853 -87.106501 -68916.483181 -473500.592407 -87.106501 -3840.991276 -135828.509125 -1244.491590 -2401.492397 -167100.791141 -1303.454120 -71031.937117 -4489.251510 -71107.124751 -344.130690 -138332.442831 -87.106501 -16697.097899
45 : -87.106501 -86.908013 -133999.671909 -473500.592407 -68586.359660 -69711.378920 -39561.495012 -568.132963 -1718.564111 -87.106501 -2586.327585 -426.855810 -1244.491590 -2467.285754 -44352.368631 -87.106501 -1303.454120 -40061.412007 -19128.245381 -3053.867666
46 : -86.908013 -568.132963 -1303.454120 -4373.304222 -4368.644363 -2387.282251 -39561.495012 -29997.828121 -44793.919214 -83075.899436 -45080.312139 -1244.491590 -2208.091860 -68374.937652 -17325.060024 -2371.982739 -3053.867666 -426.855810 -462.903544 -40332.019154
47 : -86.908013 -3053.867666 -45080.312139 -86.908013 -29997.828121 -1303.454120 -2350.514067 -40332.019154 -2371.982739 -2343.075519 -568.132963 -2387.282251 -32575.600974 -1303.454120 -3053.867666 -461.492235 -86.908013 -2208.091860 -86.178581 -3053.867666
48 : -86.178581 -2373.385884 -3053.867666 -2371.982739 -3053.867666 -10472.100248 -1303.454120 -1303.454120 -1303.454120 -3053.867666 -17005.929494 -3053.867666 -3053.867666 -2208.091860 -1303.454120 -161619.571557 -15118.853310 -6345.040393 -21564.755927 -86.178581
49 : -86.178581 -3053.867666 -6345.040393 -3053.867666 -17005.929494 -1303.454120 -1303.454120 -161619.571557 -1303.454120 -3937.084810 -2373.385884 -1303.454120 -3053.867666 -1350.416650 -21564.755927 -2373.385884 -56005.851817 -3147.458425 -3053.867666 -3053.867666
50 : -86.178581 -17005.929494 -1403.113090 -1303.454120 -31476.485202 -161785.178705 -161619.571557 -3053.867666 -1266.352086 -56014.127365 -172207.987236 -2306.778738 -1303.454120 -3053.867666 -1196.747435 -1303.454120 -219694.060076 -3053.867666 -55302.030256 -3053.867666
51 : -86.178581 -36005.002877 -17139.345136 -4141.215285 -85046.375244 -2306.778738 -168767.148641 -169322.323372 -2449.044833 -14898.671223 -639964.911290 -1196.747435 -3053.867666 -1196.747435 -1606.713048 -1196.747435 -25198.858057 -219694.060076 -1266.352086 -31654.320643
52 : -86.178581 -6229.678220 -2449.044833 -1606.713048 -69984.900144 -24923.085983 -1266.352086 -1266.352086 -2449.044833 -2207.130250 -14898.671223 -219604.270243 -4141.215285 -2306.778738 -645988.610211 -1606.713048 -132897.630584 -1196.747435 -38379.470450 -639201.861479
53 : -86.178581 -1606.713048 -1161.463312 -86.178581 -2449.044833 -9146.876217 -86.178581 -2449.044833 -1435.504150 -7043.554290 -2306.778738 -1266.352086 -810.644751 -1651.845374 -132897.630584 -86.178581 -299.978149 -639201.861479 -4141.215285 -4141.215285
54 : -86.178581 -2449.044833 -86.178581 -86.178581 -810.644751 -810.644751 -1435.504150 -1161.463312 -35859.747215 -1161.463312 -2241.586380 -136317.106810 -86.178581 -299.978149 -86.178581 -1435.504150 -86.178581 -479321.759661 -86.879130 -86.178581
55 : -86.178581 -86.178581 -1474.632379 -86.178581 -86.178581 -479321.759661 -86.178581 -121073.974790 -27504.293499 -427553.216410 -86.178581 -136317.106810 -1305.580799 -2449.044833 -86.178581 -86.879130 -86.178581 -810.644751 -1330.210818 -2281.001795
56 : -86.178581 -2850.294872 -86.178581 -919.978659 -51745.180316 -427764.654801 -479321.759661 -86.178581 -1079.483609 -87.505324 -86.178581 -12831.374228 -86.178581 -1610.877505 -90760.760500 -86.178581 -1835.385196 -2281.001795 -1297.136461 -425095.930977
57 : -86.178581 -85.990946 -1835.385196 -12111.888262 -86.178581 -1835.385196 -90760.760500 -86.178581 -86.178581 -1835.385196 -86.178581 -924.574890 -1610.877505 -87.505324 -86.178581 -51745.180316 -1610.877505 -7697.052981 -86.178581 -1079.483609
58 : -85.990946 -86.178581 -86.178581 -87.505324 -1835.385196 -1289.430830 -924.574890 -86.178581 -1835.385196 -7844.588758 -86.178581 -86.178581 -86.178581 -1079.483609 -1835.385196 -12111.888262 -90760.760500 -86.178581 -1610.877505 -173991.094605
59 : -85.990946 -1610.877505 -86.178581 -86.178581 -526604.644431 -87.505324 -86.178581 -924.574890 -1289.430830 -1835.385196 -679449.462178 -1835.385196 -238222.967556 -86.178581 -86.178581 -86.178581 -86.178581 -22574.812175 -86.178581 -86.178581
60 : -85.990946 -86.178581 -86.178581 -22574.812175 -238222.967556 -86.178581 -86.178581 -85.990946 -86.178581 -6522.037036 -86.435038 -1835.385196 -85.990946 -86.178581 -86.178581 -86.178581 -526604.644431 -51464.576616 -87.505324 -1289.430830
61 : -85.990946 -85.990946 -42219.226978 -86.178581 -9323.739618 -86.178581 -86.178581 -86.178581 -22886.850832 -86.178581 -86.178581 -291969.301505 -86.178581 -86.178581 -34259.784032 -86.178581 -85.990946 -86.248841 -86.178581 -85.990946
62 : -85.990946 -86.178581 -85.990946 -85.990946 -86.178581 -9779.375742 -85.990946 -86.525783 -86.178581 -86.178581 -145930.553750 -3647.044080 -3802.655844 -86.178581 -86.178581 -86.178581 -34259.784032 -86.178581 -40374.294985 -897.347816
63 : -85.990946 -85.990946 -86.178581 -86.178581 -13665.229392 -85.990946 -145930.553750 -86.178581 -86.178581 -897.347816 -383066.751974 -145930.553750 -34259.784032 -86.178581 -86.178581 -85.990946 -256822.169633 -86.495880 -88.757100 -86.178581
64 : -85.990946 -88.757100 -86.495880 -88.757100 -86.178581 -85.854523 -88.521738 -86.178581 -676932.104234 -145870.366116 -86.178581 -32486.903385 -145839.253629 -8878.964346 -86.178581 -72204.192636 -13183.182721 -145930.553750 -86.178581 -85.990946
65 : -85.854523 -108.444734 -101378.440734 -1069.510085 -27421.689299 -12931.907840 -86.036624 -85.990946 -85.990946 -86.495880 -2983.627046 -86.343683 -86.139660 -88.385315 -85.990946 -86.178581 -86.178581 -86.178581 -8878.964346 -85.990946
66 : -85.854523 -86.613254 -86.495880 -86.495880 -8878.964346 -88.438576 -50440.199991 -85.990946 -85.854523 -5821.272156 -85.990946 -85.839560 -85.990946 -86.343683 -2983.627046 -86.178581 -28187.523097 -86.036624 -85.854523 -86.139660
67 : -85.839560 -124838.185205 -85.990946 -8878.964346 -85.990946 -2976.215742 -88.438576 -86.265840 -86.495880 -85.990946 -28187.523097 -85.735918 -866348.166002 -86.613254 -85.839560 -85.990946 -86.036624 -86.495880 -85.839560 -85.990946
68 : -85.735918 -16921.861279 -214865.396562 -86.319916 -86.495880 -86.090696 -957.299218 -85.990946 -86.613254 -85.839560 -85.839560 -665518.263626 -482522.022875 -85.990946 -124838.185205 -85.735918 -28187.523097 -646762.387261 -86.233064 -88.438576
69 : -85.735918 -6582.616398 -86.613254 -28187.523097 -85.735918 -85.846329 -12148.712344 -159760.168466 -85.735918 -957.299218 -86.613254 -16921.861279 -214865.396562 -85.839560 -290097.228083 -85.990946 -86.090696 -85.839560 -957.299218 -85.735918
70 : -85.735918 -85.735918 -85.735918 -85.839560 -85.839560 -84053.164574 -85.735918 -86.257234 -1415.213615 -85.839560 -86.613254 -957.299218 -85.990946 -2249.538489 -86.090696 -10335.975392 -85.735918 -85.990946 -85.846329 -86.098085
71 : -85.735918 -86.257234 -79175.692546 -85.735918 -2126.313417 -85.735918 -1415.213615 -86.257234 -85.735918 -85.735918 -104282.628360 -84053.164574 -85.839560 -85.735918 -86.261729 -1530.246274 -85.735918 -3063.604977 -1415.213615 -85.735918
72 : -85.735918 -86.257234 -85.735918 -85.839560 -85.735918 -3664.659357 -85.735918 -21579.991109 -85.735918 -3063.604977 -85.735918 -1415.213615 -86.073085 -85.735918 -88.480976 -85.735918 -86.257234 -85.735918 -85.735918 -85.839560
73 : -85.735918 -85.735918 -85.735918 -85.735918 -85.735918 -85.735918 -132383.920119 -86.257234 -86.257234 -85.735918 -85.735918 -21176.939785 -85.735918 -86.659539 -85.735918 -13885.797340 -21579.991109 -1346.046464 -86.257234 -85.735918
74 : -85.735918 -726352.748902 -85.735918 -243339.236553 -85.735918 -85.735918 -933.934839 -85.735918 -483316.429601 -85.735918 -4689.882719 -86.257234 -85.597447 -10295.941799 -86.659539 -86.257234 -85.735918 -5744.478481 -3953.413251 -85.735918
75 : -85.597447 -89.117412 -3953.413251 -85.597447 -86.257234 -248615.357073 -85.518991 -85.735918 -85.597447 -85.735918 -85.735918 -85.735918 -27971.268069 -132817.453130 -763224.711487 -85.735918 -39022.899196 -3953.413251 -85.735918 -86.257234
76 : -85.518991 -414051.857894 -85.597447 -27971.268069 -85.735918 -85.735918 -52400.575287 -91.457116 -3953.413251 -1805.387496 -850674.732214 -86.257234 -132817.453130 -85.735918 -85.735918 -85.597447 -85.597447 -85.735918 -1703.784301 -3953.413251
77 : -85.518991 -85.735918 -1805.387496 -85.735918 -1703.784301 -85.597447 -85.518991 -85.597447 -85.597447 -85.518991 -87.743767 -588754.228071 -1703.784301 -414051.857894 -53161.274208 -85.597447 -85.735918 -1703.784301 -85.735918 -1805.387496
78 : -85.518991 -1703.784301 -1703.784301 -85.597447 -85.518991 -111993.958006 -85.518991 -85.735918 -1703.784301 -85.735918 -85.735918 -85.518991 -1805.387496 -1703.784301 -85.597447 -87.537084 -85.597447 -85.735918 -104118.978671 -85.597447
79 : -85.518991 -63802.729231 -85.518991 -85.518991 -85.735918 -104118.978671 -85.518991 -85.518991 -526552.888637 -1796.964606 -9284.583921 -87.537084 -85.597447 -85.518991 -36607.131955 -530810.431826 -85.735918 -85.735918 -85.518991 -85.597447
80 : -85.518991 -63802.729231 -151287.761637 -85.518991 -85.518991 -85.518991 -85.864147 -85.518991 -85.735918 -46014.082170 -85.518991 -85.597447 -85.518991 -85.518991 -85.735918 -85.518991 -85.518991 -104118.978671 -81084.851840 -230675.436529
81 : -85.518991 -86.113849 -85.518991 -191164.966987 -85.518991 -5529.940647 -2125.973906 -64939.583679 -90.269258 -21046.222857 -85.518991 -85.518991 -86.352495 -85.518991 -85.518991 -86.746795 -85.518991 -86.882411 -63802.729231 -85.597447
82 : -85.518991 -20480.000131 -86.257651 -105095.895789 -2125.973906 -86.352495 -86.746795 -86.352495 -63802.729231 -5364.497468 -85.518991 -86.746795 -515018.099496 -86.882411 -86.040710 -86.746795 -86.113849 -85.518991 -85.190226 -36563.863015
83 : -85.190226 -86.762372 -85.518991 -8712.644405 -85.518991 -85.735918 -85.190226 -72639.710098 -37044.241084 -86.257651 -2165.177048 -2125.973906 -86.352495 -86.523725 -515018.099496 -143751.777286 -86.746795 -36563.863015 -2135.534793 -86.352495
84 : -85.190226 -86.257651 -86.352495 -2135.534793 -86.352495 -85.518991 -624.623440 -86.352495 -85.518991 -408412.720126 -85.190226 -59917.539545 -86.352495 -85.518991 -37044.241084 -86.762372 -86.482772 -2165.177048 -85.324600 -4867.958656
85 : -85.190226 -143676.906957 -85.190226 -85.518991 -624.623440 -206.296575 -144360.527605 -85.324600 -85.324600 -85.190226 -86.482772 -86.352495 -86.352495 -86.352495 -85.518991 -86.352495 -71903.947832 -59917.539545 -86.257651 -37044.241084
86 : -85.190226 -514548.618374 -71664.229489 -139568.850787 -85.190226 -85.190226 -765425.648982 -32363.678728 -85.324600 -85.324600 -86.482772 -86.257651 -811362.407527 -420293.943060 -85.518991 -85.518991 -85.190226 -86.257651 -86.352495 -1445.895500
87 : -85.190226 -1445.895500 -765425.648982 -86.352495 -85.518991 -85.190226 -87.009626 -514863.396362 -85.190226 -5364.982957 -85.518991 -391343.318597 -42532.485217 -86.661585 -650604.112792 -139568.850787 -82203.906885 -514464.994240 -86.257651 -85.190226
88 : -85.190226 -85.190226 -401305.307612 -139568.850787 -5364.982957 -85.518991 -85.518991 -391343.318597 -253267.822958 -86.352495 -77183.993522 -85.518991 -85.190226 -1712.575212 -86.661585 -514464.994240 -37143.313618 -85.518991 -6149.893994 -87.009626
89 : -85.190226 -85.074289 -86.661585 -89.137285 -85.190226 -10803.608487 -85.518991 -86.352495 -85.190226 -79120.756717 -85.518991 -85.518991 -130358.374421 -77183.993522 -254573.997513 -5364.982957 -21145.134158 -85.821126 -85.190226 -21179.193495
90 : -85.074289 -85.190226 -20678.260114 -10803.608487 -166026.119588 -85.518991 -21110.433620 -717408.085111 -85.723625 -59782.632745 -85.074289 -850623.627502 -79120.756717 -233.226722 -85.518991 -85.074289 -404373.530233 -85.518991 -85.074289 -85.190226
91 : -85.074289 -10803.608487 -12414.568783 -215825.382026 -85.518991 -16980.985889 -620995.173564 -2934.275568 -57129.007225 -1227.738607 -85.074289 -109936.259221 -3377.267342 -85.074289 -85.518991 -839460.615737 -20678.260114 -85.074289 -85.074289 -233.226722
92 : -85.074289 -85.518991 -25232.207119 -290.557536 -5037.077006 -85.518991 -85.074289 -2505.811738 -85.518991 -3946.591388 -516032.899856 -109936.259221 -85.074289 -2934.275568 -17878.909229 -233435.210800 -5887.485918 -85.074289 -85.518991 -85.074289
93 : -85.074289 -85.074289 -85.074289 -76672.683798 -2934.275568 -15375.856371 -85.074289 -17878.909229 -5887.485918 -865.357389 -85.074289 -89.458685 -85.256388 -86.001193 -21567.274790 -25232.207119 -85.849805 -85.074289 -87.805617 -85.464715
94 : -85.074289 -17411.184722 -58193.146079 -85.074289 -2934.275568 -85.849805 -76597.601247 -84.417366 -86.405753 -85.074289 -2934.275568 -85.571849 -85.074289 -3585.274695 -85.074289 -774.273209 -187469.758114 -8700.545312 -84.967155 -10292.388195
95 : -84.417366 -86.405753 -123381.815158 -45054.270402 -76597.601247 -26826.042811 -85.074289 -85.849805 -58193.146079 -85.074289 -85.190226 -3559.546092 -58193.146079 -9659.121719 -84.967155 -85.074289 -85.074289 -92.122036 -2943.409942 -84.417366
96 : -84.417366 -84.845685 -5861.138250 -3559.546092 -84.285040 -85.074289 -85.074289 -181810.341870 -26826.042811 -836.007341 -85.190226 -85.074289 -2943.409942 -74552.748773 -31247.168178 -78096.858275 -86.405753 -136129.068059 -85.190226 -3585.274695
97 : -84.285040 -111696.144281 -84.845685 -84.479429 -84.845685 -84.285040 -85.074289 -84.845685 -1670.306822 -36426.565220 -836.007341 -84.417366 -4599.318285 -19353.518812 -85.074289 -122428.706536 -85.074289 -136129.068059 -11137.291899 -904.074262
98 : -84.285040 -702099.258980 -85.074289 -134462.904557 -9107.950758 -36426.565220 -84.417366 -84.845685 -8277.944651 -4599.318285 -85.080434 -85.074289 -84.479429 -12640.356845 -85.074289 -4599.318285 -122428.706536 -84.285040 -904.074262 -724.483739
99 : -84.285040 -904.074262 -724.483739 -904.074262 -84.479429 -914017.409173 -85.080434 -454284.984534 -122428.706536 -85.080434 -2404.568737 -8277.944651 -12720.521942 -6683.700214 -85.080434 -621106.907498 -85.080434 -84.845685 -85.074289 -85.074289
100 : -84.285040 -9021.059126 -12720.521942 -7447.741017 -4566.124731 -904.074262 -88.468356 -84.851218 -85.074289 -84.479429 -216502.521389 -84.285040 -724.483739 -5474.943211 -85.080434 -62572.806458 -84.285040 -85.074289 -103282.461599 -724.483739
101 : -84.285040 -13020.871402 -85.080434 -167487.351468 -6549.353923 -84.285040 -84.285040 -724.483739 -9021.059126 -88.468356 -86.498333 -12720.521942 -84.285040 -78978.654137 -84.285040 -84.285040 -84.851218 -88.468356 -84.479429 -10019.074658
102 : -84.285040 -84.285040 -6549.353923 -6549.353923 -10617.851836 -604.844463 -84.285040 -84.285038 -84.285040 -84.285040 -85.074289 -84.285040 -84.291186 -84.285040 -84.479429 -86.085997 -84.851218 -116234.520584 -12720.521942 -84.285040
103 : -84.285038 -242347.794272 -6706.570799 -33017.905574 -84.285038 -84.285040 -84.285040 -84.285040 -3027.483967 -84.285040 -6549.353923 -84.851218 -84.285038 -85447.404411 -84.285040 -86417.595534 -84.285040 -84.285040 -84.285038 -84.285040
104 : -84.285038 -84.285040 -84.285038 -84.285040 -84.285040 -84.285040 -84.285038 -84.285038 -84.285038 -78276.063504 -84.285040 -84.285038 -84.285038 -84.285040 -7075.639882 -6863.424161 -84.285038 -84.285040 -5991.370391 -84.285040
105 : -84.285038 -84.285040 -84.285040 -35195.762498 -84.285038 -84.285038 -84.285038 -84.285038 -84.285038 -84.285040 -143132.021305 -84.285040 -78276.063504 -84.285038 -84.285038 -634583.409480 -4542.793194 -31971.568660 -84.285040 -84.285038
106 : -84.285038 -84.285040 -85.173229 -21843.854112 -7818.488014 -49372.407078 -84.285038 -4844.601927 -84.285040 -2953.230342 -84.285038 -634583.409480 -410154.043659 -5428.470370 -84.361445 -11281.693010 -129.775020 -449589.632967 -84.285038 -84.285038
107 : -84.285038 -40299.793597 -449589.632967 -86.508991 -84.285038 -49372.407078 -12602.312044 -53931.220762 -84.285040 -84.361445 -6064.869673 -84.285038 -129.775020 -84.285038 -129.775020 -85.173229 -7265.804710 -4849.692282 -132078.353773 -84.285038
108 : -84.285038 -144187.363544 -84.285038 -4849.692282 -84.285038 -84.285038 -84.285040 -571013.372580 -84.634291 -49372.407078 -36540.036629 -84.212729 -12602.312044 -53931.220762 -84.285038 -103427.342782 -175479.383604 -1583.958323 -84.285038 -26995.166670
109 : -84.212729 -53825.951190 -103427.342782 -584.326010 -84.285038 -146695.302389 -84.285038 -565.146806 -273201.023637 -49191.274751 -84.285038 -84.353251 -84.285038 -585.470883 -1583.958323 -84.285038 -12602.312044 -84.285038 -1683.568100 -84.212729
110 : -84.212729 -84.285038 -84.285038 -103427.342782 -565.146806 -84.285038 -84.285038 -584.326010 -12142.433878 -84.353251 -1473.101506 -84.285038 -72361.964644 -84.285038 -84.285038 -84.285038 -61919.136096 -146695.302389 -84.285038 -1583.958323
111 : -84.212729 -84.285038 -1473.101506 -84.285038 -69989.389327 -7190.451765 -84.285038 -84.285038 -84.285038 -102143.297148 -146695.302389 -84.212729 -61919.136096 -84.212729 -6535.908581 -84.285038 -84.641045 -1643.933128 -84.212729 -84.285038
112 : -84.212729 -84.285038 -84.285038 -6524.044975 -3863.594121 -84.212729 -84.212729 -102143.297148 -76759.740408 -7462.658211 -84.285038 -84.285038 -85.178541 -69589.453030 -84.148615 -112956.170298 -84.212729 -298939.318584 -84.285038 -102143.297148
113 : -84.148615 -82.387600 -84.285038 -449613.622077 -5378.126305 -69589.453030 -3863.594121 -85.178541 -24544.819313 -63586.298661 -84.212729 -84.212729 -298939.318584 -84.285038 -84.285038 -84.212729 -84.212729 -84.212729 -62279.063788 -102143.297148
114 : -82.387600 -57583.540655 -62279.063788 -224.497868 -192900.448192 -82.387600 -449613.622077 -5378.126305 -449613.622077 -84.212729 -84.212729 -5378.126305 -84.400976 -69589.453030 -62279.063788 -86.312942 -84.212729 -84.212729 -5378.126305 -63586.298661
Bibliography.
[Bentley 96] P.
J. Bentley. Generic Evolutionary Design
of Solid Objects using a Genetic
Algorithm. Ph.D. Thesis, University of Huddersfield,
Huddersfield, UK, 1996.
[Cartwright & Harris 93] H. M. Cartwright and S. P. Harris. The Application of the Genetic
Algorithm to Two-Dimensional Strings:
The Source Apportionment
Problem. In Stephanie Forrest, editor, Proceedings
of the Fifth International Conference on
Genetic Algorithms. San Mateo:
Morgan Kaufmann, 1993.
[Chapman et
al. 94] C. D. Chapman, K.
Saitou and M. J. Jakiela. Genetic Algorithms as an Approach to Configuration
and Topology Design. In Transactions
of the ASME, Journal of Mechanical
Design Vol 116, pages 1005-1012.
1994.
[Davis 91] L.
Davis, editor. Handbook of Genetic Algorithms.
New York: Van Nostrand Reinhold, 1991.
[Gere & Timoshenko 84] J. M. Gere and S. P. Timoshenko.
Mechanics of Materials, 2nd Edition,
Brooks/Cole Engineering Division, 1984.
[Goldberg 89] D.
E. Goldberg. Genetic Algorithms in Search, Optimization,
and Machine Learning. New York: Addison-Wesley, 1989.
[Holland 75] J.
H. Holland. Adaptation in Natural and Artificial Systems. Ann Arbor:
The University of Michegan Press, 1975.
[Husbands et
al. 96] P. Husbands, G.
Jeremy, M. Ilhagga and R. Ives. Two Applications of Genetic Algorithms to
Component Design. In Terry C. Fogarty, editor, Selected Papers: AISB Workshop on Evolutionary Computing, Lecture Notes
in Computer Science No 1143, pages 50-61. Springer
Verlag, 1996.
[Michalewicz 92] Z.
Michalewicz. Genetic Algorithms + Data Structures = Evolution
Programs. Springer Verlag, 1992.
[Schoenauer 95] M.
Schoenauer. Shape Representations for
Evolutionary Optimization and
Identification in Structural Mechanics.
In G. Winter, J. Periaux,
M. Galan and P Cuesta, editors, Genetic Algorithms in Engineering and
Computer Science, pages 443-464.
Wiley. 1995.
[Smith 95a] R. Smith. A
Parameterised Rolls Royce Annulus.
Internal Report No. 21,
Manufacturing and Planning Group, Department
of Mechanical Engineering, University of Edinburgh,
1995.
[Smith 95b] R.
Smith. A First Investigation into a Voxel Based Shape Representation.
Technical Report, Manufacturing and Planning
Group, Department of Mechanical Engineering, University
of Edinburgh, 1995.
[Tucson & Ross 96] A. Tuson and P. Ross.
Adapting Operator Settings in Genetic Algorithms. Department of Artificial Intelligence Research Paper No. 821, University of
Edinburgh, 1996.
[Tucson et al.
97] A. Tuson, P. Ross, and
T. Duncan. On Interactive Neighbourhood
Search Schedulers. Submitted to the
16th UK Planning and
Scheduling SIG, 1997.
[Watabe & Okino 93] H. Watabe and N. Okino.
A Study on Genetic Shape Design. In Stephanie Forrest, editor, Proceedings of the Fifth International Conference on Genetic Algorithms,
pages 445-450. San Mateo: Morgan
Kauffman, 1993
[Whitley 89] D.
Whitley. The Genitor Algorithm, Why
Rank Based Allocation of Reproductive
Trials is Best. In Proceedings of the 1989
International Conference on Genetic Algorithms,
pages 116-121, 1989.
* Ansys is a registered trade mark of SAS IP, Inc.
+ N-dimensional pixels
* incidentally, this algorithm will not operate with a selection pressure of 1.0 as this results in a divide by zero.
* described in Section 2.2.3.
* Ansys is a registered trademark of SAS IP, Inc.
* K = constraint penalty multiplier value.