1

我正在编写一个最大化给定函数 F 并返回坐标的小类。例如,在最大化下面的一维适应度函数时,我目前有:

using System;

public static class Program
{
    public static double F(double x)
    {
        // for example
        return Math.Exp(0.4 * Math.Pow(x - 0.4, 2) - 0.08 * Math.Pow(x, 4));
    }

    static void Main(string[] args)
    {

    Metaheutistic Solve = new Metaheutistic;

    Solve.Maximize(Mu, Lambda, Theta);

    }
}

Metaheutistic 类中的“最大化”方法包含完成所有工作的算法。我的问题是这个算法属于一个不知道适应度函数是什么样子的类。

我是 C# 的新手,如果我在这里遇到了麻烦,我愿意重新做一遍以使其正确。但是,我确实需要将 Solver 类与适应度函数分开。

非常感谢。*我不确定“通过”是我正在寻找的正确术语

4

1 回答 1

0

您确实可以使用委托将方法传递给函数,例如:

public delegate double FitnessDelegate(double x);

声明一个函数的委托,该函数接受一个 double 参数并返回一个 double。然后,您可以创建对实际函数的引用,并将其传递给要调用的 Solve 方法。

public static class Program
{
    public static double F(double x)
    {
        // for example
        return Math.Exp(0.4 * Math.Pow(x - 0.4, 2) - 0.08 * Math.Pow(x, 4));
    }

    static void Main(string[] args)
    {
    FitnessDelegate fitness = new FitnessDelegate(F);
    Metaheutistic Solve = new Metaheutistic;

    Solve.Maximize(fitness);

    }
}

在 Solve 方法中,您可以像调用方法一样调用此委托,它实际上将执行实际方法:

class Metaheutistic 
{
  public void Maximise(FitnessDelegate fitness)
  {
    double result = fitness(1.23);
  }
}
于 2010-01-04T12:27:28.960 回答