Complexity International
    ISSN 1320-0682     
Volume 3 April 1996
 

How to Make Best Use of Evolutionary Learning

Xin Yao, Yong Liu & Paul Darwen

...Yao, Liu and Darwen
Computational Intelligence Group, School of Computer Science University College, The University of New South Wales Australian Defence Force Academy, Canberra, ACT, Australia 2600.

This work is partially supported by an ARC small grant.

Email: xin@csadfa.cs.adfa.oz.au

 

Abstract:

Evolutionary learning has been developing rapidly in the last decade. It is a powerful and general learning approach which has been used successfully in both symbolic systems - for example, rule-based systems - and subsymbolic systems - for example, artificial neural networks. However, most evolutionary learning systems have paid little attention to the fact that they are population-based learning. The common practice is to select the best individual in the last generation as the final learned system. Such practice, in essence, treats these learning systems as optimisation ones. This paper emphasises the difference between a learning system and an optimisation one, and shows that such difference requires a different approach to population-based learning and that the current practice of selecting the best individual as the learned system is not the best choice. The paper then argues that a population contains more information than the best individual and thus should be used as the final learned system. Two examples are presented in this paper to show that even some simple methods which make full use of a population can improve the performance of a learned system greatly. The first example is in the sub-symbolic domain of artificial neural networks. The second example is in the symbolic domain of rule-based systems.


Introduction

The popularity of evolutionary learning and population-based learning in general, has increased rapidly in recent years. They offer distinct advantages over other machine-learning approaches in dealing with complex and changing environments. In evolutionary learning, the most popular approach is to represent a complete learning system as an individual. The learning system can be either a rule-base system or an artificial neural network. This approach is known as the Pitt approach [22] although the original Pitt approach only referred to rule-based systems. After a certain number of generations of evolving (training), the best individual in the last generation or the best individual found so far is usually chosen as the final learned system. This approach has been so widely used that few people have ever questioned whether there is a better way to make full use of population-based learning without changing the general framework. This paper proposes a simple yet effective method of making best use of population-based learning.

The method proposed in this paper is based on the fact that learning is different from optimisation and that a population contains more useful information than the best individual in the population. We use the last population, rather than any individual to form the final learned system. The results we obtained are better than those obtained by the single best individual.

We will emphasise the difference between evolutionary learning and optimisation in the first section Evolutionary Learning and Optimisation. To support our analysis and arguments, we present our first set of experiments using evolutionary artificial neural networks in the following section Modular Evolutionary Artificial Neural Networks. To take it one step further from just combining an existing population, we can actually encourage formation of species which will be modules of the final combined system. We demonstrate in the section Towards Automatic Modularisation that such a method does work and produces better results than other methods. Finally, we conclude this paper with a summary and future research directions.


Evolutionary Learning and Optimisation

Learning is often formulated as an optimisation problem in the machine-learning field. For example, back-propagation (BP) is often used to train feedforward artificial neural networks (ANNs) [19]. This training process is also called the learning process of ANNs. BP is known as one of the most popular learning algorithms. However, BP is in essence, a gradient-based optimisation algorithm which is used to minimise an error function (often a mean square error) of ANNs. The so-called learning problem here is a typical optimisation problem in numerical analysis. Many improvements on the ANN learning algorithm are actually improvements over optimisation algorithms [10], such as conjugate gradient methods [11, 14].

Learning is different from optimisation because we want the learned system to have best generalisation, which is different from minimising an error function. An ANN with the minimum error does not necessarily mean that the ANN has the best generalisation unless there is an accurate way to measure generalisation which can then be maximised. Unfortunately, measuring generalisations accurately is almost impossible in practice, although there are theories and criteria on generalisation, such as the minimum description length (MDL) [17], Akaike information criteria (AIC) [1], and minimum message length (MML) [23]. In practice, these criteria are often used to define a better error function in the hope that minimising the function will correspond to maximising generalisation. While better error functions do lead to better generalisation of learned systems, there is no guarantee. BP or other more advanced learning algorithms are still used as optimisation algorithms. They just optimise different error functions. The nature of the problem is unchanged.

The similar situation occurs in decision tree learning [16] and other machine-learning methods [3]. Criteria always have to be set for learning. However, no criteria can guarantee that they correspond to "true" generalisation. This is a problem faced by all inductive learning methods. There is no way in practice one can get around this. The best we can do is to find better criteria, as mentioned before.

