2010-01-04 5 views
1

주어진 함수 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 모든 작업을 수행하는 알고리즘을 포함하는 클래스에서 "극대화". 내 문제는이 알고리즘이 피트니스 기능이 어떻게 생겼는지 알지 못하는 클래스에 있다는 것입니다.

저는 C#에 익숙하지 않습니다. 여기에 벤더를 사용했다면 다시 시도해 볼 수 있습니다. 그러나 Solver 클래스를 fitness 함수와 별도로 유지해야합니다.

감사합니다. * 나는 예를 들어, 당신이 참으로 대리자를 사용하여 기능에 방법을 전달할 수 있습니다

답변

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); 

    } 
} 

당신으로이 대리자를 호출 할 수 있습니다 당신이하고자하는 방법과 사실 실제 방법을 실행하는 것입니다 :

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

화려한 덕분! – Victor

관련 문제