我正在编写一个小类,它使给定函数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函数分开。
非常感谢。 *我不确定“传递”是我正在寻找的正确术语
答案 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);
}
}