Evolutionary learning is a population-based learning method. Most people just use an evolutionary algorithm to maximise a fitness function or minimise an error function, and thus face the same problem as described above. The evolutionary algorithm is just yet another optimisation algorithm. Some interesting questions arise here. Are we optimising the right function? Why spending time on fancy optimisation algorithms if the function optimised is not what we want? Can we do anything about it? While little can be done for the traditional nonpopulation-based learning methods, there are opportunities for improving population-based learning, such as evolutionary learning.

Since the maximum fitness is not equivalent to best generalisation in evolutionary learning, the best individual with the maximum fitness in a population may not be the one we want. Other individuals in the population may be better and have useful information that will help to improve generalisation of learned systems. It is thus beneficial to make use of the whole population rather than any single individual. A population always contains at least as much information as any single individual in it. The issue now is how to use them effectively. The next section describes four simple methods for combining individuals in a population into an integrated learned system in order to make use of all the information contained in different individuals.


Modular Evolutionary Artificial Neural Networks

Evolutionary design of ANNs has attracted a lot of attention since the late 1980's. It can be regarded as evolutionary learning of ANN architectures and/or weights. We have developed such a learning system called EPNet based on an evolutionary programming (EP) algorithm [26, 27, 31, 30, 29, 12]. EPNet follows the usual method of selecting the final learned ANN; that is, only one individual is selected as the output. The rest of the final population are abandoned. Although EPNet has achieved excellent results on a number of benchmark problems [26, 27, 31, 30, 28, 12], it has been shown that some simple combination methods which combine different individuals in the last generation to form the final integrated learned ANN can improve the results further [28].

In our experiments [29], we first used EPNet to evolve a population of ANNs, called evolutionary ANNs (EANNs). We then used four combination methods to combine different individuals in the last generation into the final learned EANNs. These systems were then compared with the single best EANN in the last generation. Three benchmark problems were used in our experiments: the Australian credit card, diabetes and heart disease problems. All three problems were obtained from the UCI machine-learning repository.


EPNet

The main architecture of EPNet can be described by Figure 1.

  figure29
Figure 1: The main structure of EPNet.

Two validation sets were used in our experiments. The first, V-set 1, was used for fitness evaluation. The second, V-set 2, was used in the last step of EPNet - that is, further training. In the last step, all individuals in the last generation were trained by a modified BP [27] on the combined training and first validation set. V-set 2 was used to stop such training. The best individual with the minimum error rate on V-set 2 was chosen as the final learned EANN. A tie was broken in favour of the individual with the minimum error rate on the combined training and V-set 1. If a tie still exists, the individual with the minimum error on the combined training and V-set 1 will be the final ouput.

For all our experiments, each data set was randomly partitioned into four subsets: a training set, V-set 1, V-set 2 and a testing set. The size of the training set, V-set 1, V-set 2, and testing set was 50%, 12.5%, 12.5%, and 25% of all examples, respectively. The input attributes used for EANNs were rescaled to between 0.0 and 0.1 by a linear function. The output attributes of all the problems were encoded using a 1-of-m output representation for m classes. The winner-takes-all method is used in our EANNs; that is, the output with the highest activation designates the class.

The parameters used in our experiments with the three problems were set to be the same: the population size (20), the maximum number of generations (100), the initial number of hidden nodes (2 to 8), the initial connection density (0.75), the initial learning rate (0.2), the number of mutated hidden nodes (1), and the number of mutated connections (1 to 3). More details about EPNet can be found in other relevant papers [26, 27, 31, 30, 29, 12, 28].


Four Combination Methods

The first combination method we used was the simple majority voting among all the individuals in the final generation. The second method was based on a weighted linear combination of different individuals in the last generation. The weights were calculated according to how good an individual was in the last generation; that is,

  equation38

where N was the population size and tex2html_wrap_inline492 was a scaling factor. It was set as 0.75, 0.5, and 0.75 for the Australian credit card, diabetes and heart disease problem respectively. These numbers were selected after limited preliminary experiments with tex2html_wrap_inline500 and 0.75. The ensemble output was:

  equation44

where tex2html_wrap_inline504 were outputs from different individuals.

