在c#中编写麻雀搜索算法程序
时间: 2024-03-22 18:40:17 浏览: 148
麻雀搜索算法(Sparrow Search Algorithm)是一种基于群体智能的优化算法,可以用于解决各种优化问题。下面是一个使用C#语言编写麻雀搜索算法的示例程序:
```csharp
using System;
namespace SparrowSearchAlgorithm
{
class Program
{
static void Main(string[] args)
{
// 定义问题参数
int dim = 2; // 问题维度
int n = 10; // 种群大小
int iter = 100; // 迭代次数
double[,] bounds = { { -10, 10 }, { -10, 10 } }; // 取值范围
// 初始化种群
double[,] x = new double[n, dim]; // 种群位置
double[,] v = new double[n, dim]; // 种群速度
double[,] pbest = new double[n, dim]; // 个体最优位置
double[] pfit = new double[n]; // 个体最优适应度
double[] gbest = new double[dim]; // 全局最优位置
double gfit = double.MaxValue; // 全局最优适应度
Random rand = new Random();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < dim; j++)
{
x[i, j] = bounds[j, 0] + rand.NextDouble() * (bounds[j, 1] - bounds[j, 0]); // 随机初始化位置
v[i, j] = -1 + 2 * rand.NextDouble(); // 随机初始化速度
pbest[i, j] = x[i, j]; // 初始个体最优位置
}
pfit[i] = FitnessFunction(pbest[i]); // 计算初始个体最优适应度
if (pfit[i] < gfit) // 更新全局最优位置
{
gfit = pfit[i];
for (int j = 0; j < dim; j++)
{
gbest[j] = pbest[i, j];
}
}
}
// 迭代优化
for (int t = 0; t < iter; t++)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < dim; j++)
{
v[i, j] = v[i, j] + rand.NextDouble() * (pbest[i, j] - x[i, j]) + rand.NextDouble() * (gbest[j] - x[i, j]); // 更新速度
x[i, j] = x[i, j] + v[i, j]; // 更新位置
if (x[i, j] < bounds[j, 0]) // 边界处理
{
x[i, j] = bounds[j, 0];
v[i, j] = -v[i, j];
}
if (x[i, j] > bounds[j, 1])
{
x[i, j] = bounds[j, 1];
v[i, j] = -v[i, j];
}
}
double fit = FitnessFunction(x[i]); // 计算适应度
if (fit < pfit[i]) // 更新个体最优位置
{
pfit[i] = fit;
for (int j = 0; j < dim; j++)
{
pbest[i, j] = x[i, j];
}
if (fit < gfit) // 更新全局最优位置
{
gfit = fit;
for (int j = 0; j < dim; j++)
{
gbest[j] = x[i, j];
}
}
}
}
Console.WriteLine("Iteration {0}: {1}", t, gfit); // 输出迭代结果
}
}
// 适应度函数,可根据具体问题进行定义
static double FitnessFunction(double[] x)
{
double sum = 0;
for (int i = 0; i < x.Length; i++)
{
sum += x[i] * x[i];
}
return sum;
}
}
}
```
以上是一个简单的麻雀搜索算法示例程序,其中通过FitnessFunction函数定义了一个二维问题的适应度函数,并使用随机数生成器初始化了种群位置和速度。在迭代过程中,根据速度和位置更新公式更新了种群位置和速度,并根据适应度函数计算了个体最优位置和全局最优位置。最后输出了每次迭代的全局最优适应度。
阅读全文