else {
stop(Expecting a chromosome of length 2!);
}
returnVal
}
monitor <- function(obj) {
#
plot de la población
xlim = c(obj$stringMin[1], obj$stringMax[1]);
ylim = c(obj$stringMin[2], obj$stringMax[2]);
plot(obj$population, xlim=xlim, ylim=ylim, xlab=pi, ylab=sqrt(50)); }
rbga.results
=
rbga(c(1,
1),
c(5,
10),
monitorFunc=monitor,
evalFunc=evaluate,
verbose=TRUE, mutationChance=0.01)
plot(rbga.results) plot(rbga.results, type="hist") plot(rbga.results, type="vars")
3.5.
CROMOSOMA BINARIO
3.5.1.
Descripción
R
basado en
AG
que optimiza, con
una función determinada de la evaluación del
usuario, un cromosoma binario que se puede utilizar para la selección de variables.
El grado óptimo es el cromosoma para el cual el valor de la evaluación es mínimo.
Requiere un método de evalFunc que tome como discusión el cromosoma binario,
un vector de ceros y unos. Además, la optimización de AG
puede ser supervisada
fijando un monitorFunc que tome un objeto del rbga como argumento.
Los resultados se pueden visualizar con plot.rbga y resumir con summary.rbga.
3.5.2.
Uso
rbga.bin(size=10,
suggestions=NULL,
popSize=200, iters=100,
mutationChance=NA,
elitism=NA, zeroToOneRatio=10,
monitorFunc=NULL, evalFunc=NULL,
showSettings=FALSE, verbose=FALSE)
3.5.3.
Argumentos
size: El número de genes en el cromosoma.
popSize: El tamaño de la población.
iters: El número de iteraciones.
mutationChance:
En
el
caso
de
un
gen
en
la
mutación
del
cromosoma.
Por
el
defecto
1/
(size+1).
Afecta
el
tipo
de
convergencia
y
el
espacio
de
la
búsqueda:
resultados bajos en una convergencia más rápida, mientras que resultado altos
aumenta el espacio de la búsqueda.
elitism: El número de los cromosomas que se guardan en la generación siguiente.
Por defecto está cerca del 20 %
del tamaño de la población.
zeroToOneRatio:
El
cambio
por
un
cero
para
las
mutaciones
y
la
inicialización.
Esta opción se utiliza para controlar el número de los genes del sistema en el cro-
mosoma. Por ejemplo, al hacer la selección de la variable este parámetro debe ser
fijado.
monitorFunc: Funcionamiento del método después de cada generación para per-
mitir la supervisión de la optimización.
evalFunc El usuario proveyó método para calcular la función de la evaluación para
el cromosoma dado.
showSettings: Si es TRUE
los ajustes serán impresos para el screen. Por
defecto
FALSE.
verbose: Si es TRUE el algoritmo será más verbose. Por defecto FALSE.
Suggestions: Lista opcional de cromosomas sugeridos.
3.5.4.
Ejemplos
#
evalúa una optimización muy simplista
evaluate <- function(string=c()) {
returnVal = 1 / sum(string);
returnVal
}
rbga.results = rbga.bin(size=10,
mutationChance=0.01, zeroToOneRatio=0.5,
evalFunc=evaluate)
plot(rbga.results)
#
en este ejemplo las cuatro variables en la
matriz son completadas con
36 varia-
bles al azar. La selección aleatoria debe encontrar las cuatro variables originales.
#
#
Not run:
data(iris)
library(MASS)
X
<- cbind(scale(iris[,1:4]),
matrix(rnorm(36*150), 150, 36))
Y
<- iris[,5]
iris.evaluate <- function(indices) {
result = 1
if (sum(indices) >2) {
huhn
<-
lda(X[,indices==1],
Y,
CV=TRUE)$posterior
result
=
sum(Y
!=
dimnames(huhn)[[2]][apply(huhn,
1,
function(x)
which(x == max(x)))]) / length(Y)
}
result
}
monitor <- function(obj) {
minEval =
min(obj$evaluations);
plot(obj, type=hist);
}
woppa <- rbga.bin(size=40,
mutationChance=0.05, zeroToOneRatio=10,
evalFunc=iris.evaluate, verbose=TRUE, monitorFunc=monitor)
#
#
End(Not run)
#
#
Not run:
library(pls.pcr)
data(NIR)
numberOfWavelenghts = ncol(NIR$Xtrain)
evaluateNIR <- function(chromosome=c()) {
returnVal = 100
minLV = 2
if (sum(chromosome) <minLV) {
returnVal
}
else {
xtrain
=
NIR$Xtrain[,chromosome
==
1];
pls.model
=
pls(xtrain,
NIR$Ytrain,
validation=CV, grpsize=1,
ncomp=2:min(10,sum(chromosome)))
returnVal = pls.model$val$RMS[pls.model$val$nLV-(minLV-1)] returnVal
}
}
monitor <- function(obj) { minEval = min(obj$evaluations);
filter = obj$evaluations == minEval;
bestObjectCount = sum(rep(1, obj$popSize)[filter]);
if (bestObjectCount >1) {
bestSolution = obj$population[filter,][1,];
}
else {
bestSolution = obj$population[filter,];
}
outputBest = paste(obj$iter, #selected=, sum(bestSolution),
Best (Error=, minEval, ): , sep=);
for (var in 1:length(bestSolution)) {
outputBest = paste(outputBest,
bestSolution[var], ,
sep=);
}
outputBest = paste(outputBest, sep=);
cat(outputBest);
}
nir.results = rbga.bin(size=numberOfWavelenghts, zeroToOneRatio=10,
evalFunc=evaluateNIR, monitorFunc=monitor,
popSize=200, iters=100, verbose=TRUE)
#
#
End(Not run)
3.6.
FUNCIÓN SUMMARY
3.6.1.
Descripción
Resume los resultados del
AG.
3.6.2.
Uso
summary.rbga(object, echo=FALSE, ...)
3.6.3.
Argumentos
object: Un objeto rbga. echo: Si es TRUE, el summary será impreso a STDOUT
así como retornado.
3.6.4.
Ejemplos
evaluate <- function(string=c()) {
returnVal = 1 / sum(string);
returnVal
}
rbga.results = rbga.bin(size=10,
mutationChance=0.01, zeroToOneRatio=0.5,
evalFunc=evaluate)
summary(rbga.results)
4.
APLICACIÓN
Una empresa de energía desea
maximizar la producción de electricidad de una de
sus plantas. En ella la electricidad se produce
mediante vapor a partir de carbón y
se desea maximizar la producción de vapor que se hace a partir de la combinación
de dos tipos de carbón: Carbón A y carbón
B.
Cada tonelada de carbón
A
produce
24 unidades de vapor y de carbón B 20. Pero existen ciertas restricciones. La
cantidad máxima de emisiones de humo por hora esta limitada a 12 kg. Cada
tonelada
de
carbón
A
produce
0.5
kg
de
humo
y
de
B
1
kg.
El
sistema
de
cinta
transportadora
que
traslada
el
carbón
de
los
depósitos
al
pulverizador
tiene
una
capacidad de
20 ton/h. La capacidad máxima del pulverizador es de 16 ton/h para
carbón
A
ó
24 ton/h para carbón
B.
Definamos las restricciones y la función objetivo:
XA: ton de carbon A/hora
XB: ton de carbon A/hora
Z
=
24XA+20XB
0.5XA+XB= 12kg/h
XA+XB=
20
Primero
se
debe
codificar
en
forma
binaria
como
se
hará
a
conti-
nuación:
Nótese
que
esto
es
en
el
caso
de
que
todos
los
valores
binarios
sean
1
ya
que
al
sumarlos
debe
de
dar
la
restricción
del
valor
XA,
tomando
como
valor
máximo
16.
1
1
1
1
1
Total
2
2
6
4
2
16
De igual forma para
XB, en este caso el
màximo valor es 4.
1
1
1
Total
1
2
1
4
El siguiente paso es hacer competir a los individuos entre sí.
Este proceso se co-
noce como selección.