The third method also used linear combination of all the individuals in the last generation. It used the recursive least square (RLS) algorithm [15] to determine the weights. The fourth method was slightly more complicated. It used a genetic algorithm (GA) to search for a near optimal subset of the population so that the final integrated system would contain fewer EANNs. The weights were still determined by the RLS algorithm.


Experimental Results

Table 1 shows the average results over 30 runs produced by the four combination methods and those produced by the single best EANN. ESi (Ensemble Structure i) in the table indicates the result produced by the i-th method.

table50

Table 1: Mean error rates produced by the four combination methods and those by the single best EANNs. The results are averaged over 30 runs. ESi (Ensemble Structure i) in the table indicates the result produced by the i-th method.

It is clear from Table 1 that ES3, which used the RLS algorithm to determined the weights, outperforms EPNet consistently. For the other three methods, they all outperform EPNet on the Australian credit card and diabetes problems but are comparable to, or worse than, EPNet on the heart disease problem. This indicates that the best combination method will be the one which can optimally assign weights to different individuals such that better individuals get more say in the linear combination. The RLS algorithm is a good example, although we cannot claim it is optimal.

There are many other algorithms which can be used to combine multiple EANNs, including more powerful nonlinear combination methods. It is, however, not the purpose of this paper to investigate the best algorithm for combination. Instead, this paper wants to emphasise that population-based learning has its own special characteristics which should be exploited in order to improve its performance further.

Combining individuals in a population into an integrated learned system has a close relationship to modular design of ANNs. Each individual in the population can be regarded as a module. The evolutionary process can be regarded as a natural and automatic way to produce different modules. At present, although there are many studies on how to combine different modules together, few studies investigate how modules can be obtained in the first instance. This paper fills this gap in the research.


Towards Automatic Modularisation

The work described in the first section is only the first step towards automatic design of modular systems. The approach can be used not only for ANN design, but also for other learning systems - for example, rule-based systems. In other words, the approach we used does not depend on representations used by the learning system. We will describe an example of a evolving modular rule-based system later in this section.

It is worth pointing out that no extra bookkeeping or any other technique was used in evolving ANNs in the experiments described in the first section. The evolutionary process there was the same as an ordinary simulated evolution. It is then logical to ask the question whether there is anything which could be done to form better modules and thus improve the integrated learned system. For example, if a training example is correctly classified by an individual in a population, we would prefer other individuals in the population to not worry about this example and, instead, to concentrate on other examples. Ideally, if each individual can successfully deal with a different aspect (or part) of a complex problem, then the final integrated system can be expected to perform well on the problem as a whole. In this case, the final modular system will be simpler and easier to understand as well because each module is simpler and targetted at a specific part of the complex problem.

It is clear at this stage that we now have a framework for automatic design of modular learning systems based on simulated evolution. All the modules will be evolved, not manually crafted. The number of modules and the composition of each module need not be pre-fixed by human designers, who may or may not have sufficient a priori knowledge to do so.

The next question then is how to encourage formation of good modules and avoid re-inventing wheels among different modules. Fitness-sharing [9] provides one way to form different species around different peaks of a fitness landscape. It discourages individuals to stay at only one high-fitness region. From our point of view, different species are actually different modules. There will be little repetition between any two different species. This is exactly what we want. It is worth emphasising however, that fitness-sharing is just one technique which implements our idea. The automatic design of modular learning systems is not limited to fitness-sharing. Other techniques which encourage speciation and niching, such as crowding  [7, 13], can also be used without any modification to our framework. In our experiments, we used implicit fitness-sharing  [20].

In the rest of this section, we will describe an example of evolving rule-based systems using a speciated GA  [5]. The example illustrates two points. Firstly, the framework we proposed does not depend on any representations. It works with both ANNs and rule-based systems. Secondly, fitness-sharing does help formation of good modules (species) which can then be combined into an integrated system.


The 2-Player Iterated Prisoner's Dilemma

The problem we are interested in here is the 2-player iterated prisoner's dilemma (2IPD)  [4]. All the rules in the rule-based system encode strategies for playing the game. Figure 2 shows our variant of the payoff matrix of the 2IPD. For the general definition of prisoner's dilemma, see  [25]. In 2IPD, the players iterate through many rounds of a prisoner's dilemma, each remembering previous actions.

figure72

