2010-01-04 109 views
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类与适应度函数分开。

非常感谢。 *我不知道“传递”是正确的说法我在寻找

回答

0

事实上,你可以通过使用代理方式进入功能,例如:

public delegate double FitnessDelegate(double x); 

声明委托给一个函数它采用双参数并返回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); 

    } 
} 

的解决方法中,你可以调用这个代表你将一个方法,它其实会执行实际的方法:

class Metaheutistic 
{ 
    public void Maximise(FitnessDelegate fitness) 
    { 
    double result = fitness(1.23); 
    } 
} 
+0

这是辉煌的感谢! – Victor 2010-01-04 13:27:24