Creates an Imsls_f_individual data structure from user supplied phenotypes.
#include <imsls.h>
Imsls_f_individual *imsls_f_ga_individual (Imsls_f_chromosome *chromosome,..., 0)
The type double function is imsls_d_ga_individual.
Imsls_f_chromosome
*chromosome
(Input)
A chromosome data structure created by imsls_f_ga_chromosome.
This structure is cloned and stored in the Imsls_f_individual data
structure.
The function imsls_f_ga_individual returns an Imsls_f_individual data structure, which is required input to imsls_f_ga_population. The memory allocated to this data structure can be freed using imsls_f_ga_free_individual.
#include <imsls.h>
Imsls_f_individual
*imsls_f_ga_individual (Imsls_f_chromosome *chromosome,
IMSLS_PRINT,
IMSLS_GRAY_ENCODING,
IMSLS_BINARY, int
binaryPhenotype[],
IMSLS_NOMINAL, int
nominalPhenotype[],
IMSLS_INTEGER, int
intPhenotype[],
IMSLS_REAL,
float realPhenotype[],
0)
IMSLS_PRINT
(Input)
By default, intermediate results are not printed. This option
turns on printing of intermediate results.
IMSLS_GRAY_ENCODING
(Input)
Specifies whether alleles are encoded using Base-2 or Gray encoding
for integer and real phenotypes.
Default: Base-2 encoding.
IMSLS_BINARY, int
binaryPhenotype[] (Input)
An array of length chromosome->n_binary
containing the integer values for any binary phenotypes. This is a
required argument when chromosome->n_binary> 0.
IMSLS_NOMINAL, int
nominalPhenotype[] (Input)
An array of length chromosome->n_nominal
containing the integer values for any nominal phenotypes. This is a required
argument when chromosome->n_nominal is
greater than zero. The value of nominalPhenotype[i]
must be one of the integers 0, 1,…, chromosome->n_categories[i]-1.
IMSLS_INTEGER, int
integerPhenotype[] (Input)
An array of length chromosome->n_integer
containing the integer values for any integer phenotypes. This is a required
argument when chromosome->n_integer>0.
The value of integerPhenotype[i]
must be an integer in the closed interval [chromosome->i_bounds[2*i], chromosome->i_bounds[2*i+1])
IMSLS_REAL, float
realPhenotype[] (Input)
An array of length chromosome->n_real
containing the floating point values for any real phenotypes. This is a
required argument when chromosome->n_real is greater
than zero. The value of realPhenotype[i] must
be a floating point value in the closed interval:[chromosome->r_bounds[2*i], chromosome->r_bounds[2*i+1])
The imsls_f_genetic_algorithm operates on a population of individuals. Individuals can be created automatically using ga_random_population or systematically using imsls_f_ga_population. If the initial population is created using randomly selected individuals, then this function is not needed. However, if the initial population is to be constructed systematically, then the individuals for that population must first be created using this function.
This function takes the phenotype values in the optional arguments and creates an Imsls_f_individual data structure. This structure contains a chromosome created by encoding the phenotypes into their respective allele representations using the chromosome map described in Imsls_f_chromosome.
It also allows for incorporating parentage information for the individual, although this is typically not done for the individuals in the initial population.
Memory allocated for this data structure is released using imsls_f_ga_free_individual. The chromosome data structure passed to this function is copied into the individual and left unaltered. Hence, releasing memory using imsls_f_ga_free_individual does not release memory allocated to the original chromosome. The original chromosome can be released using imsls_free.
This example creates an individual using a chromosome with 1 binary, 2 nominals, 3 integers and 2 real phenotypes. The IMSLS_PRINT argument is used to print a description of the data structure. By default, Base-2 encoding is used for encoding integer and real phenotypes.
Note that imsls_f_ga_free_individual frees the Imsls_f_chromosome data structure within the individual.
#include <imsls.h>
int main(){
int n_binary=1, n_nominal=2, n_integer=3, n_real=2;
/* binary phenotype */
int binaryPhenotype[] = {1};
/* number of categories for nomial phenotypes */
int n_categories[] = {2, 3};
/* nominal phenotype values */
int nominalPhenotype[] = {1, 2};
/* number of intervals and boundaries for integer */
/* phenotypes */
int i_intervals[] = {16, 16, 16};
int i_bounds[] = {0, 1000, -10, 10, -20, 0};
/* integer phenotype values */
int integerPhenotype[] = {200, -5, -5};
/* number of intervals and boundaries for real */
/* phenotypes */
int r_intervals[] = {512, 1024};
float r_bounds[] = {0.0, 20.0, -20.0, 20.0};
/* real phenotype values */
float realPhenotype[] = {19.9, 19.9};
/* Chromosome Data Structure */
Imsls_f_chromosome* chromosome;
/* Individual Data Structure */
Imsls_f_individual* individual;
chromosome = imsls_f_ga_chromosome(
IMSLS_BINARY,
n_binary,
IMSLS_NOMINAL, n_nominal, n_categories,
IMSLS_INTEGER, n_integer, i_intervals, i_bounds,
IMSLS_REAL, n_real, r_intervals, r_bounds, 0);
/* Create individual data structure */
individual = imsls_f_ga_individual(chromosome,
IMSLS_BINARY, binaryPhenotype,
IMSLS_NOMINAL, nominalPhenotype,
IMSLS_INTEGER, integerPhenotype,
IMSLS_REAL, realPhenotype,
IMSLS_PRINT, 0);
imsls_free(chromosome);
imsls_f_ga_free_individual(individual);
}
The IMSLS_PRINT option produced the following description of the individual. Summary starts with a detailed description of the chromosome. It consists of 34 alleles split among the phenotypes. The actual encoding of the phenotypes into alleles is shown below.
Bits assigned to binary phenotypes are not encoded. They are mapped directly into the first n_binary bits of the chromosome. In this case there is only one binary phenotype. It gets mapped into bit zero.
Following the binary phenotype are the nominal phenotypes. Each of these is also mapped into a single allele. However, unlike binary phenotypes, the alleles can assume values other than zero and one.
The integer and real phenotypes are discretized into sixteen interval values. These are then encoded into 4 bit Base-2 representations of the integers 0-15.
*******************************
**** INDIVIDUAL STRUCTURE *****
Number of Parents: 2
Encoding: GRAY
*******************************
**** CHROMOSOME STRUCTURE *****
Chromosome length: 34 Bits
*****BIT ASSIGNMENTS***********
Binary: 0 - 0 n_binary = 1
Nominal: 1 - 2 n_nominal= 2
Integer: 3 - 14 n_integer= 3
Real: 15 - 33 n_real = 2
*******************************
********PHENOTYPES*************
BINARY*************************
Variable 0: 1
*******************************
NOMINAL************************
Variable 0: 1
Variable 1: 2
*******************************
INTEGER************************
Variable 0: 200
Variable 1: -5
Variable 2: -5
*******************************
REAL***************************
Variable 0: 19.9
Variable 1: 19.9
*******************************
**********CHROMOSOME**************************************
BINARY BITS: 1
NOMINAL ALLELES: 2 1
INTEGER BITS: 0 0 1 1 0 1 0 0 1 1 0 0
REAL BITS: 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1
**********************************************************