Figure 2: Payoff to player A in our variant of the 2IPD. Each player can either co-operate (C) or defect (D). Payoff is symmetric for both players.

All previous studies on evolving strategies for the 2IPD only chose the best individual in the last generation as the final output [2, 8, 6, 25], although some of them used speciation to increase and maintain the diversity in populations [21, 18]. Their motivation and purpose for using speciation are totally different from ours.


Speciation by Implicit Fitness-Sharing

The implicit fitness-sharing implemented in our experiments can be described by Figure 3.

figure99
Figure 3: Payoff function for implicit fitness-sharing.

Other details of the implementation include:

  1. The best-in-sample receives a fixed credit, instead of their score.
  2. As well as random sample selection, we evaluate reverse-assortative sample selection: the next individual to be included in the sample is the one most different from those already in it. This reduces sampling error, and makes implicit fitness-sharing work better.
  3. To prevent parasite species from driving useful species to extinction, our system penalises (with a small negative payoff) the single test strategy if the best-in-sample gets a higher score.

A Gating Algorithm

After a population of modules are evolved, we face the same issue as that in modular EANNs - that is, combining them into the final integrated system. We describe one such combination algorithm, also called a gating algorithm, in this subsection. Its main purpose is to decide which module's decision should be taken as the output of the integrated system. In other words, the gating algorithm will decide which module would be the best answer to an unseen opponent.

In our implementation, the final generation contains diverse expert strategies. There are several ways to produce separate modules from these. One could run a second GA for each individual to find the single best counter-strategy for that individual. However, to keep things simple, we will presume that the final generation contains suitable counter-strategies to its own members. Hence, our separate modules will simply be the individuals in the last generation. Even though this is the simplest possible way to obtain modules from a speciated GA, we will see below that even this gives better results.

The gating algorithm does the following:

  1. Read in the final generation of the GA, excluding poor performers (the worst 25%).
  2. From the most recent rounds of the game, the gating algorithm compares what the opponent did with what each individual in the population would have done in the opponent's situation. Those individuals that most resemble the opponent are called the imitators.
  3. Every individual plays against every imitator, starting from the current history of moves against the actual opponent. Those that score the equal highest against the imitators are called the imitator-answers. This can be pre-calculated for greater speed.
  4. The imitator-answers vote on what action (co-operate or defect) to take in the current situation against the actual opponent.

The gating algorithm finds what high-quality strategy our opponent is currently following, and finds another high-quality strategy which is specialised against the one our opponent uses. This is shown conceptually in Figure 4.

  figure116
Figure 4: The modular approach to harnessing the specialised expertise in a speciated GA's final generation.

How do we begin the game before any previous moves tell us what the opponent is like? There is no way of knowing what strategy our opponent is using before the first move. Our gating algorithm takes a vote of the final GA generation for the presumed pre-game moves (included in the genotype, described in the next section).


Experimental Setup

The framework of our experimental setup was similar to Axelrod's [2], except for some parameter values. The history lengths (l) of the 2IPD we considered were 2, 3 and 4. The parameters below were selected after a modest amount of searching. The different parameters for tex2html_wrap538 were to keep running times reasonable. We did 30 runs for each value of tex2html_wrap539 .


Results and Discussion

We compared the modular and non-modular system on a set of test opponents. As Wolpert [24] observes, "It may turn out that ... there is no way to measure generalisation more rigorously than via test problems". To obtain this set, we performed a partial enumerative search of all possible strategies, for each value of tex2html_wrap539 . For each strategy tested, we evaluated its performance against a large number of randomly chosen strategies. Only the best 25 were kept for the test set.

Tables 2 - 4 show the results against the test sets by different systems. Each game of the 2IPD, both during learning and testing, lasted for 100 iterations. The results are for 30 of each of the following strategies (that is, 30 runs were conducted):

table137

Table 2: Results of 30 of each strategy against the best 25 strategies from the partial enumerative search, so each line is the average of 750 games. Remembered history is tex2html_wrap567 . Note that for this simpler game, speciation gives similar results for both the best individual or the modular approach.

table149

Table 3: Results against the best 25 strategies from the partial enumerative search, for 2IPD with remembered history tex2html_wrap569 . This is exactly the same as used by Axelrod [2]. Note that the modular approach works better than the best individual. For both methods, improving the speciation method by using the better sample selection scheme also gives better results.

