2010-01-04 143 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