*将方法传递给类

时间:2010-01-04 11:36:03

标签: class function methods fitness

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

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类中的“Maximize”方法包含完成所有工作的算法。我的问题是这个算法属于一个不知道健身函数是什么样的类。

我是C#的新手,如果我在这里做了一个弯曲,我愿意再做一遍以使它正确。但我确实需要将Solver类与fit函数分开。

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

1 个答案:

答案 0 :(得分: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);
  }
}