table161

Table 4: Results against the best 25 strategies from the partial enumertaive search, for 2IPD with remembered history tex2html_wrap538. Reverse-assortative sample selection takes much more time for this larger population, so we only did two GA experiments (of 30 runs each).

For the simplest 2IPD with history tex2html_wrap567 , where strategies are only 20 bits in length, both methods (best and gate) give very similar performance in Table 2. This is because our simple method of finding test strategies produced a group of very similar strategies for tex2html_wrap567 . A single best strategy is sufficient to deal with them.

In the more complex games of 2IPD with tex2html_wrap573 , the test sets contain a number of different strategies. The single best strategy can no longer handle them well. The advantage of our modular systems is shown clearly in Tables 3 and 4. In general, the more complex a problem, the better is our modular system than any single individual.

Our experiments also reveal that using a sample selection scheme that improves sample diversity, gives better results than for random sample selection. This is true for both the best individual approach, and our modular approach. However, the improvement is greater for the modular approach, as shown in Table 3. This indicates that evolving good modules, by a better fitness-sharing scheme or other methods, are important in forming the final integrated system.


Conclusions

This paper emphasises that learning is different from optimisation although most learning problems are formulated as optimisation ones. Few studies try to make use of this difference. This paper shows that such difference can be exploited in evolutionary learning and other population-based learning to improve generalisation of learned systems.

A framework for automatic design of modular systems through simulated evolution is presented in this paper. It can evolve different modules for a larger integrated system without human intervention, and thus addresses the issue of how to design modules in a modular system. We tested this framework on two very different examples - that is, ANNs and rule-based systems. The experimental results show that our proposed framework performs better than existing methods. They also demonstrate the generality of the framework.

We used implicit fitness-sharing to evolve good modules for a modular system. This may not be the best technique to implement our framework. Future studies into better techniques for evolving good modules will be conducted in our project. We also intend to apply such techniques to EANNs.


References

 

1
H. Akaike. "A new look at the statistical model identification". IEEE Trans. Appl. Comp., AC-19:716-723, 1974.

 

2
R. Axelrod. "The evolution of strategies for iterated prisoner's dilemma". In L Davis, editor, Genetic Algorithms and Simulated Annealing, chapter 3, pages 32-41. Morgan Kaufmann, San Mateo, CA, 1987.

 

3
R.P. Brent. "Fast training algorithms for multilayer neural nets". IEEE Trans. on Neural Networks, 2:346-354, 1991.

 

4
A.M. Colman. "Game Theory and Experimental Games". Pergamon Press, Oxford, England, 1982.

 

