Skip to main content

MATLAB optimization toolbox usage with genetic algorithm


Useful tutorial


http://www.mathworks.com/products/global-optimization/description3.html

Best example of implementatoin with Constraint, objective function

http://www.mathworks.com/help/gads/examples/constrained-minimization-using-the-genetic-algorithm.html

More about how to use multi-objective

http://www.mathworks.com/discovery/multiobjective-optimization.html


http://www.mathworks.com/help/gads/examples/performing-a-multiobjective-optimization-using-the-genetic-algorithm.html

http://www.mathworks.com/help/gads/examples/multiobjective-genetic-algorithm-options.html

Example GAMULTOBJ (can handle Multiple Objective)  GA(can handle 1 objective)

Constrained Minimization Problem
We want to minimize a simple fitness function of two variables x1 and x2
   min f(x) = 100 * (x1^2 - x2) ^2 + (1 - x1)^2;
    x
  min f(x) = 100 * (x1^2 + x2) ^2 + (1 + x1)^2;
    x 
such that the following two nonlinear constraints and bounds are satisfied
   x1*x2 + x1 - x2 + 1.5 <=0, (nonlinear constraint)
   10 - x1*x2 <=0,            (nonlinear constraint)
   0 <= x1 <= 1, and          (bound)
   0 <= x2 <= 13              (bound)

Implementation of  Singleobjective Function
   function y = simple_objective(x)
    y = 100 * (x(1)^2 - x(2)) ^2 + (1 - x(1))^2;
 
Implementation of  Multiobjective Function

   function y = simple_multiobjective(x)
    y(1) = 100 * (x(1)^2 - x(2)) ^2 + (1 - x(1))^2;
    y(2) = 100 * (x(1)^2 + x(2)) ^2 + (1 + x(1))^2; 

Implementation of the Constraint Function
   function [c, ceq] = simple_constraint(x)
   c = [1.5 + x(1)*x(2) + x(1) - x(2);
   -x(1)*x(2) + 10];
   ceq = [];
 
Implementation of the GAMULTOBJ/ GA
 
ObjectiveFunctionOne = @simple_objective;
ObjectiveFunctionMult = @simple_multiobjective;
nvars = 2;
A = []; b = [];
Aeq = []; beq = [];
LB = [0 0];   % Lower bound , you can also set []
UB = [1 13];  % Upper bound , you can also set []
options = gaoptimset('PlotFcns',{@gaplotpareto,@gaplotscorediversity});

[x,fval,extflag, output,pop, score] = gamultiobj( ObjectiveFunctionMult, nvars, A, b, Aeq, beq, LB, UB, options )

[x,fval,extflag, output,pop, score] = gamultiobj( ObjectiveFunctionOne, nvars, A, b, Aeq, beq, LB, UB, options )


But in GA you can add non-linear constraint

http://www.mathworks.com/help/gads/examples/constrained-minimization-using-the-genetic-algorithm.html

function [c, ceq] = simple_constraint(x)
   c = [1.5 + x(1)*x(2) + x(1) - x(2);
   -x(1)*x(2) + 10];
   ceq = [];

[x,fval,extflag, output,pop, score] = ga(ObjectiveFunctionOne,nvars,[],[],[],[],LB,UB , ConstraintFunction);

Example GAMULTOBJ (can handle Multiple Objective)  GA(can handle 1 objective) for BITSTRING

%% using gamultobj
ObjectiveFunction = @myFitnessFnc_bitString;
nvars = 2;    % Number of variables
LB = [0 0];   % Lower bound
UB = [1 13];  % Upper bound
options = gaoptimset('PopulationSize',60,...
          'ParetoFraction',0.7,'PlotFcns',@gaplotpareto, 'PopulationType','bitstring');
[x fval flag output population score] = gamultiobj(ObjectiveFunction,nvars, [],[],[],[],[] ,[] ,options )

%% using GA

%% usig ga
ObjectiveFunction = @myFitnessFnc_bitString;
nvars = 2;    % Number of variables
options = gaoptimset('PopulationSize',60,...
          'ParetoFraction',0.7,'PlotFcns',@gaplotpareto, 'PopulationType','bitstring');
[x fval flag output population score] = ga(ObjectiveFunction,nvars, options)

Comments

  1. I have two objectives functions, I want use gamultiobj but I don't know how to set the constraints!

    Please, help me.

    ReplyDelete

Post a Comment

Popular posts from this blog

MATLAB cross validation

// use built-in function samplesize = size( matrix , 1); c = cvpartition(samplesize,  'kfold' , k); % return the indexes on each fold ///// output in matlab console K-fold cross validation partition              N: 10    NumTestSets: 4      TrainSize: 8  7  7  8       TestSize: 2  3  3  2 ////////////////////// for i=1 : k    trainIdxs = find(training(c,i) ); %training(c,i);  // 1 means in train , 0 means in test    testInxs  = find(test(c,i)       ); % test(c,i);       // 1 means in test , 0 means in train    trainMatrix = matrix (  matrix(trainIdxs ), : );    testMatrix  = matrix (  matrix(testIdxs  ), : ); end //// now calculate performance %%  calculate performance of a partition     selectedKfoldSen=[];selectedKfoldSpe=[];selectedKfoldAcc=[];     indexSen=1;indexSpe=1;indexAcc=1;     if ( kfold == (P+N) )% leave one out         sensitivity = sum(cvtp) /( sum(cvtp) + sum(cvfn) )         specificity = sum(cvtn) /( sum(cvfp) + sum(cvtn) )         acc

R tutorial

Install R in linux ============ In CRAN home page, the latest version is not available. So, in fedora, Open the terminal yum list R  --> To check the latest available version of r yum install R --> install R version yum update R --> update current version to latest one 0 find help ============ ?exact topic name (  i.e.   ?mean ) 0.0 INSTALL 3rd party package  ==================== install.packages('mvtnorm' , dependencies = TRUE , lib='/home/alamt/myRlibrary/')   #  install new package BED file parsing (Always use read.delim it is the best) library(MASS) #library(ggplot2) dirRoot="D:/research/F5shortRNA/TestRIKEN/Rscripts/" dirData="D:/research/F5shortRNA/TestRIKEN/" setwd(dirRoot) getwd() myBed="test.bed" fnmBed=paste(dirData, myBed, sep="") # ccdsHh19.bed   tmp.bed ## Read bed use read.delim - it is the  best mybed=read.delim(fnmBed, header = FALSE, sep = "\t", quote = &q