ошибка CS0246: не удалось найти тип или имя пространства имен AForge. Вам не хватает директивы using или ссылки на сборку?

Я пытаюсь создать n-Queens с генетическим алгоритмом в Unity3D, но эта ошибка появляется каждый раз ...

код:

using UnityEngine;
using System;
using System.Collections;

using AForge.Genetic;
using AForge.Math;

namespace AlgoritmoGenetico
{
public class GA : MonoBehaviour {

    int populationSizeBox;
    int iterationsBox;
    int nRainhasBox;
    int crossoverRateBox;
    int motacaoRateBox;
    int paradaBox;
    //int selecao;

    private String log = "";
    private int nRainhas = 14;
    private int nPopulacao = 14;
    private int nGeracoes = 8000;
    private int nParada = 100;
    private double crossoverRate = 0.75;
    private double mutationRate = 0.01;


    // Use this for initialization
    void Start () {
        Iniciar ();
    }

    // Update is called once per frame
    void Update () {

    }

    public void Iniciar(){
        configuraAlgoritimo();
        int selecao = 0; // definimos para o metodo roleta
        ISelectionMethod metodoDeSelecao = (selecao == 0) ? (ISelectionMethod)new RouletteWheelSelection() :
            (selecao == 1) ? (ISelectionMethod)new EliteSelection() :
                (ISelectionMethod)new RankSelection();

        AvaliadorDeRainhas avaliador = new AvaliadorDeRainhas();
        Population populacao = new Population(nPopulacao, new ShortArrayChromosome(nRainhas, nRainhas - 1), avaliador, metodoDeSelecao);
        populacao.CrossoverRate = crossoverRate;
        populacao.MutationRate = mutationRate;


        int iteracao = 0;
        int pararEm = nParada;
        while (iteracao < nGeracoes)
        {
            populacao.RunEpoch();

            if (nParada > 0 && iteracao == pararEm)
            {
                atualizaDadosPara(iteracao, populacao);

                pararEm += nParada;
            }
            if (populacao.BestChromosome.Fitness == nRainhas)
                break;
            iteracao++;
        }

        atualizaDadosPara(iteracao,populacao);
    }

    private void atualizaDadosPara(int iteracao,Population populacao)
    {
        log = "Geração: " + iteracao +
            "\n Método de Seleção : " + populacao.SelectionMethod +
                "\n Avaliação Média: " + populacao.FitnessAvg +
                "\n Melhor Avaliação : " + populacao.FitnessMax +
                "\n Melhor indivíduo: " + populacao.BestChromosome.ToString();
        print (log);
    }

    private void configuraAlgoritimo(){
        try
        {
            nPopulacao = Math.Max(10, Math.Min(100, int.Parse(populationSizeBox)));
        }
        catch
        {
            nPopulacao = 8;
        }
        try
        {
            nGeracoes = Math.Max(0, int.Parse(iterationsBox));
        }
        catch
        {
            nGeracoes = 100;
        }
        try
        {
            nRainhas = Math.Max(4, int.Parse(nRainhasBox));
        }
        catch
        {
            nRainhas = 8;
        }
        try
        {
            crossoverRate = Math.Max(0.0, int.Parse(crossoverRateBox));
        }
        catch
        {
            crossoverRate = 0.75;
        }
        try
        {
            mutationRate = Math.Max(0.0, int.Parse(motacaoRateBox));
        }
        catch
        {
            mutationRate = 0.01;
        }
        try
        {
            nParada = Math.Max(0, int.Parse(paradaBox));
        }
        catch
        {
            nParada = 0;
        }
    }
}
}

person Nimai Marchiori    schedule 30.11.2015    source источник
comment
Похоже, в ваших проектах отсутствует ссылка на AForge библиотеку. Можете ли вы найти его в папке «Ссылки» в вашей папке ProjectName.CSharp? Также существует вероятность, что эта библиотека не поддерживается для проектов Unity3D.   -  person mwilczynski    schedule 30.11.2015


Ответы (1)


Я воссоздал проблему, которая возникла в вашем случае. В папке \Assets вашего проекта отсутствует AForge.dll файл.

DLL, которую вы ищете, должна находиться в AForge.NET Framework-x.x.x-(libs only)\Release папке, которую вы, вероятно, скачали заархивированную с сайта AForge.NET.

Если вам все еще сложно его найти, подумайте о повторной загрузке всего пакета, выбрав [ Download Libraries Only ]:

http://www.aforgenet.com/framework/downloads.html

Я также исправил некоторые проблемы, которые у вас были там. Вам не нужно приводить значение int к int.Parse(), если оно уже объявлено как int. Просто выполните Math.Max(x, y) и т. Д. С функциями, которые вы используете. Также вы не используете ничего из пространства имен AForge.Math. Если это было намеренно, рассмотрите возможность удаления using AForge.Math;, поскольку он не используется.

person mwilczynski    schedule 30.11.2015