**3. Linear programs with continuous representation**

We propose to use Differential Evolution and CMA Evolution Strategy to evolve float vectors, which will be mapped to sequences of imperative instructions in order to form linear programs, similar to the LGP scheme from [6]. For the sake of simplicity, these schemes are respectively denoted:

• LDEP, for Linear Differential Evolutionary Programming, when DE is used as the evolutionary engine;

	- CMA-LEP, for Covariance Matrix Adaption Linear Evolutionary Programming, when the evolutionary engine is CMA-ES.

destination and operand registers. In order to convert a float *vi* into an integer index, we

• The conversion of an operand register depends whether it is a constant or a read-write register. This is controlled by a user defined probability of selecting constant registers,

where *n*registers denotes the number of possible read-write registers, and *n*constants denotes

Let us suppose we work with 6 read-write registers (*r*<sup>0</sup> to *r*5), 50 constant registers, and the 4

0 : + 1 : − 2 : × 3 : ÷ We set up the constant register probability to *PC* = 0.1 and we consider the following vector composed of 8 floats, to be translated into 2 imperative instructions (< *v*1, *v*2, *v*3, *v*<sup>4</sup> > and

> *v*<sup>1</sup> *v*<sup>2</sup> *v*<sup>3</sup> *v*<sup>4</sup> *v*<sup>5</sup> *v*<sup>6</sup> *v*<sup>7</sup> *v*<sup>8</sup> 0.17 2.41 1.86 3.07 0.65 1.15 1.25 4.28

Value *v*<sup>1</sup> denotes one operator among the four to choose from. Applying Eq. 6, we get

The second value *v*<sup>2</sup> = 2.41 is turned into a destination register. According to Eq. 7, we obtain #register = �(2.41 − �2.41�) × 6� = �2.46� = 2, meaning that the destination register is *r*2. The next value *v*<sup>3</sup> = 1.86 gives an operand register. According to Eq. 8, it is a read-write register since (1.86 − �1.86�) = 0.86 > *PC*. Thus the first operand register is: #register =

The last of the four first operands is decoded as a constant register since (3.07 − �3.07�) =

#operator = �(0.17 − �0.17�) × 4� = 0, meaning that the first operator is +.

�((1.86 − �1.86� − 0.1)/0.9) × 6� = �5.07� = 5, meaning read-write register *r*5.

0.07 ≤ *PC*. The index is �3.07� mod 50 = 3, meaning constant register *c*3.

#operator = �(*vi* − �*vi*�) × *n*operators� (6)

Continuous Schemes for Program Evolution 35

#register = �(*vi* − �*vi*�) × *n*registers� (7)

<sup>1</sup>−*Pc* ) <sup>×</sup> *<sup>n</sup>*registers� if (*vi* − �*vi*�) <sup>&</sup>gt; *PC*
