Test Function

In this case we will explore function visualization with a simple x^2 objective function:

f(x) = x^2

This has an optimal value with an input of x=0.0, which equals 0.0.

The example below implements this objective function and evaluates a single input.

# example of a 1d objective function

# objective function

def objective(x):

return x**2.0

# evaluate inputs to the objective function

x = 4.0

result = objective(x)

print(‘f(%.3f) = %.3f’ % (x, result))

Running the example evaluates the value 4.0 with the objective function, which equals 16.0.

f(4.000) = 16.000

1

f(4.000) = 16.000

Sample the Test Function

The first thing we might want to do with a new function is define an input range of interest and sample the domain of interest using a uniform grid.

This sample will provide the basis for generating a plot later.

In this case, we will define a domain of interest around the optima of x=0.0 from x=-5.0 to x=5.0 and sample a grid of values in this range with 0.1 increments, such as -5.0, -4.9, -4.8, etc.

…

# define range for input

r_min, r_max = -5.0, 5.0

# sample input range uniformly at 0.1 increments

inputs = arange(r_min, r_max, 0.1)

# summarize some of the input domain

print(inputs[:5])

We can then evaluate each of the x values in our sample.

# compute targets

results = objective(inputs)

# summarize some of the results

print(results[:5])

Finally, we can check some of the input and their corresponding outputs.

# create a mapping of some inputs to some results

for i in range(5):

print(‘f(%.3f) = %.3f’ % (inputs[i], results[i]))

Tying this together, the complete example of sampling the input space and evaluating all points in the sample is listed below.

# sample 1d objective function

from numpy import arange

# objective function

def objective(x):

return x**2.0

# define range for input

r_min, r_max = -5.0, 5.0

# sample input range uniformly at 0.1 increments

inputs = arange(r_min, r_max, 0.1)

# summarize some of the input domain

print(inputs[:5])

# compute targets

results = objective(inputs)

# summarize some of the results

print(results[:5])

# create a mapping of some inputs to some results

for i in range(5):

print(‘f(%.3f) = %.3f’ % (inputs[i], results[i]))

Running the example first generates a uniform sample of input points as we expected.

The input points are then evaluated using the objective function and finally, we can see a simple mapping of inputs to outputs of the objective function.

[-5. -4.9 -4.8 -4.7 -4.6]

[25. 24.01 23.04 22.09 21.16]

f(-5.000) = 25.000

f(-4.900) = 24.010

f(-4.800) = 23.040

f(-4.700) = 22.090

f(-4.600) = 21.160