cs-estimation-of-distribution-algorithms
1.0.1
dotnet add package cs-estimation-of-distribution-algorithms --version 1.0.1
NuGet\Install-Package cs-estimation-of-distribution-algorithms -Version 1.0.1
<PackageReference Include="cs-estimation-of-distribution-algorithms" Version="1.0.1" />
paket add cs-estimation-of-distribution-algorithms --version 1.0.1
#r "nuget: cs-estimation-of-distribution-algorithms, 1.0.1"
// Install cs-estimation-of-distribution-algorithms as a Cake Addin #addin nuget:?package=cs-estimation-of-distribution-algorithms&version=1.0.1 // Install cs-estimation-of-distribution-algorithms as a Cake Tool #tool nuget:?package=cs-estimation-of-distribution-algorithms&version=1.0.1
cs-estimation-of-distribution-algorithms
Estimation of Distribution Algorithms implemented in C#
Features
The current library support optimization problems in which solutions are either binary-coded or continuous vectors. The algorithms implemented for estimation-of-distribution are listed below:
- PBIL
- CGA (Compact Genetic Algorithm)
- BOA (Bayesian Optimization Algorithm)
- UMDA (Univariate Marginal Distribution Algorithm)
- Cross Entropy Method
- MIMIC
Usage
Solving Continuous Optimization
Running PBIL
The sample codes below shows how to solve the "Rosenbrock Saddle" continuous optmization problem using PBIL:
CostFunction_RosenbrockSaddle f = new CostFunction_RosenbrockSaddle();
int popSize = 8000;
PBIL s = new PBIL(popSize, f);
s.SolutionUpdated += (best_solution, step) =>
{
Console.WriteLine("Step {0}: Fitness = {1}", step, best_solution.Cost);
};
int max_iterations = 200;
s.Minimize(f, max_iterations);
Where the CostFunction_RosenbrockSaddle is the cost function that is defined as below:
public class CostFunction_RosenbrockSaddle : CostFunction
{
public CostFunction_RosenbrockSaddle()
: base(2, -2.048, 2.048) // 2 is the dimension of the continuous solution, -2.048 and 2.048 is the lower and upper bounds for the two dimensions
{
}
protected override void _CalcGradient(double[] solution, double[] grad) // compute the search gradent given the solution
{
double x0 = solution[0];
double x1 = solution[1];
grad[0] = 400 * (x0 * x0 - x1) * x0 - 2 * (1 - x0);
grad[1] = -200 * (x0 * x0 - x1);
}
// Optional: if not overriden, the default gradient esimator will be provided for gradient computation
protected override double _Evaluate(double[] solution) // compute the cost of problem given the solution
{
double x0 = solution[0];
double x1 = solution[1];
double cost =100 * Math.Pow(x0 * x0 - x1, 2) + Math.Pow(1 - x0, 2);
return cost;
}
}
Running CGA
The sample codes below shows how to solve the "Rosenbrock Saddle" continuous optmization problem using CGA:
CostFunction_RosenbrockSaddle f = new CostFunction_RosenbrockSaddle();
int n = 1000; // sample size for the distribution
CGA s = new CGA(n, f);
s.SolutionUpdated += (best_solution, step) =>
{
Console.WriteLine("Step {0}: Fitness = {1}", step, best_solution.Cost);
};
int max_iterations = 2000000;
s.Minimize(f, max_iterations);
Running UMDA
The sample codes below shows how to solve the "Rosenbrock Saddle" continuous optmization problem using UMDA:
CostFunction_RosenbrockSaddle f = new CostFunction_RosenbrockSaddle();
int popSize = 1000;
int selectionSize = 100;
UMDA s = new UMDA(popSize, selectionSize, f);
s.SolutionUpdated += (best_solution, step) =>
{
Console.WriteLine("Step {0}: Fitness = {1}", step, best_solution.Cost);
};
int max_iterations = 2000000;
s.Minimize(f, max_iterations);
Running MIMIC
The sample codes below shows how to solve the "Rosenbrock Saddle" continuous optmization problem using MIMIC:
CostFunction_RosenbrockSaddle f = new CostFunction_RosenbrockSaddle();
int n = 1000; // population size
MIMIC s = new MIMIC(n, f);
s.SolutionUpdated += (best_solution, step) =>
{
Console.WriteLine("Step {0}: Fitness = {1}", step, best_solution.Cost);
};
int max_iterations = 2000000;
s.Minimize(f, max_iterations);
Running CrossEntropyMethod
The sample codes below shows how to solve the "Rosenbrock Saddle" continuous optmization problem using CrossEntropyMethod:
CostFunction_RosenbrockSaddle f = new CostFunction_RosenbrockSaddle();
int sampleSize = 1000;
int selectionSize = 100;
CrossEntropyMethod s = new CrossEntropyMethod(sampleSize, selectionSize, f);
s.SolutionUpdated += (best_solution, step) =>
{
Console.WriteLine("Step {0}: Fitness = {1}", step, best_solution.Cost);
};
int max_iterations = 2000000;
s.Minimize(f, max_iterations);
Solving Problems with Binary-encoded Solutions
Running PBIL
The samle codes below show how to solve a canonical optimization problem that look for solutions with minimum number of 1 bits in the solution:
int popSize = 8000;
int dimension = 50;
int eliteCount = 50;
PBIL s = new PBIL(popSize, dimension, eliteCount);
s.MaxIterations = 100;
s.SolutionUpdated += (best_solution, step) =>
{
Console.WriteLine("Step {0}: Fitness = {1}", step, best_solution.Cost);
};
s.Minimize((solution, constraints) =>
{
// solution is binary-encoded
double cost = 0;
// minimize the number of 1 bits in the solution
for(int i=0; i < solution.Length; ++i)
{
cost += solution[i];
}
return cost;
});
Running CGA
The samle codes below show how to solve a canonical optimization problem that look for solutions with minimum number of 1 bits in the solution:
int sampleSize = 8000;
int dimension = 50;
int sampleSelectionSize = 100;
CGA s = new CGA(sampleSize, dimension, sampleSelectionSize);
s.MaxIterations = 100;
s.SolutionUpdated += (best_solution, step) =>
{
Console.WriteLine("Step {0}: Fitness = {1}", step, best_solution.Cost);
};
s.Minimize((solution, constraints) =>
{
// solution is binary-encoded
double cost = 0;
// minimize the number of 1 bits in the solution
for(int i=0; i < solution.Length; ++i)
{
cost += solution[i];
}
return cost;
});
Running UMDA
The samle codes below show how to solve a canonical optimization problem that look for solutions with minimum number of 1 bits in the solution:
int sampleSize = 8000;
int dimension = 50;
int sampleSelectionSize = 100;
UMDA s = new UMDA(sampleSize, dimension, sampleSelectionSize);
s.MaxIterations = 100;
s.SolutionUpdated += (best_solution, step) =>
{
Console.WriteLine("Step {0}: Fitness = {1}", step, best_solution.Cost);
};
s.Minimize((solution, constraints) =>
{
// solution is binary-encoded
double cost = 0;
// minimize the number of 1 bits in the solution
for(int i=0; i < solution.Length; ++i)
{
cost += solution[i];
}
return cost;
});
TODO
- BOA algorithm still has bugs, will need to be fixed in the future release.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net452 is compatible. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.1 | 1,140 | 11/11/2017 |
Estimation of Distribution Algorithms in .NET 4.5.2