5
P. Darwen and X. Yao. "Automatic modularization by specification". In Proceedings of the 1996 IEEE International Conference on Evolutionary Computation (ICEC'96), pages 88-93, Nagoya, Japan, 1996. IEEE Press, New York, NY 10017-2394.

 

6
P.J. Darwen and X. Yao. "On evolving robust strategies for iterated prisoner's dilemma". In X Yao, editor, Progress in Evolutionary Computation, Lecture Notes in Artificial Intelligence, Vol 956, pages 276-292. Springer-Verlag, Heidelberg, Germany, 1995.

 

7
K.A. De Jong. "An analysis of the behavior of a class of genetic adaptive systems". PhD thesis, University of Michigan, Ann Arbor, 1975.

 

8
D.B. Fogel. "Evolving behaviors in the iterated prisoner's dilemma". Evolutionary Computation, 1(1):77-97, 1993.

 

9
D.E. Goldberg. "Genetic Algorithms in Search, Optimisation, and Machine Learning". Addison-Wesley, Reading, MA, 1989.

 

10
D.R. Hush and B.G. Horne. "Progress in supervised neural networks". IEEE Signal Processing Magazine, 10(1):8-39, January 1993.

 

11
E.M. Johansson, F.U. Dowla, and D.M. Goodman. "Backpropagation learning for multi-layer feed-forward neural networks using the conjugate gradient method". International Journal of Neural Systems, 2(4):291-301, 1991.

 

12
Y Liu and X Yao. "A population-based learning algorithm which learns both architectures and weights of neural networks". Chinese Journal of Advanced Software Research , Allerton Press Inc., New York, NY 10011, 3(1):54-65, 1996.

 

13
S.W. Mahfoud. "Niching Methods for Genetic Algorithms". PhD thesis, University of Illinois at Urbana-Champaign, 1995.

 

14
M.F. Møller. "A scaled conjugate algorithm for fast supervised learning". Neural Networks, 6:525-533, 1993.

 

15
B Mulgrew and C.F.N. Cowan. "Adaptive Filters and Equalisers". Kluwer Academic Publ., Boston, 1988.

 

16
J.R. Quinlan and R. Rivest. "Inferring decision trees using the minmum description length principle". Information and Computation, 80:227-248, 1989.

 

17
J. Rissanen. "Modeling by shortest data description". Automatica, 14:465-471, 1978.

 

18
C.D. Rosin and R.K. Belew. "Methods for competitive co-evolution: finding opponents worth beating". In L. Eshelman, editor, Proc. of the Sixth International Conference on Genetic Algorithms and Their Applications, pages 373-380, San Mateo, CA, 1995. Morgan Kaufmann.

 

19
D.E. Rumelhart, G.E. Hinton, and R.J. Williams. "Learning internal representations by error propagation". In D.E. Rumelhart and J.L. McClelland, editors, Parallel Distributed Processing: Explorations in the Microstructures of Cognition, 1:318-362. MIT Press, Cambridge, MA, 1986.

 

20
R.E. Smith, S. Forrest, and A.S. Perelson. "Searching for diverse, co-operative populations with genetic algorithms". Evolutionary Computation, 1(2):127-149, 1993.

 

21
R.E. Smith and B. Gray. "Co-adaptive genetic algorithms: an example in othello strategy". Technical Report TCGA-94002, University of Alabama, 1994.

 

22
S.F. Smith. "A Learning System Based on Genetic Adaptive Algorithms". PhD thesis, University of Pittsburgh, Pittsburgh, 1980.

 

23
C.S. Wallace and J.D. Patrick. "Coding decision trees". Technical Report 91/153, Dept of Computer Science, Monash University, Clayton, Victoria 3168, Australia, August 1991.

 

24
D.H. Wolpert. "A mathematical theory of generalisation". Complex Systems, 4:151-249, 1990.

 

25
X. Yao and P.J. Darwen. "An experimental study of n-person iterated prisoner's dilemma games". In X Yao, editor, Progress in Evolutionary Computation, Lecture Notes in Artificial Intelligence, 956:pages 90-108. Springer-Verlag, Heidelberg, Germany, 1995.

 

26
X Yao and Y. Liu. "Evolving artificial neural networks for medical applications". In Proceedings of 1995 Australia-Korea Joint Workshop on Evolutionary Computation, pages 1-16, Taejon, Korea, September 1995. KAIST.

 

27
X Yao and Y. Liu. "A new evolutionary system for evolving artificial neural networks". IEEE Trans. on Neural Networks, Submitted 1995.

 

28
X Yao and Y Liu. "Ensemble structure of evolutionary artificial neural networks". In Proceedings of the 1996 IEEE International Conference on Evolutionary Computation (ICEC'96), pages 659-664, Nagoya, Japan, 1996. IEEE Press, New York, NY 10017-2394.

 

29
X Yao and Y Liu. "Evolutionary artificial neural networks that learn and generalise well". In 1996 IEEE International Conference on Neural Networks, Sheraton Washington Hotel, Washington DC, USA, 3-6 June 1996. IEEE Press, New York, NY.

 

30
X Yao and Y Liu. "Evolving artificial neural networks through evolutionary programming". In Evolutionary Programming V: Proceedings of the Fifth Annual Conference on Evolutionary Programming, paper to appear. MIT Press, 1996.

 

31
X Yao and Y Liu. "Towards designing artificial neural networks by evolution". In International Symposium on Artificial Life and Robotics (AROB), B-Con Plaza, Beppu, Oita, Japan, 18-20 February 1996.

About this document ...

How to Make Best Use of Evolutionary Learning

This document was generated using the LaTeX2HTML translator Version 96.1 (Feb 5, 1996) Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.

The command line arguments were:
latex2html yao_liu.

The translation was initiated by Pam Milliken on Tue Feb 4 16:56:33 EST 1997Tue Feb 4 16:56:33 EST 1997


Complexity International (1996) 3