Pergunta

Estou codificando uma classe pequena que maximiza uma determinada função f e retorna as coordenadas. Por exemplo, para maximizar a função de condicionamento de condicionamento unidimensional abaixo, atualmente tenho:

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

    }
}

O método "maximizar" na metaheutista da classe contém o algoritmo que faz todo o trabalho. Meu problema é que esse algoritmo está em uma classe que não sabe como é a função de condicionamento físico.

Eu sou novo no C# e se eu fui um pouco aqui, estou aberto a fazer tudo de novo para acertar. No entanto, preciso manter a classe solucionadora separada da função de condicionamento físico.

Muito Obrigado. *Não tenho certeza de "passar" é o termo correto que estou procurando

Foi útil?

Solução

Você pode realmente passar métodos em funções usando um delegado, por exemplo:

public delegate double FitnessDelegate(double x);

Declara um delegado para uma função que pega um parâmetro duplo e retorna um dobro. Você pode criar uma referência à função real e passar isso para o método de resolução a ser chamado.

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

    }
}

Dentro do método de resolução, você pode chamar esse delegado como faria com um método e ele estará de fato executando o método real:

class Metaheutistic 
{
  public void Maximise(FitnessDelegate fitness)
  {
    double result = fitness(1.23);
  }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top