用c#编写麻雀搜索算法求最值
时间: 2024-03-24 08:37:46 浏览: 17
以下是使用C#编写麻雀搜索算法求解最值的示例代码:
```csharp
using System;
class SparrowSearchAlgorithm
{
static void Main(string[] args)
{
int maxIter = 100; // 最大迭代次数
int popSize = 50; // 种群大小
double w = 0.5; // 惯性权重
double c1 = 2.0; // 自我认知学习因子
double c2 = 2.0; // 社会认知学习因子
double vmax = 0.5; // 最大速度
// 定义适应度函数,这里以求解函数f(x)=x^2的最小值为例
Func<double, double> fitnessFunc = (x) => x * x;
// 初始化种群
double[] positions = new double[popSize];
double[] velocities = new double[popSize];
double[] pbestPositions = new double[popSize];
double[] pbestFitness = new double[popSize];
double gbestPosition = 0.0;
double gbestFitness = double.MaxValue;
Random rand = new Random();
for (int i = 0; i < popSize; i++)
{
positions[i] = rand.NextDouble() * 10.0 - 5.0;
velocities[i] = (rand.NextDouble() * 2.0 - 1.0) * vmax;
pbestPositions[i] = positions[i];
pbestFitness[i] = fitnessFunc(positions[i]);
if (pbestFitness[i] < gbestFitness)
{
gbestPosition = pbestPositions[i];
gbestFitness = pbestFitness[i];
}
}
// 开始迭代
for (int iter = 0; iter < maxIter; iter++)
{
for (int i = 0; i < popSize; i++)
{
// 鸟巢筛选
double fitness = fitnessFunc(positions[i]);
if (fitness < pbestFitness[i])
{
pbestFitness[i] = fitness;
pbestPositions[i] = positions[i];
if (pbestFitness[i] < gbestFitness)
{
gbestPosition = pbestPositions[i];
gbestFitness = pbestFitness[i];
}
}
// 探索行为
double r1 = rand.NextDouble();
double r2 = rand.NextDouble();
velocities[i] = w * velocities[i] + c1 * r1 * (pbestPositions[i] - positions[i]) + c2 * r2 * (gbestPosition - positions[i]);
// 限制速度
if (velocities[i] > vmax)
{
velocities[i] = vmax;
}
else if (velocities[i] < -vmax)
{
velocities[i] = -vmax;
}
// 移动麻雀位置
positions[i] += velocities[i];
// 局部搜索
double r3 = rand.NextDouble();
double r4 = rand.NextDouble();
if (r3 < 0.5)
{
positions[i] += r4 * (pbestPositions[i] - positions[i]);
}
else
{
positions[i] += r4 * (gbestPosition - positions[i]);
}
}
}
// 输出结果
Console.WriteLine("最优解为:{0}", gbestPosition);
Console.WriteLine("最优值为:{0}", gbestFitness);
}
}
```
注意,这里的适应度函数以求解函数f(x)=x^2的最小值为例,实际应用中需要根据具体情况进行修改。另外,麻雀搜索算法的参数设置也需要根据具体问题进行调整。